GitOpsとは?
GitOpsとは、インフラとdeploymentの望ましい状態がGitに存在し、自動化が現実をそれに継続的に一致させるアプローチです。
GitOpsは、あなたがすでにコードに使っているワークフロー、すなわちpull request、レビュー、バージョン履歴を、運用に適用します。システムの状態はGitリポジトリで宣言され、ツールがそのリポジトリを監視し、稼働中の環境を一致するように調整します。
中心となる考え方
GitOpsでは、Gitリポジトリが何が動作すべきかの宣言的な記述を保持します。どのバージョンか、レプリカ数はいくつか、どの設定かなどです。自動化されたエージェントがその望ましい状態を環境の実際の状態と比較し、一致するまで変更を適用します。Gitが唯一の信頼できる情報源になります。
仕組み
- 望ましい状態をGitにcommitしたファイルで宣言します。
- 調整エージェントがリポジトリを監視します。
- リポジトリが変わると、エージェントが稼働中の環境を更新します。
- 環境がドリフトすると、エージェントがそれを元に戻します。
実例
サービスの新しいバージョンをdeployするには、エンジニアが設定ファイル内のイメージタグを変更するpull requestを開きます。レビューとマージの後、GitOpsエージェントがその変更に気づき、新しいバージョンを自動的にロールアウトします。ロールバックするには、commitをリバートします。同じワークフローを逆にたどるだけです。
なぜ魅力的なのか
インフラへのすべての変更が、アプリケーションのコードと同じ、レビューされ監査可能なpull requestの処理を通ります。Gitの履歴が、誰が何をいつ変更したかの完全な記録になります。リポジトリが信頼できる情報源であるため、環境の復旧や再作成は、それを再適用するだけの問題になります。
Infrastructure as Codeとの関係
GitOpsはInfrastructure as Codeの上に構築されます。環境がファイルで宣言的に記述されていることを前提とします。加わるのは、継続的な調整ループと、人がコマンドを実行するのではなくGitが変更を駆動するという主張です。その結果、バージョン管理され、自動化され、自己修復する運用が実現します。
重要なポイント
- GitOpsはGitをインフラとdeployの信頼できる唯一の情報源にします。
- エージェントが現実を宣言された状態に継続的に調整します。
- 変更とロールバックは通常のpull requestを通じて行われます。