Kubernetes ClusterをFluxでGitOpsする -Kubecon NA 2021 セッションレポート

f:id:fuku1656:20211201201519p:plain

先日開催されたKubecon NA 2021にオンライン参加しました!

数々の興味深いセッションがありましたが、その中でも特に興味のあるKubernetes運用についてのセッション「GitOps+Jenkins-CI With Declarative Everything」を視聴しました。

何故GitOpsがKubernetes運用のベストプラクティスなのか、どのように導入すればよいのかをデモを交えて丁寧に説明されたセッションでした。

本稿ではKubernetes Clusterを運用するベストプラクティスであるGitOpsの特徴とFluxでの実現方法を整理したいと思います。

セッション概要

FluxはGitOpsの先駆けとなったCNCFのインキュベーションツールであり、Jenkinsは大企業のOGビルドマシンとして知られています。FluxのHelm Controllerを使ってJenkinsを宣言的にデプロイする方法、Jenkinsでアプリのリポジトリを構築してFluxでデプロイする方法、FluxのFlaggerを使ってHelm TestでHelmのチャートをテストする方法、FluxのImage Automation ControllerとHelm Controllerを使って新しいリリースを自動的にデプロイする方法などを紹介します。

Speaker:KINGDON BARRETT


www.youtube.com

github.com

[Gitops]とは

Weaveworks社が提唱したKubernetesオペレーションのベストプラクティス

  • システムのあるべき状態を宣言的(Declarative)に表現する
    • Kubernetesだけでなく、宣言的なIaCツールにも応用可能な運用概念
      • Terraform,CloudFormationなど
  • あるべき状態はすべてGitリポジトリに保管され、バージョン管理され、イミュータビリティが保たれる
    • Single Source of Truth
    • システムの見通しが良くなり、監査や変更の追跡が容易になる
  • Gitに保管されたソースの変更はエージェントにより自動でPullされ、常に最新のあるべき状態を認識する
    • 人はgit pushした後のデプロイ工程を行わない
  • エージェントは継続的にシステムへあるべき状態を適用する
    • 人がkubectl applyを行わないためオペミスが発生しない

f:id:fuku1656:20211201201632p:plain

Weaverorksより引用

[Flux]とは

  • Kubernetes Cluster上のインフラとアプリケーション両方のGitOpsを提供するWeaverorks社製ツール

  • リポジトリの変更を自動で検知し、そのあとのデプロイはすべてFluxが行う

    • 同梱のFlaggerを使えば複雑なデプロイフローにも対応できる
      • Progressive Delivery
      • カナリアリリース、B/Gデプロイ、A/Bテストやエラー時の切り戻しの組み合わせ
    • デプロイ時にSlackへ通知
  • CNCFプロジェクトであり、現在のステージはIncubating

  • Fluxの比較対象としてはArgo CD,Jenkins Xなどがある

    Deployment Pipeline

    Fluxより引用

所感

本セッションではGitOpsの原理からKubernetes上での具体的な実現方法、導入における注意点を分かりやすく解説していました。

デプロイ頻度は上がるほどCI/CDで行われる変更を管理するのは複雑になります。こういった課題が顕在化する前に GitOps の導入を進めていきたいですね。

クラウドベンダの垣根を超えるKubernetes+GitOpsは数年後のデファクトスタンダードになると思います。

次のKubeconは12/9,10です。 中国開催なので時差的にありがたいですね!

KubeCon + CloudNativeCon + Open Source Summit China

参考

opengitops.dev

fluxcd.io

flagger.app

執筆: 福江 正伍, フェロー