「GitOpsってGitを使った運用のこと?」「IaCとは何が違うの?」
近年、Kubernetesの普及とともにGitOpsという言葉を耳にする機会が増えました。従来のインフラ管理とは何が違うのでしょうか?
この記事では、GitOpsとは何か、どんなメリットがあるのかを初心者向けに解説します。
GitOpsとは?
「Gitを中心にしたインフラ運用」
GitOpsは、Gitリポジトリを「信頼できる唯一の情報源(Single Source of Truth)」として、インフラの状態を管理する運用手法です。
Weaveworks社が2017年に提唱した概念で、特にKubernetes環境での運用で広く採用されています。
GitOpsの基本的な考え方
- すべての設定をGitで管理:インフラの「あるべき姿」をGitに保存
- Gitへの変更=インフラへの変更:手動でサーバーを触らない
- 自動同期:Gitの内容と実際のインフラを自動的に一致させる
- 差分があれば自動修復:実際の状態がGitと異なれば、自動で修正
従来の運用との違い
従来の運用(Push型):
開発者/運用者 → CI/CDツール → 本番環境にデプロイ
「外からPushして変更を適用する」アプローチ。
GitOps(Pull型):
Gitリポジトリ ← GitOpsツールが監視 → 差分があれば自動で反映
「GitOpsツールが定期的にGitを見に行き、差分があれば自動で反映する」アプローチ。
GitOpsとIaCの関係
GitOpsとIaC(Infrastructure as Code)は、よく比較されます。
IaCとは
IaCは、インフラの構成をコードで記述する手法。TerraformやAnsibleなどが代表例です。
GitOpsはIaCの発展形
GitOpsは、IaCをさらに進めて:
- コードをGitで管理する(バージョン管理)
- Gitへの変更をトリガーにデプロイする(自動化)
- 実際の状態とGitの状態を常に同期させる(継続的な調整)
| 項目 | IaC | GitOps |
|---|---|---|
| コード管理 | コードで記述 | コードをGitで管理 |
| デプロイ方法 | 手動 or CI/CDからPush | GitOpsツールがPull |
| 状態の同期 | 実行時のみ | 継続的に監視・同期 |
| ドリフト検知 | 手動で確認 | 自動で検知・修復 |
GitOpsのメリット
1. 変更履歴が完全に残る
すべての変更がGitのコミット履歴として残ります。「誰が」「いつ」「何を」変更したかが明確です。
2. ロールバックが簡単
問題が発生したら、Gitを前のバージョンに戻すだけで、インフラも元に戻ります。
git revert HEAD
git push
3. レビュープロセスの導入
変更はプルリクエスト(マージリクエスト)を通じて行うため、レビューを必須にできます。
4. 環境の再現性
Gitの内容がインフラの「あるべき姿」なので、同じ環境を何度でも再現できます。
5. セキュリティの向上
本番環境に直接アクセスする必要がないため、認証情報の管理がシンプルになります。
6. ドリフト(設定のずれ)の検知・修復
誰かが手動で設定を変更しても、GitOpsツールが自動で元の状態に戻します。
GitOpsを実現するツール
GitOpsを実現するための代表的なツールを紹介します。
Argo CD
Kubernetes向けのGitOpsツールで、最も広く使われています。
- Webダッシュボードで状態を可視化
- Gitリポジトリの変更を自動検知
- 差分の表示とSync(同期)
- ロールバック機能
Flux
Weaveworks社が開発したGitOpsツール。Argo CDと並んで人気があります。
- 軽量でシンプル
- Helm、Kustomizeとの連携
- イメージの自動更新機能
Jenkins X
KubernetesネイティブのCI/CDプラットフォーム。GitOpsの考え方を取り入れています。
| ツール | 特徴 |
|---|---|
| Argo CD | 豊富なUI、広いエコシステム |
| Flux | 軽量、シンプル |
| Jenkins X | CI/CDと統合 |
GitOpsの実践フロー
GitOpsを使った実際の運用フローを見てみましょう。
アプリケーションの更新
- 開発者がアプリケーションのコードを変更
- CIパイプラインでテスト・ビルド・イメージ作成
- マニフェストリポジトリのイメージタグを更新(プルリクエスト)
- レビュー・承認後にマージ
- Argo CD/FluxがGitの変更を検知
- 自動的にKubernetesクラスターに反映
インフラの変更
- 運用者がマニフェストを変更(プルリクエスト)
- レビュー・承認後にマージ
- GitOpsツールが自動で反映
障害時のロールバック
- 問題を検知
- Gitを前のバージョンにrevert
- GitOpsツールが自動で前の状態に戻す
GitOpsを始めるためのステップ
Step1:前提知識を身につける
- Gitの基本操作
- Kubernetesの基礎
- YAMLでのマニフェスト記述
Step2:ローカル環境で試す
- MinikubeやKindでKubernetesクラスターを作成
- Argo CDをインストール
- サンプルアプリをGitOpsでデプロイ
Step3:実践的なパターンを学ぶ
- アプリケーションリポジトリとマニフェストリポジトリの分離
- 環境ごとのブランチ戦略
- シークレット管理(Sealed Secrets、External Secretsなど)
GitOpsの注意点
シークレット管理
パスワードやAPIキーなどの機密情報は、そのままGitに保存できません。暗号化したり、外部のシークレット管理サービスと連携する必要があります。
学習コスト
Git、Kubernetes、GitOpsツールの知識が必要です。チーム全体のスキルアップが必要になります。
すべてに適しているわけではない
GitOpsはKubernetes環境で特に効果的ですが、すべての環境に最適とは限りません。従来のVM環境などでは、別のアプローチが適している場合もあります。
まとめ
この記事のポイントを整理します。
| 項目 | 内容 |
|---|---|
| GitOpsとは | Gitを唯一の情報源としてインフラを管理する手法 |
| 特徴 | Pull型、継続的な同期、ドリフト検知 |
| メリット | 履歴管理、簡単なロールバック、レビュープロセス |
| 代表的なツール | Argo CD、Flux |
| 前提知識 | Git、Kubernetes、YAML |
GitOpsは、Kubernetes時代のインフラ運用のベストプラクティスとして広く採用されています。IaCの次のステップとして、ぜひ理解しておきたい概念です。
まずはArgo CDなどを使って、小さな環境から試してみましょう!