7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

k8sとGitOps

Posted at

この記事は「イエソド アウトプット筋 トレーニング Advent Calendar 2020」5日目の記事です。
GitOpsってk8sと親和性も高くて採用するとこういうところが嬉しいよねって話です。

Reconciliation loop

k8sはマニフェストに定義されたあるべき状態を保つために、Reconciliation loopという考え方が用いられています。
ざっくり言えば以下の図のような形で観測と分析と実行を繰り返しています。

Observeは APIサーバに問い合わせて、適用されたマニフェストによって定義された"あるべき姿"を観測していて、Analyzeは現在の姿と先ほど取得したあるべき姿を比較します。そして、Actは差分があればその差を埋めるように命令を出して、クラスターをあるべき姿に保ちます。

スクリーンショット 2020-12-05 1.33.22.png

GitOps

GitOpsとは、gitのレポジトリを唯一の信頼できる状態として管理をし、その状態の変更を検知することによってオペレーションを実施するCI/CDにおける考え方の一つです。
GitOpsを実現するソフトウェアとしては「ArgoCD」や「Flux」などが有名です。
GitOpsを用いたCI/CDでよく利用されるアーキテクチャは以下の通りです。

image.png

考え方としてはReconciliation loopと大きく似通っています。
Gitの状態を観測し、変更があればそれを検知し、Git(あるべき姿)とk8s(現在の姿)を比較して、差分があればその差を埋めるように命令を出してクラスターをあるべき姿に保ちます。

こうして見るとk8sとGitOpsの状態を保つための基本的な考えは同じであり親和性が高いと感じます。

GitOpsを採用すると嬉しいこと

gitを用いてクラスター状態の確認と更新を容易に行うことができる

gitは開発者が日々使い慣れているツールです。そのツールを利用してインフラのリソースを管理することによって開発者は比較的容易に、インフラの現在の状況を常に確認、更新をすることができます。

k8s上で参照権限ユーザを管理しなくてよくなる

従来ですと仮に開発者からクラスターの中の状態を参照したいと言われた場合、参照権限のみを持つサービスアカウントを作成してRBACの設定をして提供するか、ダッシュボードツールを提供する必要がありました。
GitOpsを利用することでレポジトリの参照権限だけを管理すれば良くなるためk8s上でのサービスアカウントの管理の手間が減ります。

PRを用いて承認フローを簡単に組み込める

例えばmasterブランチが本番環境と同期をしているとします。
プルリクエストを利用し、本番環境へのマージをレビューしてもらうようなフローを組むことで簡単に承認フローをデプロイプロセスの一環に組み込むことができます。

最後に

深夜に書いたので誤字・脱字など多いかもしれませんがご容赦ください。
来週も土曜日に何かしらのネタを書くのでよろしくお願いします。

7
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?