メインコンテンツまでスキップ

アプリケーションのデプロイ

クラスターにFluxを正常にブートストラップしたので、アプリケーションをデプロイできるようになりました。GitOpsベースのアプリケーションデリバリーと他の方法との違いを示すために、現在kubectl apply -kアプローチを使用しているサンプルアプリケーションのUIコンポーネントを新しいFluxデプロイメントアプローチに移行します。

まず、既存のUIコンポーネントを削除して置き換えましょう:

~$kubectl delete namespace ui

次に、前のセクションでFluxをブートストラップするために使用したリポジトリをクローンします:

~$git clone ssh://git@${GITEA_SSH_HOSTNAME}:2222/workshop-user/flux.git

次に、「apps」ディレクトリを作成してFluxリポジトリの構築を始めましょう。このディレクトリは、各アプリケーションコンポーネントのサブディレクトリを含むように設計されています:

~$mkdir ~/environment/flux/apps

次に、Fluxにそのディレクトリについて知らせるkustomizationを作成します:

~/environment/eks-workshop/modules/automation/gitops/flux/basic/apps.yaml
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: apps
namespace: flux-system
spec:
interval: 1m0s
sourceRef:
kind: GitRepository
name: flux-system
path: ./apps
prune: true
A

kustomizationに識別しやすい名前を付けます

B

Fluxに1分ごとにポーリングするように指示します

C

Gitリポジトリ内のappsパスを使用します

このファイルをGitリポジトリディレクトリにコピーします:

~$cp ~/environment/eks-workshop/modules/automation/gitops/flux/basic/apps.yaml \
~/environment/flux/apps.yaml

アプリケーションコンポーネントはAmazon ECR Publicに公開されているHelmチャートを使用してインストールします。

FluxにHelmチャートのソースを伝えるためのHelmRepositoryリソースを作成しましょう:

~/environment/eks-workshop/modules/automation/gitops/flux/basic/apps/repository.yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: retail-store
namespace: flux-system
spec:
url: oci://public.ecr.aws/aws-containers
type: "oci"
interval: 5m0s
A

HelmリポジトリのURL

B

ECR PublicはHelmチャートをOCIアーティファクトとしてホストしています

C

5分ごとに更新をチェックします

このファイルをGitリポジトリディレクトリにコピーします:

~$cp ~/environment/eks-workshop/modules/automation/gitops/flux/basic/apps/repository.yaml \
~/environment/flux/apps/repository.yaml

最後に、FluxにUIコンポーネントのHelmチャートをインストールするように指示します:

~/environment/eks-workshop/modules/automation/gitops/flux/basic/apps/ui/helm.yaml
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: ui
namespace: flux-system
spec:
interval: 10m
timeout: 5m
chart:
spec:
chart: retail-store-sample-ui-chart
version: "1.2.1"
sourceRef:
kind: HelmRepository
name: retail-store
interval: 5m
releaseName: ui
install:
createNamespace: true
targetNamespace: ui
values:
ingress:
enabled: true
className: alb
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/healthcheck-path: /actuator/health/liveness
A

HelmReleaseリソースの名前

B

上記で指定したHelmリポジトリを参照するチャートの名前とバージョン

C

名前空間が存在しない場合は作成します

D

この場合はイングレスを有効にするなど、valuesを使用してチャートを構成します

適切なファイルをGitリポジトリディレクトリにコピーします:

~$cp -R ~/environment/eks-workshop/modules/automation/gitops/flux/basic/apps/ui \
~/environment/flux/apps

Gitディレクトリは次のようになっているはずです。tree ~/environment/fluxを実行して確認できます:

.
├── apps
│ ├── repository.yaml
│ └── ui
│ ├── helm.yaml
│ └── kustomization.yaml
├── apps.yaml
└── flux-system
├── gotk-components.yaml
├── gotk-sync.yaml
└── kustomization.yaml


3 directories, 7 files

最後に、構成をGitにプッシュします:

~$git -C ~/environment/flux add .
~$git -C ~/environment/flux commit -am "Adding the UI service"
~$git -C ~/environment/flux push origin main

Fluxがギットの変更に気づいて調整するまでに時間がかかります。Flux CLIを使用して、新しいapps kustomizationが表示されるのを監視できます:

~$flux get kustomization --watch --timeout=10m
NAME           REVISION            SUSPENDED    READY   MESSAGE
flux-system    main@sha1:f39f67e   False        True    Applied revision: main@sha1:f39f67e
apps           main@sha1:f39f67e   False        True    Applied revision: main@sha1:f39f67e

また、Fluxに手動で調整をトリガーすることもできます:

~$flux reconcile source git flux-system -n flux-system

上記のようにappsが表示されたら、Ctrl+Cを使用してコマンドを閉じます。これで、UIサービスに関連するすべてのリソースが再度デプロイされているはずです。確認するには、次のコマンドを実行します:

~$kubectl get deployment -n ui ui
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
ui     1/1     1            1           5m
~$kubectl get pod -n ui
NAME                  READY   STATUS    RESTARTS   AGE
ui-54ff78779b-qnrrc   1/1     Running   0          5m

Ingressリソースからのアドレスを取得します:

~$ADDRESS=$(kubectl get ingress -n ui ui -o jsonpath="{.status.loadBalancer.ingress[*].hostname}")
~$echo "http://${ADDRESS}"
http://k8s-ui-ui-a9797f0f61.elb.us-west-2.amazonaws.com

ロードバランサーのプロビジョニングが完了するまで待つには、このコマンドを実行します:

~$curl --head -X GET --retry 30 --retry-all-errors --retry-delay 15 \
--connect-timeout 10 --max-time 60 \
$(kubectl get ingress -n ui ui -o jsonpath="{.status.loadBalancer.ingress[*].hostname}")

Webブラウザからアクセスしてください。Webストアからのインタフェースが表示され、ユーザーとしてサイト内を移動できます。

http://k8s-ui-ui-a9797f0f61.elb.us-west-2.amazonaws.com