2022年12月19日
GitOps
この記事では、Argo CDとHelmチャートを使用してGitOps を実装する方法について説明します。
アプリケーション展開へのGitOpsアプローチは、使用が簡単で、開発者にとって多くのボトルネックが解消されるため、非常に人気があります。オープンソースプロジェクトのArgo CDとHelmチャートを使ってKubernetesアプリケーションを管理すると、GitOpsが簡単になります。
Argo CDとHelmチャートを使ってGitOpsを実装する方法について説明します。このアプローチを使って、単純なアプリケーションと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は、宣言型のGitOpsベースの継続的デリバリーツールであり、Gitからアプリケーションをデプロイし、アプリケーションのライフサイクルを管理し、環境の同期を維持するのに役立ちます。Argo CDを選択することで、デプロイメントを最新の状態に保ち、アプリケーションが常に望ましい状態に従うようにすることができます。Argo CDを使えば、アプリケーションとその環境をコードとして定義し、それらを任意のKubernetesクラスターにデプロイして更新できます。
Kubernetesは、現代のクラウドネイティブエンタープライズにとって事実上標準のコンテナーオーケストレーションツールになっていますが、一部の企業にとっては複雑なツールであるため、習熟の難度は高くなります。Kubernetesでアプリケーションを構成してデプロイするプロセスは、困難な作業になる場合があります。幸いなことに、HelmとHelmチャートを使えば、デプロイプロセスを自動化し、Kubernetesでアプリケーションをすばやくデプロイして管理できるようになりました。
Helmは、Kubernetesアプリケーションの管理に役立つオープンソースツールです。Helmチャートは、迅速かつ簡単にデプロイできる事前構成済みのKubernetesリソースのパッケージです。HelmとHelmチャートの助けを借りれば、開発者はKubernetesのデプロイプロセスを合理化し、アプリケーションを迅速に稼働させることができます。
Argo CDとHelmはどちらも、クラウドネイティブアプリケーションを管理しデプロイするための一般的なオープンソースツールですが、いくつかの大きな違いがあります。Argo CDとHelmの3つの主な違いを見てみましょう。
Argo CDとHelmの最初の違いは、アプリケーションのデプロイ方法です。Argo CDは、アプリケーションを複数の環境に展開するために使えるCDツール/プラットフォームです。Helmは、アプリケーションを単一の環境にデプロイするために使えるパッケージマネージャーです。つまりArgo CDはより複雑な展開に適しており、Helmは単純な展開に適しています。
2つ目の違いは、アプリケーションの管理方法です。Argo CDはGitOpsベースのツールです。つまり、Gitを信頼できる唯一の情報源として使い、アプリケーションの構成とマニフェストを保存・追跡するためのフォーカルポイントとして使えます。これによりオブザーバビリティーがたやすく実現できるようになり、必要に応じて以前のバージョンにロールバックできます。Helmは、Helmチャートをアプリケーションの管理とデプロイのフォーカルポイントと見なしており、変更は手動で追跡する必要があります。
3つ目の違いは、アプリケーションのスケーリング方法です。Argo CDは水平方向にスケーリングするように設計されており、複数のクラス ターに簡単にデプロイできます。Helmでは、単一のクラスターにのみデプロイできます。Argo CDは大規模な展開に適しており、Helmは小規模な展開に適しています。
Argo CDとHelmを見てきたので、次にHelmチャートでArgo CDを使う方法を見てみましょう。
このチュートリアルの唯一の前提条件は、Kubernetesクラスターにアクセスできることです。MinikubeまたはKindを使い1ノードのクラスターを取得してもよいです。
まず、名前空間を作成します。
kubectl create namespace argocd
作成した名前空間にマニフェストファイルを適用します。
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
全ポッドが名前空間内で適切に実行されていることを確認します。
kubectl get pods -n argocd
それでは、ポートフォワーディングを通じてArgo CDサーバーのUIを公開しましょう。
kubectl port-forward svc/argocd-server -n argocd 8080:443
https://localhost:8080/で ArgoCD の UI を確認できるようになります。
ここで、ログインするにはユーザー名とパスワードが必要です。 デフォルトでは、ユーザー名は「admin」で、 パスワードは次のコマンドを使って生成できます。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
パスワードとして使う出力が得られます。 ユーザー名(admin)とパスワードを取得したら、Argo CDにログインします。
また、ローカルでCLI経由でArgo CDを使えることを確認してください。そのためにArgo CD CLIをインストールします。
brew install argocd
これで、CLI 経由でログインして Argo CD に話しかけることができます。
argocd login localhost:8080
ユーザー名とパスワードを求められます。 両方を設定すると、ログインが成功します。
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
Service と Deployment の両方がOutOfSyncステータスになっていることが分かります。次のコマンドでアプリケーションを同期しましょう。
argocd app sync helm-guestbook
Serviceの正常性ステータスがHealthy(正常)であり、DeploymentがProgressing(進行中)であることが分かります。 Deploymentにはしばらく時間がかかり、Healthyになります。
UIに移動すると、Argo CDで作られたアプリケーションを確認できます。
HealthyでSynced(同期済み)であることが分かります。
ポートフォワードすることで、デプロイされたアプリケーションに簡単にアクセスできます。
kubectl port-forward svc/helm-guestbook 9090:80
http://localhost:9090/でアプリケーションにアクセスしましょう。
Argo CDを使ってHelmチャートをデプロイしましょう。
Argo CD UIの設定に移動し、リポジトリーを追加します。
以下の詳細を追加して接続します。
追加したリポジトリーがリスト表示されます。
次に、新しいアプリケーションの作成をクリックします。 Argo CDにNGINX Helm チャートをデプロイします。
必要な詳細を必ず指定してください。
「Create」をクリックすると、Argo CDダッシュボードにアプリケーションが表示されます。
最初はアプリケーションが同期していません。 アプリケーションを同期すると、アプリケーションが更新され、healthy(正常)であると表示されます。
「Sync」をクリックしてから「Synchronize」をクリックします。
戻って確認すると、アプリケーションはHealthyでSyncedの状態を示しているはずです。
Harnessは、ソースリポジトリー内のKubernetesマニフェストをターゲットクラスターと同期することでサービスをデプロイできる、ネイティブのGitOps機能を提供します。 まず、環境にGitOpsエージェントをインストールしてHarness GitOpsをセットアップします。 次に、HarnessのGitOps Applicationでdesired(望ましい)状態とtarget状態を管理する方法を定義します。 GitOpsエージェントは、Applicationで定義された同期操作を実行し、ソースおよびターゲット状態のイベントに反応します。
Kubernetesクラスターの1つを使って、このHarness GitOpsを試してください。
まず、無料のHarnessアカウントにサインアップし、GitOpsタブに移動する必要があります。
サイド メニューから「Deployments」>「GitOps」に移動します。
HarnessがArgo CDをインストールし、その Argo CDインスタンスをHarnessに接続します。 必要なのはKubernetesクラスターだけです。 ここで、Harnessの一部としてGitOps を実行するために必要なものをセットアップする必要があります。
GitOps > Settings > GitOps Agentsに移動します。
以下に示す必要な全GiitOps 設定を1つずつ接続します。
全てが接続されて検証されたら、Harness GitOpsを介してアプリケーションのデプロイを開始できます。 有名なゲストブックの例では、デプロイが完了すると、以下に示すようにHarness GitOpsダッシュボードが表示されます。
この単純なHarness GitOps チュートリアルに従って、Harness GitOpsを介してアプリケーションをデプロイすることがいかに直感的で簡単かを確認できます。
GitOpsは、明るい未来が待っている最新のソフトウェアデリバリーのアプローチです。 Kubernetes関連のデプロイメントで作業している場合、 GitOps には多くのメリットがあります。 GitOpsは、豊富な開発者エクスペリエンスに重点を置いて、ソフトウェアのデプロイを加速します。 DevOpsのベストプラクティスと組み合わせることで、GitOpsはソフトウェアデリバリーに翼を与えます。
GitOps継続的デリバリー ツールをお探しですか? Harness CDとGitOps-as-a-Serviceのデモを今すぐリクエストしてください!
この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。