このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「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-dev、guestbook-staging、guestbook-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.preserveResourcesOnDeletion を true に設定します。詳細は、Argo CD ドキュメントの「Application Pruning & Resource Deletion
重要
Argo CD の ApplicationSet 機能には、ApplicationSet を使用する前に注意すべきセキュリティ上の考慮事項があります。詳細は、Argo CD ドキュメントの「ApplicationSet Security
その他のリソース
-
Argo CD Project を操作する - Project で ApplicationSet を整理する
-
Application を作成する - Application 設定を理解する
-
ApplicationSet ドキュメント
- ジェネレーターの詳細なリファレンスとパターン -
ジェネレーターのリファレンス
- ジェネレーターの詳細な仕様