GitOps: Flux と Argo CD

GitOpsは、Gitをデプロイ設定の真実の源として使用するソフトウェア開発および運用の方法論です。アプリケーションやインフラの望ましい状態をGitリポジトリに保持し、Gitベースのワークフローを使用して変更を管理およびデプロイします。組織がKubernetesアプリケーションの管理のためのGitOpsを実装するのを支援する2つの人気のあるオープンソースツールはFluxとArgo CDです。この記事では、これらのツール、それぞれの利点と欠点、そして設定方法について詳しく見ていきます。DZoneの関連チュートリアルでJenkinsとKubernetesを使用したCI/CDパイプラインの自動化方法を読んでください。

FluxとArgo CDの一般的な使用ケース

Flux

  • 継続的デリバリー: Fluxは、変更がGitリポジトリにプッシュされた直後に自動的にデプロイされるように、デプロイパイプラインを自動化するために使用できます。
  • 設定管理: Fluxを使用すると、アプリケーションの設定をコードとして保存および管理できるため、バージョン管理と変更追跡が容易になります。
  • 不変インフラ: Fluxは、Gitリポジトリを通じてのみ変更が行われ、クラスターでの手動介入なしで不変インフラストラクチャーのアプローチを強制するのに役立ちます。
  • ブルー·グリーンデプロイメント: Fluxは、新しいバージョンのアプリケーションが既存のバージョンと並行してデプロイされ、トラフィックが徐々に新しいバージョンにシフトされるブルー·グリーンデプロイメントをサポートします。

Argo CD

  • 継続的デプロイメント: Argo CDは、アプリケーションが常にGitリポジトリからの最新の変更と同期していることを保証するために、デプロイプロセスを自動化するために使用できます。
  • アプリケーションのプロモーション: Argo CDは、アプリケーションが1つの環境から別の環境にプロモートできるアプリケーションプロモーションをサポートします。例えば、開発から本番へ。
  • マルチクラスタ管理: Argo CDは、複数のクラスター間でアプリケーションを管理するために使用でき、アプリケーションの望ましい状態がすべてのクラスターで一貫していることを保証します。
  • ロールバック管理: Argo CDは、失敗が発生した場合に変更を元に戻すのが簡単なロールバック機能を提供します。

これら二つのツールの選択は、組織やアプリケーションの具体的な要件に依存しますが、両方のツールがデプロイメントプロセスを簡素化し、手動エラーのリスクを低減するGitOpsアプローチを提供しています。どちらもそれぞれの利点と欠点があり、この記事ではそれらについて見ていき、どのように設定するかを説明します。

Fluxとは何か?

FluxはKubernetes上のアプリケーションの自動展開を行うGitOpsツールです。FluxはGitリポジトリの状態を継続的に監視し、クラスターに変更を適用することで機能します。FluxはGitHub、GitLab、Bitbucketなどの様々なGitプロバイダーと統合されています。リポジトリに変更が加えられると、Fluxはそれを自動的に検出し、クラスターを対応して更新します。関連チュートリアル:GitLabを使用したSpring BootアプリのCI/CDによる自動展開

Fluxの利点

  • 自動化された展開:Fluxは展開プロセスを自動化し、手動エラーを減らし、開発者が他のタスクに集中できるようにします。
  • Gitベースのワークフロー:FluxはGitを真実の源として活用し、変更を追跡および取り消すことを容易にします。
  • 宣言型の設定:FluxはKubernetesマニフェストを使用してクラスターの望ましい状態を定義し、変更の管理と追跡を容易にします。

Fluxの欠点

  • カスタマイズの制限: Fluxは限られたカスタマイズのみをサポートしており、すべてのユースケースに適しているとは限りません。
  • 学習曲線が急峻: Fluxは新規ユーザーにとって学習曲線が急峻であり、KubernetesとGitの深い理解が必要です。

Fluxのセットアップ方法

前提条件

  • A running Kubernetes cluster.
  • ローカルマシンにHelmがインストールされていること。
  • A Git repository for your application’s source code and Kubernetes manifests.
  • GitリポジトリのURLとSSHキー。

ステップ1: Flux Helmリポジトリの追加

最初のステップは、ローカルマシンにFlux Helmリポジトリを追加することです。以下のコマンドを実行してリポジトリを追加してください:

Shell

 

helm repo add fluxcd https://charts.fluxcd.io

ステップ2: Fluxのインストール

Flux Helmリポジトリが追加されたので、クラスターにFluxをインストールできます。以下のコマンドを実行してFluxをインストールしてください:

Shell

 

helm upgrade -i flux fluxcd/flux \
--set [email protected]:/.git \
--set git.path= \
--set git.pollInterval=1m \
--set git.ssh.secretName=flux-git-ssh

上記のコマンドで、プレースホルダーの値を自分のGitリポジトリ情報で置き換えてください。git.urlパラメータはGitリポジトリのURL、git.pathパラメータはKubernetesマニフェストが含まれるディレクトリへのパス、git.ssh.secretNameパラメータはリポジトリのSSHキーを含むSSHシークレットの名前です。

ステップ3: インストールの確認

上記のコマンドを実行した後、Flux ポッドの状態を確認することでインストールを検証できます。ポッドを表示するために次のコマンドを実行します:

Shell

 

kubectl get pods -n <flux-namespace>

ポッドが実行中の場合、Flux は正常にインストールされています。

ステップ 4: Flux を Git リポジトリに接続する

最後のステップは、Flux を Git リポジトリに接続することです。SSH キーを生成し、シークレットを作成するために次のコマンドを実行します:

Shell

 

ssh-keygen -t rsa -b 4096 -f id_rsa
kubectl create secret generic flux-git-ssh \
--from-file=id_rsa=./id_rsa --namespace=

上記のコマンドで、<flux-namespace>プレースホルダを Flux がインストールされている名前空間に置き換えてください。

次に、生成されたパブリック キーを Git リポジトリのデプロイメント キーとして追加します。

Helm を使用して Flux を正常に設定しました。Git リポジトリに変更が加えられるたびに、Flux がそれを検出し、クラスタを適切に更新します。

結論として、Helm を使用して Flux を設定するプロセスは非常に簡単です。Git を真のソースとして使用し、クラスタの状態を継続的に監視することで、Flux はデプロイメント プロセスを簡素化し、手動の誤りのリスクを軽減します。

Argo CD とは?

Argo CDは、Kubernetes上のアプリケーションの自動展開を実現するオープンソースのGitOpsツールです。開発者はアプリケーションを宣言的に管理し、アプリケーションの望ましい状態をライブ状態と同期させることができます。Argo CDはGitリポジトリと統合され、変更を継続的に監視します。変更が検出されるたびに、Argo CDはそれらをクラスタに適用し、アプリケーションが常に最新の状態に保たれるようにします。Argo CDを使用することで、組織は展開プロセスを自動化し、手動のエラーのリスクを軽減し、Gitのバージョン管理機能から恩恵を受けることができます。Argo CDは、グラフィカルユーザインターフェースとコマンドラインインターフェースを提供し、スケールでのアプリケーションの使用と管理を容易にします。

Argo CDの利点

  • 高度な展開機能: Argo CDは、ローリングアップデートやカナリアデプロイメントなどの高度な展開機能を提供し、複雑な展開を管理するのが容易になります。
  • ユーザーフレンドリーなインターフェース: Argo CDは、特に非技術ユーザーにとって展開を管理するのが容易な、ユーザーフレンドリーなインターフェースを提供します。
  • カスタマイズ可能: Argo CDは、特定のユースケースに合わせてツールをカスタマイズするのが容易です。

Argo CDの短所

  • 急峻な学習曲線: Argo CDは、新規ユーザーにとって学習曲線が急峻であり、KubernetesとGitの深い理解が必要です。
  • 複雑性: Argo CDはFluxよりも複雑なアーキテクチャを持つため、管理やトラブルシューティングがより困難になることがあります。

Argo CDの設定方法

Argo CDはHelm、Kubernetes用のパッケージマネージャーを使用してKubernetesクラスタにインストールできます。このセクションでは、Helmを使用してArgo CDを設定する手順を説明します。

前提条件

  • A running Kubernetes cluster.
  • ローカルマシンにHelmがインストールされている。
  • A Git repository for your application’s source code and Kubernetes manifests.

ステップ1: Argo CD Helmリポジトリの追加

最初のステップは、ローカルマシンにArgo CD Helmリポジトリを追加することです。リポジトリを追加するために以下のコマンドを実行してください:

Shell

 

helm repo add argo https://argoproj.github.io/argo-cd

ステップ2: Argo CDのインストール

Argo CD Helmリポジトリが追加されたので、クラスタにArgo CDをインストールできます。Argo CDをインストールするために以下のコマンドを実行してください:

Shell

 

helm upgrade -i argocd argo/argo-cd --set server.route.enabled=true

ステップ3: インストールの確認

上記のコマンドを実行した後、Argo CDのポッドのステータスを確認することでインストールを検証できます。ポッドを表示するために以下のコマンドを実行してください:

Shell

 

kubectl get pods -n argocd

ポッドが実行中の場合、Argo CDは正常にインストールされています。

ステップ4: Argo CDをGitリポジトリに接続

最後のステップは、Argo CDをGitリポジトリに接続することです。Argo CDはアプリケーションを作成し、Gitリポジトリに接続するために使用できるグラフィカルユーザーインターフェースを提供します。

Argo CDインターフェースにアクセスするために、URLを取得するために以下のコマンドを実行してください:

Shell

 

kubectl get routes -n argocd

WebブラウザでURLを使用してArgo CDインターフェースにアクセスしてください。

インターフェイスに入ると、GitリポジトリのURLとKubernetesマニフェストへのパスを提供することで新しいアプリケーションを作成できます。Argo CDはリポジトリの変更を継続的に監視し、クラスターに適用します。

これで、Helmを使用してArgo CDを正常に設定しました。

結論

KubernetesとDevOpsはソフトウェア開発ライフサイクルの重要な部分であり、GitOpsはKubernetes上のアプリケーションのデプロイと管理を自動化するための貴重なアプローチです。FluxとArgo CDは、デプロイメントプロセスの自動化、不変のインフラストラクチャの強制、一貫性と予測可能性の高いアプリケーションの管理を簡単かつ効率的に行うための2つの人気のあるGitOpsツールです。

Fluxはデプロイメントパイプラインの自動化とコードとしての設定管理に重点を置いていますが、Argo CDはより完全なGitOpsソリューションを提供し、マルチクラスタ管理、アプリケーションのプロモーション、ロールバック管理などの機能を含んでいます。これらのツールはそれぞれ独自の強みと弱みがあり、どちらを選択するかは、組織とアプリケーションの特定の要件に依存します。

選択したツールに関わらず、GitOpsはデプロイプロセスの簡素化と手動エラーのリスク低減に役立つ貴重なアプローチを提供します。アプリケーションの望ましい状態をGitリポジトリと同期させることで、GitOpsは変更が一貫性と予測可能性の高い方法で行われることを保証し、より信頼性が高く効率的なデプロイメントプロセスをもたらします。

Source:
https://dzone.com/articles/gitops-flux-vs-argo-cd