導入
Argo CDは、Kubernetesの上でGitOps連続デリバリーを行うための人気のあるオープンソースの実装です。アプリケーション、定義、設定、および環境は宣言的でバージョン管理されるべきです。また、アプリケーションのデプロイメントとライフサイクル管理は自動化され、監査可能で理解しやすい必要があります。これらすべてをArgoを使用して行うことができます。
Argo CDは、同じGitOpsパターンと原則に従い、クラスタの状態を宣言的な方法で維持します。同期はGitリポジトリを介して行われ、そこにはKubernetesマニフェストが格納されています。 Kubernetesマニフェストはいくつかの方法で指定できます:
- Kustomizeアプリケーション。
- Helmチャート。
- Ksonnetアプリケーション。
- Jsonnetファイル。
- YAML/jsonマニフェストのプレーンディレクトリ。
- 構成管理プラグインとして構成された任意のカスタム構成管理ツール。
各アプリケーションがKubernetesクラスターで実行されると同様に、Argo CDはYAMLマニフェスト内に格納されたカスタムリソース定義(CRD)を介して構成されます。最も重要なものはApplication CRDです。Argo CDアプリケーションでは、どのGitリポジトリを使用してどのKubernetesクラスターを同期するかを定義します。それは、Argo CDがデプロイされている同じKubernetesクラスターであっても、外部のものであっても構いません。
Argo CDは、現在の(またはライブの)状態をGitリポジトリで指定された目標状態と比較し続けるKubernetesコントローラーとして実装されています。目標状態から逸脱した展開されたアプリケーションはOutOfSync
と見なされます。Argo CDは違いを報告し、可視化し、ライブ状態を自動的または手動で目標状態に同期する機能を提供します。
Argo CDには多くの機能がありますが、最も注目すべきものは次のとおりです:
- ・
Kustomize
、Helm
、Ksonnet
、Jsonnet
、plain-YAML
など、複数の構成管理/テンプレート化ツールのサポート。 - ・複数のクラスターの管理と展開の能力。
- ・SSO統合(
OIDC
、OAuth2
、LDAP
、SAML 2.0
、GitHub
、GitLab
、Microsoft
、LinkedIn
)。 - ・認可のためのマルチテナンシーおよびRBACポリシー。
- ・アプリケーションリソースのヘルスステータス分析。
- Gitリポジトリにコミットされたアプリケーション設定のロールバック/ロールアウト。
- 自動化された設定ドリフトの検出と可視化。
- アプリケーションのアクティビティのリアルタイムビューを提供するWeb UI。
- 自動化およびCI統合のためのCLI。
- Webhookの統合(GitHub、BitBucket、GitLab)。
- 複雑なアプリケーション展開(例:ブルー/グリーンおよびカナリアアップグレード)をサポートするPreSync、Sync、PostSyncフック。
- Prometheusメトリクス。
このチュートリアルでは、次のことを学びます:
Helm
を使用してArgo CD
をDOKS
クラスターにプロビジョニングする方法。Kubernetes
クラスターアプリケーションの状態をGit
リポジトリと同期させる方法(GitOps
原則を使用します)。- Argo CDを使用してアプリケーションをデプロイおよび管理する方法。
このチュートリアルのすべての手順を完了した後、Argo CD
がデプロイされたDOKS
クラスターが次のことを行います:
- クラスターの調整を処理します、アプリケーションCRD経由で。
- アプリケーションCRD内で定義されたHelmソースを使用してHelmリリースを処理します。
DOKS と Argo CD の Helm リリース概要
以下の図は、Argo CD が Git リポジトリを使用してホストされた Helm アプリケーションを管理する方法を示しています:
目次
- はじめに
- 前提条件
- アプリケーションデプロイメントのための Argo CD の概念の理解
- Argo CD のインストール
- Argo CD ウェブインターフェースへのアクセスと探索
- Argo CD CLI の使い方を知る
- Argo CD アプリケーションのブートストラップ
- Argo CD アプリケーションセットの使用
- Argo CD アプリケーションのアンインストール
- 結論
前提条件
このチュートリアルを完了するには、以下が必要です:
- A working
DOKS
cluster that you have access to. Please follow the Starter Kit DOKS Setup Guide to find out more.to find out more. - A GitHub repository and branch, to store Argo CD and your applications manifests. Must be created beforehand.
- A Git client, for cloning the
Starter Kit
repository. - Kubectl CLI、
Kubernetes
との相互作用のためのものです。次の手順に従って、kubectl
とdoctl
でクラスタに接続してください。 - Argo CLI は、
Argo CD
をコマンドラインインターフェースで操作するためのものです。 - Kubeseal は、シークレットの暗号化と Sealed Secrets Controller との相互作用のためのものです。
- Helm は、
Argo CD
のリリースとアップグレードを管理するためのものです(オプションですが、一般的には本番システムで推奨されます)。
アプリケーションデプロイメントのための Argo CD の概念の理解
Argo CDは、アプリケーションの展開とライフサイクルを管理するためにアプリケーションのコアコンセプトを使用しています。 Argo CDアプリケーションマニフェスト内では、アプリケーション定義をホスティングするGitリポジトリと、それに対応するKubernetesクラスターを定義します。 言い換えると、Argo CDアプリケーションはソースリポジトリとKubernetesクラスターの間の関係を定義します。 これは非常に簡潔でスケーラブルな設計であり、複数のソース(Gitリポジトリ)と対応するKubernetesクラスターを関連付けることができます。
A major benefit of using applications is that you don’t need to deploy Argo to each cluster individually. You can use a dedicated cluster for Argo, and deploy applications to all clusters at once from a single place. This way, you avoid Argo CD downtime or loss, in case other environments have issues or get decommissioned.
さらに、似たようなアプリケーションをプロジェクトにグループ化することもできます。 プロジェクトは、複数のチームで作業する際に、アプリケーションと関連する役割/権限を論理的にグループ化します。 指定されていない場合、新しいアプリケーションはdefault
プロジェクトに属します。 default
プロジェクトは自動的に作成され、制限はありません。 デフォルトプロジェクトは変更できますが、削除はできません。
スターターキット
は、Argo CDを使用した素早いスタートのためのデフォルト
プロジェクトを使用しています。その後、アプリケーション
を作成する方法を学びます。スターターキットコンポーネント
ごとに、そしてアプリケーションソース
としてHelmチャート
を使用します。Argo CDはHelmソースに限定されず、Kustomize、Ksonnet、Jsonnetなどの機能も活用できます。詳細については、アプリケーションソースページをご覧ください。
Argo CDのグラフィカルUI(Webインターフェース)を使用してアプリケーションを作成できますが、スターターキットはGitOpsの宣言的な方法に依存しています。各YAML構成は、各アプリケーションのレシピとして機能し、したがってGitリポジトリに保存できます。つまり、環境を再作成したり、別のクラスタに移動したりする場合でも、Argo CDのセットアップを常に再作成できます。さらに重要なことに、Git履歴を介して各変更を監査および追跡できます。 Argo CDの構成ファイルも、アプリケーション開発に使用されるGitリポジトリとは別のGitリポジトリに保存するのがベストプラクティスです。トピックに関する詳細については、Argo CD公式ドキュメントウェブサイトのベストプラクティスページをお読みください。
重要な注意:
考慮しておくべき重要な側面は、デフォルトでは Argo CD が新しいアプリケーションを自動的に同期しないことです。ArgoCD アプリケーションが最初に作成されると、その状態は OutOfSync
になります。これは、ArgoCD アプリケーションが指す Git リポジトリの状態が Kubernetes クラスタの状態と一致しないことを意味します。新しい ArgoCD アプリケーションを作成しても、ターゲットクラスターへの自動デプロイメントはトリガーされません。
自動同期と孤立したリソースの削除(プルーニング)を有効にするには、syncPolicy
を作成する必要があります。また、Argo CD を構成して、kubectl
を介して手動で行った変更を自動的に元に戻すこともできます。公式ドキュメントのウェブサイトで 自動同期ポリシー について詳しく読むことができます。
Git リポジトリ ソースを使用する典型的な Application CRD
は以下のようになります:
上記構成の説明:
spec.project
: アプリケーションに使用するプロジェクトを Argo CD に伝えます(この例ではdefault
)。spec.source.repoURL
: クラスター状態を同期するために使用される Git リポジトリの URL。spec.source.targetRevision
: 同期に使用される Git リポジトリのリビジョン(ブランチやタグ名でも構いません)。spec.source.path
: ソースファイル(YAML マニフェスト)が格納されている Git リポジトリのパス。spec.destination.server
: ターゲット Kubernetes クラスターのアドレス。通常、Argo CD が展開されているクラスターと同じクラスターを指します:https://kubernetes.default.svc
。spec.destination.namespace
: アプリケーションに使用するKubernetesの名前空間。spec.syncPolicy.automated
: クラスタ内のアプリケーションをGitリポジトリと自動的に同期するために自動化を有効にします。spec.syncPolicy.automated.prune
: Pruneは、自動同期の一部として、ソースで見つからないクラスタからリソースを削除するかどうかを指定します。spec.syncPolicy.automated.selfHeal
: クラスタ内で手動で変更された場合(例:kubectl
を介して)、リソースを望ましい状態に戻すかどうかを指定します。
また、クラスタ内のアプリケーションをインストールするためのソースとしてHelmリポジトリを使用することもできます。Helmリポジトリソースを使用した典型的なApplication CRD
は、以下のようになります(Gitリポジトリの例と同様ですが、Helmチャートリポジトリが使用されます):
上記の構成の説明:
spec.source.chart
: アプリケーションのソースとして使用するHelmチャート。spec.source.repoURL
: HelmチャートリポジトリのURL。spec.source.targetRevision
: アプリケーションに使用するHelmチャートのバージョン。spec.source.helm.releaseName
: Kubernetesクラスタに作成するHelmリリース名。spec.source.helm.values
: helmテンプレートに渡すHelmの値を指定します。通常、ブロックとして定義されます。spec.destination.server
: ターゲットKubernetesクラスタのアドレス。 Argo CDがデプロイされているクラスタと同じクラスタを使用している場合、通常はhttps://kubernetes.default.svc
を指します。spec.destination.namespace
:アプリケーションに使用するKubernetesの名前空間。
Argo CDのコアコンセプトについては、公式のドキュメントウェブサイトで詳細を読んでください。次に、KubernetesクラスターにArgo CDをデプロイするための利用可能なインストールオプションを見つけます。
Argo CDのインストール
Argo CDは、kubectl
またはHelm
を使用してインストールできます。
kubectl
とインストールマニフェストファイルを使用します。この方法では、さまざまなインストールパラメーターを直接制御することはできません。Helmベースのインストールにあまり慣れていない場合は、これが始めるのに最も直接的なオプションです。- Helmベースのインストール。Argo CDアプリケーションのデプロイメントとライフサイクルに対するより細かい制御が可能です。
HA
(ハイアベイラビリティ)セットアップやArgo CDを本番
で使用する場合に推奨されます。
次に、利用可能な機能に応じて、2つのオプションがあります。
マルチテナント
モード。このタイプのインストールは、組織内の複数のアプリケーション開発チームにサービスを提供し、プラットフォームチームによって管理されます。エンドユーザーは、Web UI
またはargocd
CLIを使用してAPIサーバーを介してArgo CDにアクセスできます。Core
のみモード。これは、グラフィカルユーザーインターフェイス、APIサーバー、SSOなどを備えたトリミングされたインストールであり、各コンポーネントの軽量(非HA)バージョンをインストールします。
スターターキットは、DOKSクラスターにArgo CDをインストールするためにMulti-Tenant
およびHigh Availability
モードを使用しています。この方法で、信頼性の高いセットアップが可能であり、ユーザーインターフェイスを含むすべての利用可能な機能を探索できます。詳細については、インストール方法のドキュメントページをご覧ください。
Kubectlベースのインストール
この方法では、kubectl
が必要であり、2つのステップのプロセスです:
- Argo CD自体を展開するための
namespace
を作成します。 kubectl
を介してHAインストールマニフェストを実行します。
次のコマンドを順番に実行してください:
これで、インストールが成功したかどうかを確認してください。まず、すべてのArgo CDデプロイメントが正常であるかどうかを確認してください:
出力は次のようになります(READY
列を確認してください – すべてのPods
が実行されている必要があります):
Argo CDサーバーは、HA
モードのためにreplicaset
の最小値を2
に設定する必要があります。何らかの理由で一部のデプロイメントが正常でない場合は、影響を受けるコンポーネントのPodのKubernetesイベントとログを確認してください。
ヘルムベースのインストール
この方法では、ローカルマシンにHelmをインストールする必要があります。Starter Kit は、使用を開始するための準備ができたHelm値ファイルを提供し、Argo CDをHAモード(自動スケーリングなし)でインストールします。
以下の手順に従って、Helmベースのインストールを完了してください。
- まず、Starter Kitディレクトリをクローンし(すでにクローンされていない場合)、ディレクトリをローカルコピーに変更します。
- 次に、Argo CD Helmリポジトリを追加します。
- 次に、インストール可能なチャートを検索するために
argo
Helmリポジトリを検索します。
出力は次のようになります。
- 次に、お好みのエディター(できればYAMLリントサポート付き)を使用して、Starter Kitリポジトリで提供されるArgo CD Helm値ファイルを開いて調査します。たとえば、VS Codeを使用できます。
- 最後に、Argo CDをDOKSクラスターに展開します。
–create-namespace \
注:
Helm
チャートの特定の
バージョンが使用されています。この場合、4.9.4
が選択されており、これはアプリケーションの2.4.0
バージョンにマップされます。一般的に、特定のバージョンにロックするのは良い習慣です。これにより、予測可能な結果が得られ、Git
を介したバージョン管理が可能になります。
次に、Helmリリースが成功したかどうかを確認します。
出力は次のように見えます(STATUS
列の値はdeployed
に設定される必要があります):
最後に、Argo CDアプリケーションのデプロイメント状態を確認します:
出力は次のように見えます(READY
列を確認してください – すべてのPods
が実行されている必要があります):
Argo CDサーバーは、HA
モードのreplicaset
の最小値を2
とする必要があります。何らかの理由で、いくつかのデプロイメントが正常でない場合は、影響を受けるコンポーネントのPodのKubernetesイベントとログを確認してください。
Argo CD Helmチャートの詳細については、コミュニティが管理するリポジトリにアクセスしてください。
次に、Argo CDによって提供されるグラフィカルユーザーインターフェースの主な機能にアクセスして探索する方法を学びます。
Argo CDの素晴らしい機能の1つは、Webインターフェースです。このインターフェースを使用して、さまざまな管理タスクを実行し、アプリケーションのデプロイメント状況を表示できます。グラフィカルユーザーインターフェースを使用してアプリケーションを作成し、さまざまな方法でArgo CDとやり取りできます。もう1つの重要な機能は、各アプリケーションの状態を検査し、Kubernetesイベントやアプリケーションログにアクセスできることです。さらに、Argo CDは、各アプリケーションデプロイメントが使用しているすべてのKubernetesオブジェクト(レプリカセット、ポッドなど)の視覚的な表現を提供します。
Webインターフェースには、argocd-server
Kubernetesサービスをポートフォワーディングしてアクセスできます。シェルターミナルで以下のコマンドを実行してください:
そして、Webブラウザを開き、localhost:8080に移動してください(現時点では無効なTLS証明書を無視してください)。Argo CDのログインページが表示されます。デフォルトの管理者ユーザー名はadmin
で、パスワードはインストール時にランダムに生成されます。以下のコマンドを実行して取得できます:
次に、アプリケーションダッシュボードページにリダイレクトされます。ここから、UIを介してアプリケーションを表示、作成、または管理したり(YAMLエディターも利用可能)、同期または更新操作を実行したりできます:
アプリケーションタイルをクリックすると、関連するすべてのオブジェクトの視覚的な表現も表示されます:
次のセクションでは、アプリケーションプロジェクト、リポジトリ、およびクラスターを管理できます:
最後に、ユーザー情報セクションには利用可能なユーザーが表示され、管理者パスワードの更新が可能です。
各セクションとサブセクションを詳細に調べて、利用可能なすべての機能を探索できます。次に、argocd
という名前のCLI対応版の使用方法を学びます。
Argo CDは、ウェブインターフェイスまたはCLIのどちらかを使用して同じセットの機能を利用できます。 argocd
CLIを使用するには、別のシェルウィンドウを開いて、単にargocd
と入力します。デフォルトでは、利用可能なコマンドとオプションが表示されます:
任意のコマンドまたはサブコマンドに対して、次のパターンを使用して対応するヘルプページを呼び出すことができます: argocd <command/subcommand> --help
。たとえば、app
コマンドの利用可能なオプションを確認したい場合:
# アプリケーションの詳細を取得します。
他のコマンド/サブコマンドも調べて、利用可能なすべてのオプションを確認してください。次に、最初のArgo CDアプリケーションをブートストラップする方法を学びます。これにより、Starter Kitのすべてのコンポーネントが自動的に展開されます。
新規インストール時、Argo CDはアプリケーションを同期する先やアプリケーションマニフェストのソースとして使用できるGitリポジトリを知りません。そのため、最初のステップはブートストラップと呼ばれる一度だけの操作を実行することです。このセクションで提示されるすべての操作は、argocd CLIまたはグラフィカルユーザーインターフェースを使用して実行できます。
クラスターをブートストラップする複数の方法があります(例:スクリプトを使用)。ただし、通常、Argo CDユーザーはアプリのアプリ
パターンを使用します。これは、最初にgood
CLI(またはWebインターフェース)を使用して親アプリケーションを作成し、その後、Kubernetesクラスター内の残りのアプリケーションを参照してブートストラップすることを意味します。
まず、Gitリポジトリを一貫したレイアウトで使用できるように準備する必要があります。次の例では、Gitリポジトリのレイアウト構造を以下のように作成します:
- ターミナルを開き、Gitリポジトリのレイアウトを作成するために以下の手順に従ってください:
- 最初に、テスト用のArgo CDをクローンするためのgitリポジトリをクローンします(
<>
プレースホルダを適切に置き換えてください):
- 次に、ディレクトリをローカルコピーに変更し、ディレクトリ構造を作成します(
<>
プレースホルダを適切に置き換えてください):
- 各コンポーネントに提供されるアプリケーションマニフェストをコピーします(各manifestの構造も確認できます):
最後に、変更をコミットしてオリジンにプッシュします。
次に、親アプリケーションデプロイメントを作成し、Argo CDにすべてのStarter KitアプリケーションをDOKSクラスターに自動的に同期させます。
このセクションでは、argocd
CLIを使用して、app of apps
パターンを作成して使用し、DOKSクラスターにすべてのStarter Kitコンポーネントをデプロイする方法を学びます。以下の図は、メインの概念を示しています:
まず、別のターミナルウィンドウでローカルマシン上のArgo CDメインサーバーをポートフォワードする必要があります:
次に、argocd
CLIが動作するために、Argo CD APIサーバーへのアクセスが必要です。別のターミナルウィンドウを開き、argocd
クライアントをArgo CDサーバーインスタンスで認証する必要があります:
出力は次のようになります:
次に、以下のコマンドを実行してstarter-kit-apps
親アプリケーションを作成してください(<>
プレースホルダーを適切に置き換えてください):
- –dest-namespace argocd \
- –dest-server https://kubernetes.default.svc \
- 上記のコマンドは、新しい
Argo CDアプリケーション
をargocd
ネームスペースにstarter-kit-apps
という名前で作成し、以下のように構成されます:
Argo CDが展開されている同じKubernetesクラスターを対象とする。なぜなら--dest-server
がhttps://kubernetes.default.svc
に設定されているからです。
--repo
引数で設定されたGitHubリポジトリを使用してクラスターを同期する。
--path
引数で見つかったclusters/dev/helm
ディレクトリ内のすべてのアプリケーションマニフェストをスキャンして適用します。
次に、starter-kit-apps
アプリケーションを同期する必要があります(Argo CDはデフォルトでは何も同期しませんので、指定する必要があります):
出力は次のようになります:
上記のコマンドが完了した後、Argo CDサーバーのメインダッシュボードに新しいアプリケーションが表示されるはずです。ウェブブラウザを開き、http://localhost:8080に移動してください。次に、Applications
タブを選択し、starter-kit-apps
タイルをクリックしてください(構成グラフを見てapp of apps
パターンに気付いてください):
また、CLIを使用して新しいアプリケーションを検査することもできます:
出力は次のようになります:
starter-kit-apps
親アプリケーションは同期済みとして表示されますが、子アプリケーションは同期されていません。次に、ウェブインターフェースを使用するか、CLIを介してすべてを同期させることができます:
同期操作には時間がかかる場合があります(すべてのデプロイされるアプリケーションのKubernetesオブジェクトの複雑さと数に応じて、5〜10分かかる場合があります):
しばらくしてから、すべてのアプリケーションを再度リストしてください:
- 出力は次のようになります(すべてのアプリケーションが今や同期されていることに注意してください):
Veleroアプリケーションの展開は、AbsyncError状態になり、読者がArgo CDでアプリケーションの問題を診断し、理解する練習として意図的に残されます。Argo CDアプリケーションの問題を診断する方法については、以下のHintsセクションを参照してください。
親アプリケーションのブートストラップは、一度だけの操作です。各アプリケーションの後続のGit変更では、Argo CDはドリフトを検出し、必要な変更を適用します。Argo CDは、Gitリポジトリの変更を検出するためにデフォルトでポーリングメカニズム
を使用しています。デフォルトのリフレッシュ間隔
は3分
に設定されています。ポーリングメカニズムに頼らずに、Gitウェブフックのパワーも活用できます。Gitのウェブフックを使用するようにArgo CDを作成および構成する方法については、公式ドキュメントのウェブサイトを参照してください。
Hints:必要に応じて、親アプリケーションを自動的に同期させる(自己修復および自動プルーニングも有効にする)には、次のコマンドを使用できます(<>
のプレースホルダーを適切に置き換えることを忘れないでください):
–dest-namespace argocd \
–dest-server https://kubernetes.default.svc \
–sync-policy automated \
–auto-prune \
同期の失敗が発生した場合は、常に対象のアプリケーションの Kubernetes イベントを検査できます(argocd app get <application_name>
経由):
出力は次のようになります:
- 次に、
app of apps パターン
を使用して、同じ手順を Argo CD グラフィカルユーザーインターフェースを介して実行する方法を学びます。 - Argo CD Web インターフェースを使用した App of Apps パターンの使用
- このセクションでは、Argo CD Web インターフェースを使用して、DOKS クラスターに Starter Kit のすべてのコンポーネントをデプロイするために
app of apps
パターンを作成し、活用する方法を学びます。以下の図は、主要なコンセプトを示しています: - 上記の図に示されているように、Web インターフェースを介した新しいアプリケーションのブートストラップは、CLI の対応部分と非常に類似しています。唯一の違いは、異なるパネル/ウィンドウ間を移動し、ポイントアンドクリック操作を使用することです。裏では、Argo CD は必要なアプリケーションの CRD を作成し、Kubernetes クラスターに変更を適用します。
- まず、Web ブラウザを開いて Argo CD Web コンソールにログインしてください。デフォルトのユーザー名は
admin
であり、デフォルトのパスワードは次のように取得します: - ログインしたら、アプリケーションのダッシュボードページにリダイレクトされます(新規インストールでは、ダッシュボードは空です)。次に、
Create Application
ボタンをクリックします。新しいパネルがポップアップし、アプリケーションの詳細を求められます: - 適切に各フィールドに入力してください:
Application Name
: 新しいアプリケーションの名前(例:starter-kit-apps
)。
Project
: このアプリケーションが属するプロジェクト名(Argo CDを初めて使用する場合、default
を使用できます)。
Sync Policy
とSync Options
: 同期ポリシーとオプションを設定します(例:Manual
、Automatic
、リトライ回数、リトライ間隔など)。
ソースRepository URL
: GitHubリポジトリのURLアドレス – 例:https://github.com/<YOUR_GITHUB_USERNAME>/<YOUR_ARGOCD_GITHUB_REPO_NAME>.git
。
ソースPath
: アプリケーションマニフェストが保存されているGitHubリポジトリディレクトリパス(例:clusters/dev/helm
)。
ディスティネーションCluster URL
: GitHubリポジトリと同期するターゲットKubernetesクラスタ(Argo CDが展開されているローカルクラスタの場合、https://kubernetes.default.svc
など)。
ディスティネーションNamespace
: Argo CDアプリケーションに使用するターゲットKubernetesクラスタのネームスペース(通常はargocd
)。
すべてのアプリケーションの詳細を入力したら、上部のCreateボタンをクリックします。ダッシュボードページに新しいアプリケーションタイルが表示されます:
アプリケーションタイルをクリックすると、構成グラフを見ることでアプリのアプリのパターン
を観察できます:
上記の画像を見ると、すべてのアプリケーションがOutOfSync
としてマークされていることに気付きます。次のステップは、親アプリケーションで同期操作をトリガーすることです。その後、すべての子アプリケーションも同期されます。続けて、親アプリケーションタイルのSync
ボタンを押してください。右側に新しいパネルが表示されます(下部にすべての子アプリが選択されていることに注意してください):
デフォルト値のままにして、上部の同期
ボタンを押し、Argo CDが同期操作をすべてのアプリケーションに連鎖させる様子を見てください:
Veleroアプリケーションの展開が失敗し、読者がArgo CDのアプリケーションの問題を診断し学習するための練習として、SyncError
状態に残されます。Argo CDのアプリケーションの問題を診断する方法を学ぶために、以下のヒントセクションを参照してください。
すべてがうまくいけば、すべてのアプリケーションには緑の枠があり、状態はHealthy
およびSynced
である必要があります。ブートストラッププロセスは、1回限りの操作です。後続のGitの変更ごとに、Argo CDはドリフトを検出し、必要な変更を適用します。Argo CDは、デフォルトでGitリポジトリの変更を検出するためにポーリングメカニズム
を使用します。デフォルトのリフレッシュ間隔
は3分
に設定されています。ポーリングメカニズムに依存せず、Gitのウェブフックのパワーも活用できます。Git webhooks を使用するように Argo CD を作成および設定する方法については、公式ドキュメントのウェブサイトをご覧ください。
ヒント:希望する場合、SYNC POLICY
フィールドの値をAutomatic
に設定して親アプリケーションを自動的に同期させることができます。セルフヒーリングと自動的なプルーニングを有効にするには、PRUNE RESOURCES
とSELF HEAL
のチェックボックスにチェックを入れます。
同期の失敗が発生した場合は、常に該当するアプリケーションのKubernetesイベントを検査できます。Webインターフェースを使用して、影響を受けるアプリケーションタイルに移動できます:
次に、アプリケーションページヘッダーのLAST SYNC RESULT
セクションから、赤色でフラグが立っているSync failed
メッセージリンクをクリックします。新しいパネルがポップアップし、同期操作が失敗した理由に関する有用な情報が表示されます:
- 次のセクションでは、
ApplicationSet
を使用して一度に複数のアプリケーションを管理する方法を学びます。 - Argo CDアプリケーションセットの使用
Application Setsは、Argo CDが提供するもう一つの強力な機能です。ApplicationSet ControllerはArgo CDのサブプロジェクトであり、テンプレート化された定義を介したアプリケーションの自動化を追加します。この機能は、アプリケーションマニフェスト内の繰り返しを回避するのに役立ちます(DRY原則を活用します)。
ApplicationSetコントローラーは、Argo CDと同じ名前空間内にインストールされ、新しいApplicationSetカスタムリソース(CR)の内容に基づいてArgo CDアプリケーションを自動生成します。
注意:Argo CDのバージョン2.3.x
からは、ApplicationSet Controller
を別途インストールする必要はありません。なぜなら、それがArgo CDのメインインストールの一部になったからです。Starter Kitではversion >= 2.3.1
を使用しているので、何も変更する必要はありません。
ApplicationSet
の主なアイデアは、generator
として機能する値のリストと、入力リストの値で埋められるtemplate
に基づいています。リストからの各アイテムについて、新しいアプリケーションテンプレートが順番に生成されます。基本的には、1つのApplicationSet CRDを定義し、入力値に基づいて必要なだけのArgoCD Application CRDを生成させることができます。したがって、複数のApplication manifests
を作成して取り扱う代わりに、single manifest
であるApplicationSet
を介してすべてを管理します。
このコンセプトは、パラメータ化されたアプリケーションテンプレートを使用して、multi-cluster
およびmulti-environment
セットアップの管理も簡素化します。Applicationセットには、List Generators以外にも他のジェネレータが含まれています:
Cluster generator: Argo CDで定義されたクラスタを使用してアプリケーションのテンプレートを作成します。
Git generator: Gitリポジトリのファイル/ディレクトリを使用してアプリケーションのテンプレートを作成します。
典型的なApplicationSet CRD
は、List Generator
を使用して次のように見えます:
上記のApplicationSet
をKubernetesクラスタに適用すると、3つのArgo CDアプリケーションがレンダリングされます。たとえば、dev
環境アプリケーションは以下のようにレンダリングされます:
テンプレートエンジンは非常に強力であり、多くの可能性を提供します。この機能について詳しくは、メインのApplicationSetドキュメントウェブサイトをご覧ください。
Argo CDで管理されているアプリケーションのアンインストール(または削除)は、Gitリポジトリソースから対応するマニフェストを削除することで行います。 app of appsパターン
を使用して作成されたアプリケーションの場合、親アプリケーションのみを削除する必要があります(CLIまたはWebインターフェースを介して)。その後、プロセスの一環として、すべての子アプリケーションが削除されます。
-
argocd
CLIを使用してstarter-kit-apps
親アプリケーション(子アプリケーションも含む)を削除する方法: - 親アプリケーションが削除されると、子アプリケーションおよびそれらのリソースがすべて削除されることを確認するには、適切な
Application definition
に適切なfinalizer
を追加してください:
Source:
https://www.digitalocean.com/community/developer-center/implementing-gitops-using-argo-cd