[CON306-R1] Accelerate software development lifecycles with GitOps
投稿日: 2022/12/09

GitOpsで複数のクラスタを管理する方法を紹介(flux + crossplane)したセッションに参加しました。

まず、DevOpsとGitOpsの違いについて説明を聞くことができました。
イメージをビルドして ECR に push するまでは同じですが、一般に DevOps CI/CD は開発者がソースコードを push すると pipeline 動作、インフラストラクチャに配布することになります。
一方、GitOpsはGit / ECRをポーリングして変更を確認し、不一致を検出すると変更をインフラストラクチャに反映するプル方式です。

組織が大規模なEKSクラスターを管理するためのスケーラブルなクラスターの管理ソリューションの必要性が高まっており、管理するマニフェストが増えるにつれて、シークレット管理の重要性が高まりました。
Strategyは大きく2つあり、Externalize secretsとStore secret in Git encrypted(Sealed Secretが代表的)です。

さらに、FluxとCrossplaneを組み合わせることで、複数のクラスタの作成と管理が可能です。
Flux は Cluster が Git と同期を維持し、新しいコードが追加されると自動的に更新するツールであり、Crossplane は k8s controller で、クーバーネティス api を拡張してアプリケーションに必要なインフラストラクチャをクーバーネティスから直接管理できるようにするしてくれる役割をします。
ここでReconcileとは、Gitの最新の状態をクラスタに適用するアクション自体のことです。

このイメージは、GitOpsを介してマルチクラスタを管理するフローを示す図である。
インフラストラクチャが拡大するにつれてクラスタが増えれば、それを管理するのが難しくなると考えられます。
これをgitopsコントローラ(flux)とインフラコントローラ(crossplane)とを組み合わせる方法で複数のワークロードクラスタを作成し、管理するのが簡単で、クラスタのバージョンアップも簡単にできることが長所だと感じたセッションでした。