2022年12月19日

GitOps

Argo CDとHelmチャートを一緒に使うには?

この記事では、Argo CDとHelmチャートを使用してGitOps を実装する方法について説明します。

argo_1.png

アプリケーション展開へのGitOpsアプローチは、使用が簡単で、開発者にとって多くのボトルネックが解消されるため、非常に人気があります。オープンソースプロジェクトのArgo CDHelmチャートを使ってKubernetesアプリケーションを管理すると、GitOpsが簡単になります。

Argo CDとHelmチャートを使ってGitOpsを実装する方法について説明します。このアプローチを使って、単純なアプリケーションとHelmチャートをデプロイする方法を示します。

Argo CD & Helm チャート

GitOpsは、アプリケーションがデプロイされるGitとターゲット環境(Kubernetesなど)の間でGitOpsエージェントを使う最新の継続的デリバリー(CD)モデルとして機能します。GitOpsは、Gitで発生したあらゆる変更も追跡します。

変更がある場合、GitOpsエージェントは変更をプルして、予想される構成と一致させます。エージェントは、実際の状態(actual)と望ましい状態(desired)を比較します。たとえば、開発者がyamlファイルのポッド番号を2から4に変えると、エージェントは2つの状態を比較し、変更が識別されると、変更をプルして2つの状態(actualと、desired)を同じにします。Argo CDとKubernetesは、よく考え抜かれたGitOpsアプローチという点で優れた組み合わせです。

Argo CDとHelmチャートを一緒に使うと、GitOpsに関して非常にうまく機能します。Helmを使ってArgo CDにアプリケーションを簡単にデプロイすることができます。どちらも、企業のソフトウェア配信を支援する強力なクラウドネイティブの組み合わせです。Kubernetesは事実上のコンテナーオーケストレーションツールになっており、全組織がそれを採用してアプリケーションのデプロイメントを高速化したいと考えています。しかし、Kubernetesだけでは違いを生むことはできません。GitOpsのようなクラウドネイティブなアプローチを採用して、正しい道を進んでいることを確認する必要があります。

Argo CDやHelmなどのツールを使えば、ソフトウェアを迅速に展開するメリットを享受できます。Argo CDは真のGitOpsツールですが、HelmはKubernetesアプリケーションのデプロイに使われます。ソフトウェア開発ライフサイクルで両方を使うと、驚異的なことができます。

Argo CDとは

Argo CDは、宣言型のGitOpsベースの継続的デリバリーツールであり、Gitからアプリケーションをデプロイし、アプリケーションのライフサイクルを管理し、環境の同期を維持するのに役立ちます。Argo CDを選択することで、デプロイメントを最新の状態に保ち、アプリケーションが常に望ましい状態に従うようにすることができます。Argo CDを使えば、アプリケーションとその環境をコードとして定義し、それらを任意のKubernetesクラスターにデプロイして更新できます。

Helm チャートとは?

Kubernetesは、現代のクラウドネイティブエンタープライズにとって事実上標準のコンテナーオーケストレーションツールになっていますが、一部の企業にとっては複雑なツールであるため、習熟の難度は高くなります。Kubernetesでアプリケーションを構成してデプロイするプロセスは、困難な作業になる場合があります。幸いなことに、HelmとHelmチャートを使えば、デプロイプロセスを自動化し、Kubernetesでアプリケーションをすばやくデプロイして管理できるようになりました。

Helmは、Kubernetesアプリケーションの管理に役立つオープンソースツールです。Helmチャートは、迅速かつ簡単にデプロイできる事前構成済みのKubernetesリソースのパッケージです。HelmとHelmチャートの助けを借りれば、開発者はKubernetesのデプロイプロセスを合理化し、アプリケーションを迅速に稼働させることができます。

Argo CD vs Helm

Argo CDとHelmはどちらも、クラウドネイティブアプリケーションを管理しデプロイするための一般的なオープンソースツールですが、いくつかの大きな違いがあります。Argo CDとHelmの3つの主な違いを見てみましょう。

1. アプリケーションのデプロイメント

Argo CDとHelmの最初の違いは、アプリケーションのデプロイ方法です。Argo CDは、アプリケーションを複数の環境に展開するために使えるCDツール/プラットフォームです。Helmは、アプリケーションを単一の環境にデプロイするために使えるパッケージマネージャーです。つまりArgo CDはより複雑な展開に適しており、Helmは単純な展開に適しています。

2. アプリケーション管理

2つ目の違いは、アプリケーションの管理方法です。Argo CDはGitOpsベースのツールです。つまり、Gitを信頼できる唯一の情報源として使い、アプリケーションの構成とマニフェストを保存・追跡するためのフォーカルポイントとして使えます。これによりオブザーバビリティーがたやすく実現できるようになり、必要に応じて以前のバージョンにロールバックできます。Helmは、Helmチャートをアプリケーションの管理とデプロイのフォーカルポイントと見なしており、変更は手動で追跡する必要があります。

3. アプリケーションのスケーリング

3つ目の違いは、アプリケーションのスケーリング方法です。Argo CDは水平方向にスケーリングするように設計されており、複数のクラスターに簡単にデプロイできます。Helmでは、単一のクラスターにのみデプロイできます。Argo CDは大規模な展開に適しており、Helmは小規模な展開に適しています。

Helm チャートで Argo CD を使うには

Argo CDとHelmを見てきたので、次にHelmチャートでArgo CDを使う方法を見てみましょう。

  1. 最初のステップは、Kubernetesクラスターを稼働させることです。
  2. Argo CD関連の全デプロイメントを格納する名前空間を作成します。
  3. ローカルマシンにArgo CDインスタンスとやり取りするためのArgo CD CLIをインストールして、アプリケーションを管理します。
  4. Argo CDとマニフェストをKubernetesクラスターにデプロイし、任意の方法でArgo CD UIにアクセスします(チュートリアルではポートフォワード方式を使います)。
  5. UIからユーザー名とパスワードを使ってArgo CDにログインします(以下のチュートリアルで説明します)。
  6. 次のステップは、ローカルマシンにHelmのコマンドラインインターフェイス(CLI)をインストールすることです。これにより、Helmチャートを操作できるようになります。
  7. Helm CLIをインストールしたら、Argo CDインスタンスに接続して、Helmチャートを使う設定ができるようになります。
  8. 最後に、Argo CDを使い、Helmチャートを使ってアプリケーションをデプロイできます。結果としてアプリケーションを迅速かつ簡単に管理・展開できるようになります。

チュートリアル

このチュートリアルの唯一の前提条件は、Kubernetesクラスターにアクセスできることです。MinikubeまたはKindを使い1ノードのクラスターを取得してもよいです。
まず、名前空間を作成します。

kubectl create namespace argocd


作成した名前空間にマニフェストファイルを適用します。

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

argo_2.png

全ポッドが名前空間内で適切に実行されていることを確認します。

kubectl get pods -n argocd

argo_3.png

それでは、ポートフォワーディングを通じてArgo CDサーバーのUIを公開しましょう。

kubectl port-forward svc/argocd-server -n argocd 8080:443

 

https://localhost:8080/で ArgoCD の UI を確認できるようになります。

argo_4.png

ここで、ログインするにはユーザー名とパスワードが必要です。 デフォルトでは、ユーザー名は「admin」で、パスワードは次のコマンドを使って生成できます。


kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

パスワードとして使う出力が得られます。 ユーザー名(admin)とパスワードを取得したら、Argo CDにログインします。

argo_5.png

また、ローカルでCLI経由でArgo CDを使えることを確認してください。そのためにArgo CD CLIをインストールします。

brew install argocd

これで、CLI 経由でログインして Argo CD に話しかけることができます。

argocd login localhost:8080

ユーザー名とパスワードを求められます。 両方を設定すると、ログインが成功します。

Helmを介して Argo CDにアプリケーションをデプロイする

Argo CD Exampleリポジトリーを参照して、 Helm経由でゲストブック アプリケーションをデプロイします。

ArgoCD でアプリケーションを作成してみましょう。

argocd app create helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-server https://kubernetes.default.svc --dest-namespace default

アプリケーションが作成されたことを確認する必要があります。

application 'helm-guestbook' created

作成されたアプリケーションのステータスを確認しましょう。

argocd app get helm-guestbook‍

argo_6.png


Service と Deployment の両方がOutOfSyncステータスになっていることが分かります。次のコマンドでアプリケーションを同期しましょう。

argocd app sync helm-guestbook

argo_7.png

Serviceの正常性ステータスがHealthy(正常)であり、DeploymentがProgressing(進行中)であることが分かります。 Deploymentにはしばらく時間がかかり、Healthyになります。
UIに移動すると、Argo CDで作られたアプリケーションを確認できます。

argo_8.png

HealthySynced(同期済み)であることが分かります

ポートフォワードすることで、デプロイされたアプリケーションに簡単にアクセスできます。

kubectl port-forward svc/helm-guestbook 9090:80

argo_9.png

http://localhost:9090/でアプリケーションにアクセスしましょう。

argo_10.png

Argo CDを使ったHelmチャートのデプロイ

Argo CDを使ってHelmチャートをデプロイしましょう。
Argo CD UIの設定に移動し、リポジトリーを追加します。

argo_11.png

以下の詳細を追加して接続します。

argo_12.png

追加したリポジトリーがリスト表示されます。

argo_13.png

次に、新しいアプリケーションの作成をクリックします。 Argo CDにNGINX Helm チャートをデプロイします。

必要な詳細を必ず指定してください。

argo_14.png

 

argo_15.png

「Create」をクリックすると、Argo CDダッシュボードにアプリケーションが表示されます。

最初はアプリケーションが同期していません。 アプリケーションを同期すると、アプリケーションが更新され、healthy(正常)であると表示されます。

argo_16.png

Sync」をクリックしてから「Synchronize」をクリックします。

argo_17.png

戻って確認すると、アプリケーションはHealthyでSyncedの状態を示しているはずです。

argo_18.png

Harnessを使ったGitOps

Harnessは、ソースリポジトリー内のKubernetesマニフェストをターゲットクラスターと同期することでサービスをデプロイできる、ネイティブのGitOps機能を提供します。 まず、環境にGitOpsエージェントをインストールしてHarness GitOpsをセットアップします。 次に、HarnessのGitOps Applicationでdesired(望ましい)状態とtarget状態を管理する方法を定義します。 GitOpsエージェントは、Applicationで定義された同期操作を実行し、ソースおよびターゲット状態のイベントに反応します。

argo_19.png

Kubernetesクラスターの1つを使って、このHarness GitOpsを試してください。

まず、無料のHarnessアカウントにサインアップし、GitOpsタブに移動する必要があります。

サイド メニューから「Deployments」>「GitOps」に移動します。

argo_20.png

HarnessがArgo CDをインストールし、その Argo CDインスタンスをHarnessに接続します。 必要なのはKubernetesクラスターだけです。 ここで、Harnessの一部としてGitOps を実行するために必要なものをセットアップする必要があります。

GitOps > Settings > GitOps Agentsに移動します。

以下に示す必要な全GiitOps 設定を1つずつ接続します。

argo_21.png

全てが接続されて検証されたら、Harness GitOpsを介してアプリケーションのデプロイを開始できます。 有名なゲストブックの例では、デプロイが完了すると、以下に示すようにHarness GitOpsダッシュボードが表示されます。

argo_22.png

この単純なHarness GitOps チュートリアルに従って、Harness GitOpsを介してアプリケーションをデプロイすることがいかに直感的で簡単かを確認できます。

GitOpsをやってみよう

GitOpsは、明るい未来が待っている最新のソフトウェアデリバリーのアプローチです。 Kubernetes関連のデプロイメントで作業している場合、 GitOps には多くのメリットがあります。 GitOpsは、豊富な開発者エクスペリエンスに重点を置いて、ソフトウェアのデプロイを加速します。 DevOpsのベストプラクティスと組み合わせることで、GitOpsはソフトウェアデリバリーに翼を与えます。

GitOps継続的デリバリー ツールをお探しですか? Harness CDとGitOps-as-a-Serviceのデモを今すぐリクエストしてください!


この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。

Harnessに関するお問い合わせはお気軽にお寄せください。

お問い合わせ