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

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

Amazon EKS Capability for Argo CDを有効化したので、アプリケーションをデプロイしましょう。GitOpsベースの配信アプローチと従来のデプロイ方法の違いを示すために、サンプルアプリケーションのUIコンポーネントをkubectl apply -kアプローチからArgo CD管理のデプロイに移行します。

Argo CDアプリケーションは、環境内のデプロイされたアプリケーションインスタンスを表すCustom Resource Definition(CRD)です。アプリケーション名、Gitリポジトリの場所、Kubernetesマニフェストへのパスなどの重要な情報を定義します。アプリケーションリソースはまた、望ましい状態、ターゲットリビジョン、同期ポリシー、およびヘルスチェックポリシーも指定します。

まず、既存のサンプルアプリケーションをクラスターから削除しましょう:

~$kubectl delete namespace -l app.kubernetes.io/created-by=eks-workshop
namespace "carts" deleted
namespace "catalog" deleted
namespace "checkout" deleted
namespace "orders" deleted
namespace "other" deleted
namespace "ui" deleted

次に、UIコンポーネント用の公開チャートをHelm依存関係として使用する単純なHelmチャートでGitリポジトリを設定します:

~/environment/eks-workshop/modules/automation/gitops/argocd/Chart.yaml
apiVersion: v2
name: retail-store-sample-chart
description: A Helm chart for the AWS retail store ui component
type: application
version: 0.0.1
dependencies:
- name: retail-store-sample-ui-chart
alias: ui
version: 1.2.1
repository: oci://public.ecr.aws/aws-containers
A

ラッパーHelmチャートの名前

B

このチャートがアプリケーションをデプロイすることを示す

C

チャートのバージョンを指定

D

ラッパーHelmチャートの依存関係として、AWSのパブリックOCIレジストリからリテールストアUIコンポーネントの名前、エイリアス、バージョンを指定

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

~$mkdir -p ~/environment/argocd/ui
~$cp ~/environment/eks-workshop/modules/automation/gitops/argocd/Chart.yaml \
~/environment/argocd/ui

Gitディレクトリは以下のような構造になっているはずです:

~$tree ~/environment/argocd
`-- ui
    `-- Chart.yaml

次に、構成をGitリポジトリにプッシュします:

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

Argo CDはAppProjectsを使用して、アプリケーションがターゲットにできるGitリポジトリ、宛先クラスター、namespaceを制御します。すべてのアプリケーションはプロジェクトに属する必要があります。すべてのリポジトリと宛先へのアクセスを許可するdefaultプロジェクトを作成しましょう:

~$kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: default
namespace: argocd
spec:
clusterResourceWhitelist:
- group: '*'
kind: '*'
destinations:
- namespace: '*'
server: '*'
sourceRepos:
- '*'
EOF
appproject.argoproj.io/default created

次に、Gitリポジトリを使用するように構成されたArgo CDアプリケーションを作成します:

~$export CLUSTER_ARN=$(aws eks describe-cluster --name $EKS_CLUSTER_NAME \
--query 'cluster.arn' --output text)
~$argocd app create ui --repo $GITOPS_REPO_URL_ARGOCD \
--path ui --dest-server $CLUSTER_ARN \
--dest-namespace ui --sync-option CreateNamespace=true
application 'ui' created

アプリケーションが作成されたことを確認できます:

~$argocd app list
NAME         CLUSTER                                               NAMESPACE  PROJECT  STATUS     HEALTH   SYNCPOLICY  CONDITIONS
argocd/ui    arn:aws:eks:us-west-2:1234567890:cluster/eks-workshop  ui         default  OutOfSync  Missing  Manual      <none>

このアプリケーションはArgo CD UIで確認できます:

Argo CD UIでのアプリケーション

あるいは、kubectlコマンドを使用してArgo CDオブジェクトを直接操作することもできます:

~$kubectl get applications.argoproj.io -n argocd
NAME   SYNC STATUS   HEALTH STATUS
ui     OutOfSync     Missing

Argo CDでは、「out of sync」(同期していない)は、Gitリポジトリで定義された望ましい状態がKubernetesクラスター内の実際の状態と一致していないことを示します。Argo CDは自動同期が可能ですが、今は手動でこのプロセスをトリガーします:

~$argocd app sync ui
~$argocd app wait ui --timeout 120

しばらくすると、アプリケーションはSynced状態に到達し、すべてのリソースがデプロイされます。UIは次のようになります:

argocd-deploy-application

これにより、Argo CDがHelmチャートを正常にインストールし、クラスターと同期していることが確認されました。

これでUIコンポーネントをArgo CDを使用してデプロイするように正常に移行しました。今後Gitリポジトリにプッシュされた変更は、自動的にEKSクラスターに調整されます。

UIサービスに関連するすべてのリソースがデプロイされたことを確認するために、次のコマンドを実行します:

~$kubectl get deployment -n ui ui
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
ui     1/1     1            1           61s
~$kubectl get pod -n ui
NAME                 READY   STATUS   RESTARTS   AGE
ui-6d5bb7b95-rjfxd   1/1     Running  0          62s