Argo CD: Git にある YAML を Kubernetes に反映し続ける
- 公開日
- カテゴリ:ArgoCD
- タグ:Kubernetes,ArgoCD,学習メモ

Kubernetes で何かを動かすには、Deployment や Service の YAML を書いて kubectl apply -f を打つ。Argo CD は、この kubectl apply を人の代わりにやり続けるプログラム。YAML は Git に置き、Argo CD が Git を読んでクラスタに反映する。
Argo CD を触る前に、何に困ったときのもので、何ができるのかを押さえておく。
contents
自分で kubectl apply する運用で困ること
YAML を書いて kubectl apply -f を打てば動く。困るのは、動かしたあと。
| 困りごと | 何が起きるか |
|---|---|
| 今クラスタに入っている定義は、どのファイルか | kubectl apply を打った人の手元にしかファイルがない。別の人は kubectl get -o yaml でクラスタから引き出すしかない |
| 誰が、いつ、何を変えたか | クラスタには「今の状態」しかなく、変更の履歴がない |
| YAML を直したのに apply を忘れた | ファイルとクラスタが食い違ったまま、誰も気づかない |
誰かが kubectl edit や kubectl scale でクラスタを直接変えた | ファイルには残らない。次に誰かが apply すると消える |
| 前の状態に戻したい | 前の YAML が手元に残っていなければ戻せない |
どれも「YAML がどこにあって、クラスタと一致しているか」が、人の記憶と手元のファイル頼みなことから来る。
Argo CD は何をするか
Argo CD は、クラスタの中で動くプログラム。Git のリポジトリにある YAML を読み、クラスタに反映し続ける。
公式ドキュメントの Overview には「Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.」とある。CD は Continuous Delivery(継続的デリバリー)の略で、出来上がったものを本番の環境に届け続けること。
変わるのは 2 つ。
- YAML の置き場所が Git になる。 誰が・いつ・何を変えたかは Git の履歴に残る。戻すのは Git で前のコミットに戻すだけ
kubectl applyを手動で実行しなくてよくなる。 Argo CD が Git を定期的に見に行き、変わっていればクラスタに反映する。Git とクラスタが食い違っていれば画面に出す
「Git の中身 = クラスタの中身」にして、Git を正とする。この進め方を GitOps と呼ぶ。Argo CD は GitOps をやるための道具の 1 つ。
使わないときとの違い
自分で kubectl apply する | Argo CD を使う | |
|---|---|---|
| YAML の置き場所 | 手元のディレクトリ | Git のリポジトリ |
| クラスタに入れる人 | 自分(kubectl apply -f) | Argo CD(Git を読んで apply する) |
| YAML を変えたら | もう一度 apply を打つ | git push するだけ |
| 誰かがクラスタを直接変えたら | 気づかない | Argo CD が画面に「Git と違う」と出す。設定すれば Git の内容に戻す |
| 前に戻すには | 前の YAML を探して apply | Git で前のコミットに戻して push |
Git を見に行く間隔は、既定では 2〜3 分に 1 回。設定で変えられる。
Argo CD でできること
- Git の YAML をクラスタに反映する(自動でも手動でも)
- Git とクラスタの食い違いを検出して画面に出す
- 入れたものが正常に動いているかを画面に出す
- ブラウザの画面で今の状態を見る
- Git の前のコミットの状態に戻す
- 素の YAML のほか、Kustomize や Helm でも読める
このほかに、複数のクラスタへのデプロイ、GitHub からの Webhook、段階的なデプロイのためのフック(PreSync / Sync / PostSync)などがある。
どこで何が動くか
Argo CD を入れると、クラスタの argocd という namespace に Argo CD の Pod が作られる。図は、Git リポジトリ・自分の手元・クラスタの 3 つの場所に、何があるかを描いたもの。角が二重の箱は動くプログラム(Pod)、それ以外は etcd に保存されたデータ。
- Argo CD の Pod は 7 種類あるが、役割の中心は 3 つ
argocd-server: ブラウザに画面を出すargocd-repo-server: Git からファイルを取ってくるargocd-application-controller: Git の内容とクラスタの中身を比べ、違っていれば apply する
- Application は etcd に保存されるデータ。「どの Git リポジトリの、どのディレクトリの YAML を、どの namespace に入れるか」を書いた YAML(
kind: Application)。Argo CD を入れると、この種類のデータを書けるようになる。Argo CD の仕事の単位 - Git から入れた Deployment などは、自分で
kubectl applyしたときと同じ etcd のデータ。違いは「入れたのが自分の kubectl か、Argo CD か」だけ - Pod はこれまでどおり Node の上
用語メモ
| 用語 | 読み方 | 意味 |
|---|---|---|
| GitOps | ギットオプス | Git を正として、Git の中身をクラスタに反映し続ける進め方 |
| Continuous Delivery | コンティニュアスデリバリー | 継続的デリバリー。出来上がったものを本番の環境に届け続けること。Argo CD の CD |
| Application | アプリケーション | Argo CD に「どの Git の、どのディレクトリを、どの namespace に入れるか」を教えるデータ。Argo CD の仕事の単位 |
| Sync | シンク | Git の内容をクラスタに反映すること |
| Target state | ターゲットステート | Git にある、あるべき状態 |
| Live state | ライブステート | クラスタに今入っている状態 |
まとめ
- Argo CD は、クラスタの中で動くプログラム。Git にある YAML を読んで、クラスタに反映し続ける
- Argo CD を使うと、YAML の置き場所が Git になり、
kubectl applyを手動で実行しなくてよくなる。Git を正にする進め方を GitOps と呼ぶ - Argo CD を入れると、クラスタの
argocdnamespace に Argo CD の Pod が作られる。Application というデータで「どの Git の何を、どこに入れるか」を指定する
参考 URL
- [official] Argo CD - Declarative GitOps CD for Kubernetes
- [official] Core Concepts - Argo CD
- [official] Architectural Overview - Argo CD
- [official] Automated Sync Policy - Argo CD

