🐙
ArgoCDでApplicationSetを使ってみる
目標
ApplicationSetを利用して、1つのmanifestで2つのApplicationを管理してみます。
- apache
- nginx
ApplicationSetとは
複数のApplicationの管理を自動化してくれるCRD。
大きくgenerators
とtemplate
のフィールドに分けられている。
- generators
templateに渡すパラメタを生成する。generatorsのは複数種類ある。
- List generator
- Cluster generator
- Git generator
- Matrix generator
- 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を管理できるようになりました。
Discussion