GitOpsソリューションの比較
現在色々なCDソリューションがGitOpsモデルを採用しています。この記事では、FluxCD、ArgoCD、PipeCDについて紹介し、比較してみます。これらのツールは全てオープンソースソフトウェアとして公開されています。
FluxCD
FluxCDはKubernetesアプリケーションのためのCDツールとして設計・開発されています。2020年にFluxCD v2が誕生し、新しいアーキテクチャになりました。FluxCD v1は2021年末の前に非推奨になりますので、もし今から使用を検討する場合はFluxCD v2をおすすめします。FluxCD v2はGitで定義されているKubernetesアプリケーションの状態とクラスタの状態を同期するためのエージェントの集合です。例えば、Helm Chartで定義されているアプリケーションのためにHelm Controllerというエージェントがあり、Kustomizationで定義されているアプリケーションのためにKustomize Controllerというエージェントがあります。これらのエージェント (Controller)はKubernetesのCRD(Custom Resource Definition)の上で動いていて、常にアプリケーションの差分を検知して、修正します。
FluxCDではカナリアリリース、ブルーグリーンデプロイメント、カナリア分析などの一歩進んだデプロイ手法を実現することもできます。それには、Flaggerという別のコンポーネントをインストールする必要があります。
FluxCDの設計はシンプルで良いのですが、GUIが無いことが残念なポイントだと考えています。
ArgoCD
Intuit社によって開発されている、KubernetesアプリケーションのためのCDツールです。FluxCDと同じく、KubernetesのCRDを用いて実装されていますが、ArgoCDはGUIを提供しています。ArgoCDでCanaryやBlueGreenなどを実現するためには、Argo-Rolloutsという別のコンポーネントをインストールする必要があります。しかし、FluxCDのFlaggerとは違って、Argo-RolloutsはKubernetesの標準のDeploymentを使うことが出来ず、独自のRollout CRDを使わなければなりません。これにより、既存のDeploymentを全て乗り換える必要があることと、Deploymentの標準コマンドが使えなくなることが気になるポイントだと考えています。
PipeCD
PipeCDは2020年の10月にOSSとしてリリースされました。これはKubernetesアプリケーションのためだけではなく、インフラストラクチャからアプリケーションまでの統一なGitOpsのプロセスを提供するために、Terraformのインフラ設定やCloud Run、LambdaのサーバレスアプリケーションやECSアプリケーションなどざまざまな種類をサポートしています。
元々PipeCDは複数プロジェクトを持つ大規模組織をターゲットとしているので、マルチテナンシー環境で運用しやすいように設計されています。PipeCDはControl PlaneとPipedエージェントという2つのコンポーネントから構成されています。Control Planeは中央データ管理やGUIなどを提供します。Pipedエージェントは各チームの環境内にインストールしてもらうシングルバイナリで、アプリケーションの状態の差分の検知やデプロイ作業を行います。また、Pipedエージェント単体でシークレット管理やカナリアリリース/ブルーグリーンデプロイメントなども行うことができ、追加のツールは不要です。
まとめ
以上、本記事ではソフトウェアデリバリーにおけるGitOpsモデルについて紹介しました。GitOpsモデルはKubernetesアプリケーションのためだけではなく、インフラストラクチャやサーバーレスアプリケーションなどの他のアプリケーションにも採用できると考えています。本記事でいくつかのソリューションも紹介しました。次回からは実践的な解説を行っていきます。