Kubernetes 応用コース 解説

Argo CDのGitOps — Gitを正として差分を戻す

GitOpsではGitのマニフェストを望む状態とし、Argo CDがクラスタの実際の状態を継続して比較します。反映は「人がkubectlを打ったか」ではなく、Gitの履歴で追えるようになります。

TL;DR

  1. Gitの宣言が望む状態、クラスタは実際の状態。
  2. Argo CDは差分を検知し、同期して整合させる。
  3. 緊急の手動変更も、最終的にはGitへ戻さないとドリフトになる。

01Gitが望む状態の記録になる

開発者のcommit→Gitリポジトリ→Argo CD→クラスタの一本道

開発者のcommit→Gitリポジトリ→Argo CD→クラスタの一本道
Gitが望む状態の記録になるを図解

マニフェストをGitで管理すれば、誰が何を変えたかをレビューと履歴で追えます。クラスタを直接の正本にせず、変更経路をGitに揃えることがGitOpsの出発点です。

押さえること:Gitの宣言が望む状態、クラスタは実際の状態。

02差分検知と同期は別の仕事

Desired/Liveの比較からSyncへ進む状態図

Desired/Liveの比較からSyncへ進む状態図
差分検知と同期は別の仕事を図解

Argo CDはGitで生成されるリソースとクラスタを比較してOutOfSyncを検知します。同期はGit側にクラスタを合わせる操作で、設定により自動同期にも手動同期にもできます。

押さえること:Argo CDは差分を検知し、同期して整合させる。

03手動変更はドリフトとして扱う

手動変更で差分発生→同期で復元、またはGitへ変更を戻す分岐

手動変更で差分発生→同期で復元、またはGitへ変更を戻す分岐
手動変更はドリフトとして扱うを図解

クラスタで直接削除や変更をすると、Gitにない状態差が生まれます。自動同期が有効なら復旧されることがありますが、意図した変更なら必ずGitに反映して次の同期で再現できるようにします。

押さえること:緊急の手動変更も、最終的にはGitへ戻さないとドリフトになる。

結論

  1. Gitの宣言が望む状態、クラスタは実際の状態。
  2. Argo CDは差分を検知し、同期して整合させる。
  3. 緊急の手動変更も、最終的にはGitへ戻さないとドリフトになる。