Kubernetes クラスタに Argo CD をインストールして Git リポジトリの Manifest に加えた変更が同期されるようにする
kubernetesArgo CD は Kubernetes 用の CD ツール。
CRD や Controller などをインストールする。
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
...
service/argocd-server-metrics created
deployment.apps/argocd-applicationset-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-notifications-controller created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created
statefulset.apps/argocd-application-controller created
...
CLI をインストールして、admin のパスワードを取得してログインする。
$ brew install argocd
$ ADMIN_PASSWORD=$(argocd admin initial-password -n argocd)
$ echo $ADMIN_PASSWORD
$ argocd login localhost:8080 --username admin --password $ADMIN_PASSWORD --insecure
サンプルアプリケーションを作成する。
$ argocd app create guestbook \
--repo https://github.com/argoproj/argocd-example-apps.git \
--path guestbook --dest-server https://kubernetes.default.svc \
--dest-namespace default
application 'guestbook' created
$ kubectl get -n argocd application
NAME SYNC STATUS HEALTH STATUS
guestbook OutOfSync Missing
UI 上でも確認できる。
$ kubectl port-forward svc/argocd-server -n argocd 8080:443
まだ sync されていないので apply される manifest が diff として表示される。
sync すると Pod が立ち上がる。
今度は Application リソースで Auto sync を有効にしてアプリケーションを追加してみる。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/sambaiz/argocd-example-apps.git
targetRevision: HEAD
path: guestbook
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
リポジトリに manifest を追加して push すると自動で sync が走る。argocd.argoproj.io/sync-wave annotation で順序を制御できる。 prune によってリポジトリから削除した manifest はクラスタからも削除され、selfHeal によって手動でクラスタに加えた変更は元に戻る。
argocd-notifications-secret Secret に token などを格納して、argocd-notifications-cm ConfigMap の notifications や Application に notifications.argoproj.io/subscribe.(trigger).(service): (recipients) annotation を設定するとトリガーの発火時に通知が飛ぶ。
metadata:
annotations:
notifications.argoproj.io/subscribe.on-sync-succeeded.slack: my-channel1;my-channel2