GitOps とは?インフラの信頼できる情報源としての Git
GitOps は、Git リポジトリを望ましいインフラの唯一の信頼できる情報源とし、自動化されたエージェントがそれに一致するよう、稼働中のシステムを継続的にリコンサイルします。
GitOps は、あなたがすでにコードに使っているバージョン管理の規律を、インフラとデプロイに適用します。望ましい状態は Git 内の宣言的な manifest として存在し、クラスタ内のエージェントがそのリポジトリを監視して現実を一致させます。変更は pull request を通じて起こり、クラスタは Git が言うことに向かって自己修復します。
中核となる原則
- 宣言的 - システム全体がデータとして記述される。
- Git でバージョン管理 - Git が唯一の信頼できる情報源。
- push ではなく pull - エージェントがリポジトリからリコンサイルする。
- 継続的にリコンサイル - drift が検知され、修正される。
pull ベースのリコンサイル
pipeline がクラスタに変更を push する代わりに、クラスタ内の controller が望ましい状態を Git から pull して apply します。誰かが手動でクラスタを変更すると、controller はそれを Git が宣言する状態に戻します。
チームが好む理由
あらゆる変更はレビュー可能で監査可能な commit であり、rollback は git revert、そしてクラスタが黙って drift することはありません。また CI(build とテスト)と CD(リコンサイル)を分離し、責務がきれいになります。
CI と GitOps を組み合わせる
CI はイメージを build・テストし、manifest リポジトリを新しいイメージ tag または digest で更新します。GitOps エージェントが commit に気づき、変更をロールアウトします - CI が提案し、GitOps が処理します。
一般的なツール
Argo CD と Flux が主要な GitOps controller です。どちらもリポジトリを監視し、manifest(しばしば Helm chart や Kustomize)を apply し、sync 状態と drift を報告します。
重要なポイント
- GitOps は Git を信頼できる情報源とし、クラスタ内のエージェントがリコンサイルします。
- pull ベースで自己修復します - 手動の drift は元に戻されます。
- CI が manifest リポジトリを更新し、GitOps エージェントが変更をロールアウトします。