この記事は「イエソド アウトプット筋 トレーニング Advent Calendar 2020」5日目の記事です。
GitOpsってk8sと親和性も高くて採用するとこういうところが嬉しいよねって話です。
Reconciliation loop
k8sはマニフェストに定義されたあるべき状態を保つために、Reconciliation loopという考え方が用いられています。
ざっくり言えば以下の図のような形で観測と分析と実行を繰り返しています。
Observeは APIサーバに問い合わせて、適用されたマニフェストによって定義された"あるべき姿"を観測していて、Analyzeは現在の姿と先ほど取得したあるべき姿を比較します。そして、Actは差分があればその差を埋めるように命令を出して、クラスターをあるべき姿に保ちます。
GitOps
GitOpsとは、gitのレポジトリを唯一の信頼できる状態として管理をし、その状態の変更を検知することによってオペレーションを実施するCI/CDにおける考え方の一つです。
GitOpsを実現するソフトウェアとしては「ArgoCD」や「Flux」などが有名です。
GitOpsを用いたCI/CDでよく利用されるアーキテクチャは以下の通りです。
考え方としてはReconciliation loopと大きく似通っています。
Gitの状態を観測し、変更があればそれを検知し、Git(あるべき姿)とk8s(現在の姿)を比較して、差分があればその差を埋めるように命令を出してクラスターをあるべき姿に保ちます。
こうして見るとk8sとGitOpsの状態を保つための基本的な考えは同じであり親和性が高いと感じます。
GitOpsを採用すると嬉しいこと
gitを用いてクラスター状態の確認と更新を容易に行うことができる
gitは開発者が日々使い慣れているツールです。そのツールを利用してインフラのリソースを管理することによって開発者は比較的容易に、インフラの現在の状況を常に確認、更新をすることができます。
k8s上で参照権限ユーザを管理しなくてよくなる
従来ですと仮に開発者からクラスターの中の状態を参照したいと言われた場合、参照権限のみを持つサービスアカウントを作成してRBACの設定をして提供するか、ダッシュボードツールを提供する必要がありました。
GitOpsを利用することでレポジトリの参照権限だけを管理すれば良くなるためk8s上でのサービスアカウントの管理の手間が減ります。
PRを用いて承認フローを簡単に組み込める
例えばmasterブランチが本番環境と同期をしているとします。
プルリクエストを利用し、本番環境へのマージをレビューしてもらうようなフローを組むことで簡単に承認フローをデプロイプロセスの一環に組み込むことができます。
最後に
深夜に書いたので誤字・脱字など多いかもしれませんがご容赦ください。
来週も土曜日に何かしらのネタを書くのでよろしくお願いします。