ApplicationSet を使用する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

ApplicationSet を使用する

ApplicationSet によりテンプレートから複数の Application が生成されるため、単一のリソース定義で複数のクラスター、環境、または名前空間に同じアプリケーションをデプロイできます。

前提条件

  • EKS クラスターに Argo CD 機能が作成されていること

  • リポジトリアクセスが設定されていること (「リポジトリアクセスを設定する」を参照)

  • クラスターと通信できるように kubectl が設定されていること

注記

ApplicationSet には複数のターゲットクラスターは必要ありません。クラスタージェネレーター以外のジェネレーター (リスト、git、マトリックスジェネレーターなど) を使用して、リモートクラスターなしでアプリケーションをデプロイできます。

ApplicationSet の仕組み

ApplicationSet は、ジェネレーターを使用してパラメータを生成し、生成したパラメータを Application テンプレートに適用します。生成したパラメータのセットごとに Application が 1 つ作成されます。

EKS のデプロイによく使用されるジェネレーター:

  • リストジェネレーター - 環境ごとにクラスターとパラメータを明示的に定義します。

  • クラスタージェネレーター - 登録されたすべてのクラスターに自動的にデプロイします。

  • Git ジェネレーター - リポジトリ構造から Application を生成します。

  • マトリックスジェネレーター - 多次元デプロイ用にいくつかジェネレーターを組み合わせます。

  • マージジェネレーター – 複数のジェネレーターからのパラメータをマージします。

ジェネレーターの詳細なリファレンスについては、「ApplicationSet ドキュメント」を参照してください。

リストジェネレーター

複数のクラスターにデプロイするように明示的に設定します。

apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: guestbook-all-clusters namespace: argocd spec: generators: - list: elements: - environment: dev replicas: "2" - environment: staging replicas: "3" - environment: prod replicas: "5" template: metadata: name: 'guestbook-{{environment}}' spec: project: default source: repoURL: https://github.com/example/guestbook targetRevision: HEAD path: 'overlays/{{environment}}' destination: name: '{{environment}}-cluster' namespace: guestbook syncPolicy: automated: prune: true selfHeal: true
注記

読みやすくするために、destination.name をクラスター名と合わせて使用します。destination.server フィールドは、必要に応じて EKS クラスター ARN とも連携します。

これにより、guestbook-devguestbook-stagingguestbook-prod の 3 つの Application が作成されます。

クラスタージェネレーター

登録済みのすべてのクラスターに自動的にデプロイします。

apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: cluster-addons namespace: argocd spec: generators: - clusters: {} template: metadata: name: '{{name}}-addons' spec: project: default source: repoURL: https://github.com/example/cluster-addons targetRevision: HEAD path: addons destination: server: '{{server}}' namespace: kube-system syncPolicy: automated: prune: true selfHeal: true

これにより、登録済みのクラスターごとに Application が自動的に作成されます。

クラスターをフィルタリングする:

matchLabels を使用して特定のクラスターを含めるか、matchExpressions を使用してクラスターを除外します。

spec: generators: - clusters: selector: matchLabels: environment: production matchExpressions: - key: skip-appset operator: DoesNotExist

Git ジェネレーター

Git ジェネレーターは、リポジトリ構造に基づいて Application を作成します。

  • ディレクトリジェネレーター - 各ディレクトリを個別の Application としてデプロイします (マイクロサービスに有用です)。

  • ファイルジェネレーター - パラメータファイルから Application を生成します (マルチテナントデプロイに有用です)。

例: マイクロサービスのデプロイ

apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: microservices namespace: argocd spec: generators: - git: repoURL: https://github.com/example/microservices revision: HEAD directories: - path: services/* template: metadata: name: '{{path.basename}}' spec: project: default source: repoURL: https://github.com/example/microservices targetRevision: HEAD path: '{{path}}' destination: name: my-cluster namespace: '{{path.basename}}' syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true

Git ジェネレーターとファイルベースの設定の詳細については、Argo CD ドキュメントの「Git ジェネレーター」を参照してください。

マトリックスジェネレーター

複数のジェネレーターを組み合わせて、複数のディメンション (環境 × クラスター) にデプロイします。

apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: multi-env-multi-cluster namespace: argocd spec: generators: - matrix: generators: - list: elements: - environment: dev - environment: staging - environment: prod - clusters: selector: matchLabels: region: us-west-2 template: metadata: name: 'app-{{environment}}-{{name}}' spec: project: default source: repoURL: https://github.com/example/app targetRevision: HEAD path: 'overlays/{{environment}}' destination: name: '{{name}}' namespace: 'app-{{environment}}'

ジェネレーターを組み合わせる方法の詳細については、Argo CD ドキュメントの「マトリックスジェネレーター」を参照してください。

マルチリージョンデプロイ

複数のリージョンでクラスターにデプロイします。

apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: global-app namespace: argocd spec: generators: - list: elements: - clusterName: prod-us-west region: us-west-2 - clusterName: prod-us-east region: us-east-1 - clusterName: prod-eu-west region: eu-west-1 template: metadata: name: 'app-{{region}}' spec: project: default source: repoURL: https://github.com/example/app targetRevision: HEAD path: kubernetes helm: parameters: - name: region value: '{{region}}' destination: name: '{{clusterName}}' namespace: app syncPolicy: automated: prune: true selfHeal: true

ApplicationSet を管理する

ApplicationSet と生成された Application を表示する:

kubectl get applicationsets -n argocd kubectl get applications -n argocd -l argocd.argoproj.io/application-set-name=<applicationset-name>

ApplicationSet を更新する:

ApplicationSet の仕様を変更して再適用します。Argo CD は、生成したすべての Application を自動的に更新します。

kubectl apply -f applicationset.yaml

ApplicationSet を削除する:

kubectl delete applicationset <name> -n argocd
警告

ApplicationSet を削除すると、生成されたすべての Application も削除されます。削除対象の Application に prune: true がある場合、そのリソースもターゲットクラスターから削除されます。

ApplicationSet を削除するときにデプロイされたリソースを保持するには、ApplicationSet 仕様で .syncPolicy.preserveResourcesOnDeletiontrue に設定します。詳細は、Argo CD ドキュメントの「Application Pruning & Resource Deletion」を参照してください。

重要

Argo CD の ApplicationSet 機能には、ApplicationSet を使用する前に注意すべきセキュリティ上の考慮事項があります。詳細は、Argo CD ドキュメントの「ApplicationSet Security」を参照してください。

その他のリソース