CI/CD・デプロイ

GitOps ぎっとおぷす

GitKubernetesInfrastructure as CodeCI/CDデプロイ自動化ArgoCD
GitOpsについて教えて

簡単に言うとこんな感じ!

GitOpsは「Gitをシステム設定の唯一の真実として使う運用スタイル」だよ!コードを書くのと同じようにインフラの設定もGitで管理して、「Gitに書いてある状態=本番環境の状態」になるよう自動で合わせてくれる仕組みなんだ!


GitOpsとは

GitOpsとは、アプリケーションのコードだけでなく、インフラやKubernetesなどのシステム構成をすべてGitリポジトリで管理し、そのリポジトリの状態を「唯一の正解(Single Source of Truth)」として扱う運用手法です。開発者がコードを変更するように、インフラの設定変更もPull Requestを通じて行い、承認・マージされると自動的に本番環境へ反映されます。

2017年にWeave社(現Weaveworks)が提唱した概念で、特にKubernetes(コンテナの運用管理基盤)との相性が良く、クラウドネイティブな環境で急速に普及しました。従来の「担当者がサーバーに手動でコマンドを打って変更する」運用と異なり、変更履歴がすべてGitに残るため、「いつ・誰が・何を変えたか」が一目でわかります。

ビジネスパーソン的にいうと、「設計書(Git)と実際の建物(本番環境)が常に一致している状態を自動で保ち続ける仕組み」です。設計書を変えれば建物も自動で変わり、誰かが勝手に建物を改造しても設計書の状態に戻される——これがGitOpsの本質です。


GitOpsの仕組みと構造

GitOpsにはPush型Pull型の2つのアーキテクチャがありますが、現在主流なのはPull型です。

方式仕組み代表ツール特徴
Push型CIパイプラインが変更を検知し、外部からデプロイを実行Jenkins, GitHub Actionsシンプルだがクレデンシャル(接続情報)の管理が煩雑
Pull型クラスター内のエージェントがGitを監視し、差分を自動適用ArgoCD, Fluxセキュアで宣言的。GitOpsの本命

Pull型GitOpsのフロー(4ステップ)

  1. 開発者がGitにPull Requestを送る(設定変更の提案)
  2. レビュー・承認を経てmainブランチにマージ
  3. クラスター内のGitOpsエージェント(ArgoCD等)がGitの変更を検知
  4. エージェントが本番環境をGitの状態に自動で同期(Reconcile)

覚え方:「Gitが正、環境が従」

Git is the law(Gitが法律)」と覚えると◎。法律(Git)が変われば社会(環境)が変わる。誰かが勝手に社会のルールを破れば(手動で環境を変えれば)、法律の状態に引き戻される。これがGitOpsの哲学です。

GitOpsの4原則(Weaveworks定義)

原則内容
宣言的(Declarative)システムの望ましい状態をコードで宣言する
バージョン管理(Versioned)すべての変更がGitに記録され、不変の履歴として残る
自動適用(Automated)承認された変更は自動的に環境へ適用される
継続的調整(Continuously Reconciled)エージェントが常にGitと環境の差分を監視・修正する

歴史と背景

  • 2017年: Weaveworks社がブログ記事「GitOps - Operations by Pull Request」を公開し、GitOpsという概念を提唱
  • 2018年: Weaveworks社がKubernetes向けGitOpsツール「Flux」をOSS公開。GitOpsの実装が現実的に
  • 2019年: Intuit社がArgo CD(後のArgoCD)をOSS公開。GitOpsの普及を加速
  • 2020年: KubernetesコミュニティでGitOpsが標準的な運用手法として認知される
  • 2021年: CNCF(Cloud Native Computing Foundation)がGitOpsの原則を定義したOpenGitOpsプロジェクトを発足。ArgoCD、Fluxともにプロジェクトとして採択される
  • 2022年以降: Flux v2がCNCFの卒業プロジェクトに昇格。エンタープライズ(大企業)での採用が本格化

GitOpsと従来のCI/CDの比較

従来のCI/CD(継続的インテグレーション・デリバリー)との違いを整理します。

従来CI/CD vs GitOps 従来のCI/CD(Push型) ① コードをGitにPush 開発者がトリガー ② CIパイプラインが実行 Jenkins/GitHub Actions ③ 外部から本番環境へPush クレデンシャル管理が必要 ④ 手動確認・ロールバック 問題時は人が対応 GitOps(Pull型) ① GitにPR→マージ レビュー・承認フロー ② Gitリポジトリに変更が記録 Single Source of Truth ③ エージェントがGitを監視 ArgoCD/Fluxがクラスター内で動作 ④ 差分を自動検知・自動同期 Reconcile(自動修復) VS GitOpsはエージェントが「内側から引っ張る(Pull)」ためセキュア

主要GitOpsツールの比較

ツール開発元特徴向いているケース
ArgoCDIntuit → CNCFUIが充実、視覚的に管理しやすいUIで状態を把握したいチーム
Flux v2Weaveworks → CNCF軽量・CLIベース、柔軟CLIに慣れた運用チーム
Rancher FleetSUSE複数クラスターの大規模管理マルチクラスター環境

関連する規格・RFC

規格・プロジェクト内容
OpenGitOps Principles v1.0CNCFが定義するGitOpsの4原則。ベンダー中立のGitOps標準定義
CNCF Argo ProjectArgoCDがCNCFの卒業プロジェクトとして管理される
CNCF Flux ProjectFluxがCNCFの卒業プロジェクトとして管理される

関連用語

  • Kubernetes — コンテナの運用管理基盤。GitOpsが最も活用される環境
  • CI/CD — 継続的インテグレーション・デリバリー。GitOpsはCI/CDの発展形
  • Infrastructure as Code — インフラをコードで管理する手法。GitOpsの前提思想
  • ArgoCD — KubernetesのPull型GitOpsを実現する代表的OSSツール
  • Git — バージョン管理システム。GitOpsの名前の由来でありコアの仕組み
  • Pull Request — コードレビューの仕組み。GitOpsでの変更承認フローに使う
  • コンテナ — GitOpsが管理するアプリケーションの実行単位
  • Single Source of Truth — 「唯一の正解」の概念。GitOpsの根幹思想