🐙

ArgoCDでApplicationSetを使ってみる

2023/04/28に公開

目標

ApplicationSetを利用して、1つのmanifestで2つのApplicationを管理してみます。

  1. apache
  2. nginx

ApplicationSetとは

複数のApplicationの管理を自動化してくれるCRD。

https://argocd-applicationset.readthedocs.io/en/stable/

大きくgeneratorstemplateのフィールドに分けられている。

  1. generators
    templateに渡すパラメタを生成する。generatorsのは複数種類ある。
  • List generator
  • Cluster generator
  • Git generator
  • Matrix generator

https://argocd-applicationset.readthedocs.io/en/stable/Generators/

  1. template
    Application.spec同様にリポジトリ情報などを定義する。
    generatorsで生成したパラメタを利用できる。
template:
  spec:
    project: default
    source:
      repoURL: https://github.com/xxx/argocd-sample-app.git
      targetRevision: argocd-applicationset
      path: '{{path}}' #generatorsで生成したパラメタ
    destination:
      server: https://kubernetes.default.svc
      namespace: '{{path}}' #generatorsで生成したパラメタ
    syncPolicy:
      automated: {}

リポジトリ構成

リポジトリ構成
root
├ argocd
  └ applicationset.yaml #ApplicationSet
├ httpd
  └ httpd.yaml #リソース(Namespace/Deployment/Service)
├ nginx
  └ nginx.yaml #リソース Namespace/Deployment/Service

ApplicationSet

List generatorでApplicationを作成してみる。

applicationset.yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: application-set
  namespace: argocd
spec:
  generators:
  - list: #今回はList generatorを利用します
      elements:
      - cluster: https://kubernetes.default.svc
        path: "nginx"
      - cluster: https://kubernetes.default.svc
        path: "httpd"
  template:
    metadata:
      name: '{{path}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/xxx/argocd-sample-app.git
        targetRevision: argocd-applicationset
        path: '{{path}}'
      destination:
        server: https://kubernetes.default.svc
        namespace: '{{path}}'
      syncPolicy:
        automated: {}

リソース

apache

httpd.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: httpd
spec:
  destination:
    namespace: defalut
    server: https://kubernetes.default.svc
  project: default
  source:
    path: httpd
    repoURL: https://github.com/xxx/argocd-sample-app.git
    targetRevision: main
  syncPolicy:
    automated: {}

nginx

nginx.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: nginx
spec:
  destination:
    namespace: defalut
    server: https://kubernetes.default.svc
  project: default
  source:
    path: nginx
    repoURL: https://github.com/xxx/argocd-sample-app.git
    targetRevision: main
  syncPolicy:
    automated: {}

デプロイ

>> argocd/
kubectl apply -f applicationset.yaml

Applicationが2つ作成されました。

前回の記事ではApplication数分のmanifestを定義する必要がありましたが、今回はApplicationSetを1つ定義するだけ複数Applicationを管理できるようになりました。
https://zenn.dev/kassshi/articles/argocd-app-of-apps

Discussion