「Argo CD」で実装するKubernetesの「GitOps」――基本と原則、実践時の考慮ポイント:Cloud Nativeチートシート(7)
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、「Argo CD」によるクラウドネイティブなCD(継続的デリバリー)「GitOps」について解説します。
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する本連載「Cloud Nativeチートシート」。前回、前々回とクラウドネイティブにおけるCI/CD(継続的インテグレーション/継続的デリバリー)について説明してきましたが、今回はCDにフォーカスします。
クラウドネイティブにおけるCI/CDの概要については『「Kubernetes Native」なCI/CDとは何か――クラウドネイティブ時代に至る歴史、主要ツール、パイプラインとフローの在り方』、CIについては「GitLabによるCI実践入門――Kubernetesで利用するコンテナイメージをビルドする」をご覧ください。
本稿では、上記のCI/CDの概要で説明したクラウドネイティブなCD「GitOps」の詳細、および「Argo CD」によるGitOpsの実装方法、GitOpsの原則、実践ポイントを説明します。
目次
- 「GitOps」とは?
- GitOpsベースのCDツール「Argo CD」の6つの特徴
- コラム Argo CD 2.0の新機能
- Argo CDの仕組み
- Argo CDの利用環境(サンプル)の概要
- 事前準備
- サンプルアプリケーションの概要
- サンプルアプリケーションをArgo CDに登録する
- コラム Argo CDで利用されているデプロイツールのバージョン
- マニフェストファイルの修正
- アプリケーションの削除
- 他環境へのデプロイ
- Argo CDの設定
- Argo CD Notificationsを利用した通知設定
- CIパイプラインとの連携
- GitOpsの原則と利点
- GitOpsにおける5つのベストプラクティス
- コラム Argo CDにおけるsecretの管理
「GitOps」とは?
GitOpsは、2017年にWeaveworksが提唱した開発手法です。GitOpsを使うと、「Git」とKubernetesクラスタで実行されているものとの差分を検出できます。違いがある場合は、クラスタの状態を自動的に更新またはロールバックすることで常にGitとKubernetes環境を同期し続けることができます。
また、GitをCDのベースとすることで、Gitのマージ/プルリクエストといったなじみのある開発方法でKubernetesにデプロイできます。
GitOpsでは、デプロイをCDツール、ビルド部分をCIツールが担い、CIとCDの責務を分離します。
従来のCDと比較したGitOpsの特徴については、本連載の前々回記事で説明しているので、興味がある方は参考にしてください。
GitOpsベースのCDツール「Argo CD」の6つの特徴
Argo CDは「Kubernetes Native」なGitOpsベースのCDツールです。Kubernetesと組み合わせて便利に使えます。どう便利なのかを見ていきましょう。
1. Kubernetesに気軽にインストールして使える
Argo CDは、Kubernetesに「Helm」やYAMLでデプロイして簡単に使い始めることができます。また、オープンソースソフトウェア(OSS)で提供されているので、ライセンスの購入などを気にする必要もありません。
2. Gitリポジトリをサポート
KubernetesマニフェストをGitリポジトリで管理している方も多いと思いますが、Argo CDはGitリポジトリをサポートしています。「GitHub」「GitLab」、自分で立てたGitリポジトリサーバなどのGitリポジトリを利用できます。
3. WebのUIとコマンドライン(CLI)を提供
WebのUIを備え、アプリケーションのデプロイを直感的に定義できます。また、GUI上でデプロイされたリソースの確認や、リポジトリの定義情報とKubernetesクラスタ上のリソースの差分も分かりやすく確認できます。また、コマンドラインのCLIも利用できます。
4. YAMLでデプロイを記述でき、Gitリポジトリで管理できる
WebブラウザやコマンドラインのCLIは、使い始めたときは便利ですが、デプロイ情報を本格的に管理したい場合には向きません。「Kubernetes Native」なツールなだけあり、YAMLファイルでデプロイ情報を記述してGitリポジトリなどでデプロイ情報を管理できます。
5. KustomizeやHelmと連携可能
「Kustomize」やHelmのようなマニフェスト管理ツールとの連携機能を標準で備えています。
6. 変更検出によるデプロイではなく差分検出によるデプロイ
リポジトリへの変更をトリガーにデプロイをするだけではなく、リポジトリで定義されたYAMLファイルとKubernetesにデプロイされているリソースの差分を検出してデプロイできます。Kubernetesを運用していると、誰かが勝手にKubernetes上のリソースを変更してしまうことがありますが、そのような場合の環境修復にも役に立ちます。
コラム Argo CD 2.0の新機能
なお、2021年4月7日にリリースされたArgo CD 2.0からは、下記の機能が追加され、個別にリリースされています。これらは、それぞれ追加でインストールする必要があります。
Argo CD Notifications
これまで、デプロイ完了などのイベントを通知するためには、各サービスに通知ジョブを実装した上で「Resource Hooks」の仕組みを利用してJobを起動する必要がありました。2.0からは、「Notifications」機能で簡単に通知できるようになりました。電子メール、「Slack」、GitHubなどのサービスに対応している他、任意のWebhookに対して通知を送ることもできます。
Argo CD ApplicationSet
Argo CDでは「Application」というカスタムリソースでデプロイ設定を定義し、「Deployment」や「Service」などのマニフェスト群をまとめて管理します。
「ApplicationSet」はApplicationのテンプレートに対して複数のパラメーターを適用し、自動的にApplicationを生成する機能です。同じApplicationを複数のクラスタに展開したい場合や、大量のApplicationを管理する場合に便利です。
Argo CD Image Updater
「Image Updater」はArgo CDで管理されているKubernetesのコンテナイメージレジストリを監視し、クラスタ上のワークロードのイメージを自動的に更新する機能です。コンテナリポジトリ内のコンテナイメージのバージョンをトラッキングし、対象の選別を自動化してデプロイできます。従来はコンテナイメージを変更した後にマニフェストの内容を更新する必要がありましたが、その作業を自動化します。
Argo Projectの実験的プロジェクトargoproj-labsのプロジェクトの一つです。
なおArgo CDは「Argo Project」のプロダクトの一つです。Argo Projectでは、Argo CDの他にワークフローエンジンの「Argo Workflows」やイベント駆動フレームワークの「Argo Events」なども提供しています。
Argo CDの仕組み
Applicationリソースは、デプロイの単位ごと(アプリケーションやサービスなどまとまったデプロイ対象ごと)に作成します。WebブラウザやCLIで作成できる他、YAMLファイルを定義して、クラスタに「kubectl apply」で適用することもできます。Applicationリソースの定義には、下記のようにデプロイ設定を記述します。
- 対象のマニフェスト群が管理されているGitリポジトリの情報
- デプロイ先のクラスタの情報
- マニフェスト管理ツール(Kustomize、Helmなど)の情報
- Gitリポジトリ上のマニフェストの差分を検出するときの挙動
Applicationリソースに定義された情報を基に、Argo CDのコンポーネントの一つである「Application Controller」がデプロイを管理します。Application Controllerはその名の通り、Kubernetesのコントローラーとして実装されており、クラスタ上のデプロイされたリソースの状態とGitリポジトリ上のマニフェストの内容を監視します。Gitリポジトリ上のマニフェストが更新された場合や、クラスタ上のリソースが直接変更された場合などに差分を検出し、変更内容の同期(デプロイ)などをします。
Argo CDにはApplicationリソースの他、複数のApplicationをグルーピングする「AppProject」というカスタムリソースも存在します。AppProjectは、Argo CDをマルチテナントで使用する際にテナントごとにApplicationを管理するケースなどで役に立ちます。
本稿では詳しく紹介しないので、詳細は「Declarative Setup - Argo CD - Declarative GitOps CD for Kubernetes」をご覧ください。
Argo CDの利用環境(サンプル)の概要
ここからは、Argo CD v2(執筆時点ではv2.0.4)によるCD実装を説明します。プライベートリポジトリのGitLabからデプロイマニフェストを取得し、Kubernetesクラスタにデプロイするサンプルを例に紹介します。
本稿で利用するArgo CDの概要は下記の通りです。
Kubernetesクラスタ上にArgo CDをインストールし、デプロイメントをApplicationリソースとして定義すると、Applicationリソースの定義を基に、リソースごとに定義されたアプリケーションがデプロイされます。
本稿では、「kubectl port-forward」でポートフォワードした操作端末の「8080」ポートを利用してArgo CDに接続します。Argo CDへの接続には、Webブラウザ(GUI)やArgo CDのCLIを利用します。
Serviceリソースのロードバランサーや「Ingress」が利用できる場合は、ポートフォワードを利用する代わりにArgo CDを外部公開しても構いません。その場合は、Argo CDのCLIやWebブラウザ(GUI)で指定するURL「https://localhost:8080」を適宜読み替えてください。
事前準備
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- いまさら聞けない「CI/CD」の意義――GitHubとGitHub ActionsでCI/CDを試してみよう
GMOペパボにおけるCI/CD活用事例を紹介する本連載。第1回は組織でCI/CDを導入する目的と意義を整理し、GitHub/GitHub Actionsを利用してCI/CDを実践する方法を紹介します。 - CI/CDは何がまずいのか、コード作成から本番デプロイまでの時間短縮に注力
オブザーバビリティツールを手掛けるhoneycomb.ioの共同創業者でCTOを務めるチャリティ・メージャーズ氏が、CI/CDの問題点を指摘した。CIにばかり注力せず、CDにも気を配るべきであり、特にコード作成から本番環境へのデプロイまでの「時間の短縮」にフォーカスすべきだという。 - CNCF、継続的デリバリー技術のお薦めは?――新興技術ガイド「CNCF Technology Radar」の第1弾を公開
Cloud Native Computing Foundation(CNCF)は、「CNCF End User Community」の意見に基づく新興技術ガイド「CNCF Technology Radar」の第1弾を公開した。