Ritolabo
  1. Home
  2. Kubernetes
  3. ArgoCD
  4. Argo CD: Git にある YAML を Kubernetes に反映し続ける

Argo CD: Git にある YAML を Kubernetes に反映し続ける

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

Kubernetes で何かを動かすには、Deployment や Service の YAML を書いて kubectl apply -f を打つ。Argo CD は、この kubectl apply を人の代わりにやり続けるプログラム。YAML は Git に置き、Argo CD が Git を読んでクラスタに反映する。

Argo CD を触る前に、何に困ったときのもので、何ができるのかを押さえておく。

contents

  1. 自分で kubectl apply する運用で困ること
  2. Argo CD は何をするか
    1. 使わないときとの違い
  3. Argo CD でできること
  4. どこで何が動くか
  5. 用語メモ
  6. 参考 URL

自分で 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 を探して applyGit で前のコミットに戻して 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 を入れると、クラスタの argocd namespace に Argo CD の Pod が作られる。Application というデータで「どの Git の何を、どこに入れるか」を指定する

参考 URL

Author

rito

rito

  • Backend Engineer
  • Tokyo, Japan
  • PHP 5 技術者認定上級試験 認定者
  • 統計検定 3 級