Argo CD アプリケーション


Red Hat OpenShift GitOps 1.15

Argo CD ダッシュボード、oc ツール、または GitOps CLI を使用して OpenShift クラスター上にアプリケーションを作成し、デプロイする

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、Argo CD ダッシュボード、oc ツール、または GitOps CLI を使用してアプリケーションを作成し、OpenShift クラスターにデプロイする手順を説明します。また、Argo CD での自己修復動作を検証する方法と、コントロールプレーン以外の namespace でアプリケーションリソースを有効にして管理する方法についても説明します。

第1章 Argo CD を使用した Spring Boot アプリケーションのデプロイ

Argo CD を使用すると、Argo CD ダッシュボードまたは oc ツールを使用して、アプリケーションを OpenShift Container Platform クラスターにデプロイできます。

1.1. Argo CD ダッシュボードを使用したアプリケーションの作成

Argo CD は、アプリケーションを作成できるダッシュボードを提供します。

前提条件

  • OpenShift Container Platform クラスターに管理者としてログインしている。
  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
  • Argo CD インスタンスにログインしている。

手順

  1. Argo CD ダッシュボードで、NEW APP をクリックして新規の Argo CD アプリケーションを追加します。
  2. このワークフローでは、以下の設定で spring-petclinic アプリケーションを作成します。

    アプリケーション名
    spring-petclinic
    プロジェクト
    default
    同期ポリシー
    Automatic
    リポジトリー URL
    https://github.com/redhat-developer/openshift-gitops-getting-started
    リビジョン
    HEAD
    パス
    app
    宛先
    https://kubernetes.default.svc
    namespace
    spring-petclinic
  3. CREATE をクリックしてアプリケーションを作成します。
  4. Web コンソールの Administrator パースペクティブを開き、AdministrationNamespaces を展開します。
  5. namespace を検索、選択してから Label フィールドに argocd.argoproj.io/managed-by=openshift-gitops を入力し、openshift-gitops namespace にある Argo CD インスタンスが namespace を管理できるようにします。

1.2. oc ツールを使用したアプリケーションの作成

oc ツールを使用して、ターミナルで Argo CD アプリケーションを作成できます。

前提条件

  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
  • Argo CD インスタンスにログインしている。

手順

  1. サンプルアプリケーション をダウンロードします。

    $ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
  2. アプリケーションを作成します。

    $ oc create -f openshift-gitops-getting-started/argo/app.yaml
  3. oc get コマンドを実行して、作成されたアプリケーションを確認します。

    $ oc get application -n openshift-gitops
  4. アプリケーションがデプロイされている namespace にラベルを追加し、openshift-gitops namespace の Argo CD インスタンスが管理できるようにします。

    $ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops

1.3. Argo CD の自己修復動作の確認

Argo CD は、デプロイされたアプリケーションの状態を常に監視し、Git の指定されたマニフェストとクラスターのライブの変更の違いを検出し、それらを自動的に修正します。この動作は自己修復として言及されます。

Argo CD で自己修復動作をテストし、確認することができます。

前提条件

  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
  • Argo CD インスタンスにログインしている。
  • サンプル app-spring-petclinic アプリケーションがデプロイされ、設定されている。

手順

  1. Argo CD ダッシュボードで、アプリケーションに Synced ステータスがあることを確認します。
  2. Argo CD ダッシュボードの app-spring-petclinic タイルをクリックし、クラスターにデプロイされたアプリケーションのリソースを表示します。
  3. OpenShift Container Platform Web コンソールで、Developer パースペクティブに移動します。
  4. Spring PetClinic デプロイメントを変更し、Git リポジトリーの app/ ディレクトリーに変更をコミットします。Argo CD は変更をクラスターに自動的にデプロイします。

    1. OpenShift GitOps 開始のリポジトリー をフォークします。
    2. deployment.yaml ファイルで failureThreshold の値を 5 に変更します。
    3. デプロイメントクラスターで、以下のコマンドを実行し、failureThreshold フィールドの値を確認します。

      $ oc edit deployment spring-petclinic -n spring-petclinic
  5. OpenShift Container Platform Web コンソールでアプリケーションを監視している間に、クラスターでデプロイメントを変更し、これを 2 つの Pod にスケールアップして自己修復動作をテストします。

    1. 以下のコマンドを実行してデプロイメントを変更します。

      $ oc scale deployment spring-petclinic --replicas 2  -n spring-petclinic
    2. OpenShift Container Platform Web コンソールでは、デプロイメントは 2 つの Pod にスケールアップし、すぐに再び 1 つの Pod にスケールダウンすることに注意してください。Argo CD は Git リポジトリーとの差異を検知し、OpenShift Container Platform クラスターでアプリケーションを自動的に修復しました。
  6. Argo CD ダッシュボードで、app-spring-petclinic タイル → APP DETAILSEVENTS をクリックします。EVENTS タブには、以下のイベントが表示されます。Argo CD がクラスターのデプロイメントリソースが同期されていないことを検知し、Git リポジトリーを再同期してこれを修正します。

第2章 GitOps CLI を使用したアプリケーションの作成

Argo CD を使用すると、GitOps argocd CLI を使用して、OpenShift Container Platform クラスターにアプリケーションを作成できます。

2.1. GitOps CLI を使用したデフォルトモードでのアプリケーションの作成

GitOps argocd CLI を使用して、default モードでアプリケーションを作成できます。

前提条件

  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
  • OpenShift CLI (oc) がインストールされている。
  • Red Hat OpenShift GitOps argocd CLI がインストールされている。
  • Argo CD インスタンスにログインしている。

手順

  1. Argo CD サーバーの admin アカウントのパスワードを取得します。

    $ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
  2. Argo CD サーバーの URL を取得します。

    $ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
  3. admin アカウントのパスワードを使用して Argo CD サーバーにログインし、一重引用符で囲みます。

    重要

    パスワードを一重引用符で囲むと、$ などの特殊文字がシェルによって誤って解釈されなくなります。パスワードのリテラル値を囲むには常に一重引用符を使用してください。

    $ argocd login --username admin --password ${ADMIN_PASSWD} ${SERVER_URL}

    $ argocd login --username admin --password '<password>' openshift-gitops.openshift-gitops.apps-crc.testing

  4. すべてのアプリケーションを表示して、argocd コマンドをデフォルトモードで実行できることを確認します。

    $ argocd app list

    設定が正しい場合は、既存のアプリケーションが次のヘッダーとともにリストされます。

    出力例

    NAME CLUSTER NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO PATH TARGET

  5. デフォルトモードでアプリケーションを作成します。

    $ argocd app create app-spring-petclinic \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path app \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy automated \
        --self-heal \
        --sync-option Prune=true \
        --sync-option CreateNamespace=true
  6. openshif-gitops Argo CD インスタンスによって管理される spring-petclinic 宛先 namespace にラベルを付けます。

    $ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
  7. 使用可能なアプリケーションをリストして、アプリケーションが正常に作成されたことを確認し、アプリケーションのステータスが Healthy および Synced になるまでコマンドを繰り返します。

    $ argocd app list

2.2. GitOps CLI を使用したコアモードでのアプリケーションの作成

GitOps argocd CLI を使用して、core モードでアプリケーションを作成できます。

前提条件

  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
  • OpenShift CLI (oc) がインストールされている。
  • Red Hat OpenShift GitOps argocd CLI がインストールされている。

手順

  1. oc CLI ツールを使用して OpenShift Container Platform クラスターにログインします。

    $ oc login -u <username> -p <password> <server_url>

    $ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443

  2. コンテキストが kubeconfig ファイルで正しく設定されているかどうかを確認します。

    $ oc config current-context
  3. 現在のコンテキストのデフォルトの namespace を openshift-gitops に設定します。

    $ oc config set-context --current --namespace openshift-gitops
  4. 次の環境変数を設定して、Argo CD コンポーネント名をオーバーライドします。

    $ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
  5. すべてのアプリケーションを一覧表示して、core モードで argocd コマンドを実行できることを確認します。

    $ argocd app list --core

    設定が正しい場合は、既存のアプリケーションが次のヘッダーとともにリストされます。

    出力例

    NAME CLUSTER NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO PATH TARGET

  6. core モードでアプリケーションを作成します。

    $ argocd app create app-spring-petclinic --core \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path app \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy automated \
        --self-heal \
        --sync-option Prune=true \
        --sync-option CreateNamespace=true
  7. openshif-gitops Argo CD インスタンスによって管理される spring-petclinic 宛先 namespace にラベルを付けます。

    $ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
  8. 使用可能なアプリケーションをリストして、アプリケーションが正常に作成されたことを確認し、アプリケーションのステータスが Healthy および Synced になるまでコマンドを繰り返します。

    $ argocd app list --core

2.3. 関連情報

第3章 コントロールプレーン以外の namespace でのアプリケーションリソースの管理

クラスター管理者は、openshift-gitops コントロールプレーン namespace 以外の非コントロールプレーン namespace で Application リソースを宣言的に作成および管理できます。この機能は、Argo CD オープンソースプロジェクトでは Applications in any namespace 機能と呼ばれています。

注記

開発者として、openshift-gitops コントロールプレーン namespace 以外の非コントロールプレーン namespace で Argo CD アプリケーションを作成する場合は、クラスター管理者がそれらに必要な権限を付与していることを確認してください。

それ以外の場合、Argo CD の調整後に、次の例のようなエラーメッセージが表示されます。

エラーメッセージの例

error while validating and normalizing app: error getting application's project: application 'app' in namespace 'dev' is not allowed to use project 'default'

この機能を使用するには、次のオブジェクトでターゲット namespace を明示的に有効化および設定する必要があります。

  • ユーザー定義のクラスタースコープ Argo CD インスタンスの ArgoCD カスタムリソース (CR)
  • AppProject カスタムリソース (CR)
  • Application CR

コントロールプレーン以外の namespace で Application リソースを作成および管理するプロセスは、次の手順で構成されます。

この機能は、分離されたチーム向けに Argo CD アプリケーションのデプロイメントを管理するマルチテナント環境で役立ちます。

重要

アプリケーションチームの権限昇格を防ぐには、次の要件を満たす必要があります。

  • 特権のある AppProject インスタンスの .spec.sourceNamespaces フィールドに、コントロールプレーン以外の namespace を設定しないでください。たとえば、openshift-gitops コントロールプレーン namespace または定義した namespace のいずれかにインストールされた AppProject CR の default インスタンスなどです。
  • AppProject CRD 内の openshift-gitops コントロールプレーン namespace へのアクセスを許可しないでください。
  • 常に、openshift-gitops コントロールプレーン namespace でユーザー定義の AppProject インスタンスを作成して設定し、対応するユーザー定義の AppProject インスタンス内の .spec.sourceNamespaces フィールドで非コントロールプレーンの namespace を設定します。

3.1. 前提条件

3.2. ターゲット namespace を使用したユーザー定義のクラスタースコープ Argo CD インスタンスの Argo CD CR 設定

クラスター管理者は、ユーザーが Application リソースを作成、更新、および調整できる特定のコントロールプレーン以外の namespace のセットを定義できます。まず、要件に応じて、ユーザー定義のクラスタースコープ Argo CD インスタンスの ArgoCD カスタムリソース (CR) でターゲット namespace を明示的に設定する必要があります。

前提条件

  • 管理者として OpenShift Container Platform クラスターにログインしている。
  • OpenShift Container Platform クラスターに Red Hat OpenShift GitOps 1.13.0 以降のバージョンがインストールされている。
  • 定義済みの namespace (例: spring-petclinic namespace) に、ユーザー定義のクラスタースコープ Argo CD インスタンスがある。

手順

  1. Web コンソールの Administrator パースペクティブで、OperatorsInstalled Operators の順にクリックします。
  2. Project リストから、ユーザー定義のクラスタースコープ Argo CD インスタンスがインストールされているプロジェクトを選択します。
  3. インストールされた Operator のリストから Red Hat OpenShift GitOps を選択し、Argo CD タブに移動します。
  4. ユーザー定義のクラスタースコープ Argo CD インスタンスをクリックします。
  5. ターゲット namespace を使用して、ユーザー定義のクラスタースコープ Argo CD インスタンスの ArgoCD CR を設定します。

    1. YAML タブをクリックし、ArgoCD CR の YAML ファイルを編集します。
    2. ArgoCD CR で、sourceNamespaces パラメーターの値を設定して、コントロールプレーン以外の namespace を含めます。

      ArgoCD CR の例

      apiVersion: argoproj.io/v1beta1
      kind: ArgoCD
      metadata:
        name: example 1
        namespace: spring-petclinic 2
      spec:
        sourceNamespaces: 3
          - dev 4
          - app-team-* 5

      1
      ユーザー定義のクラスタースコープの Argo CD インスタンスの名前。
      2
      ユーザー定義のクラスタースコープの Argo CD インスタンスを実行する namespace。
      3
      Application リソースを作成および管理するための非コントロールプレーン namespace のリスト。
      4
      Application リソースを作成および管理するための Argo CD サーバーのターゲット namespace の名前。
      5
      ワイルドカード (*) を使用して、Argo CD サーバーが Application リソースを作成および管理するためのパターン app-team-* (app-team-1app-team-2 など) に一致するターゲット namespace の名前を指定します。
    3. SaveReload を順にクリックします。

      注記

      sourceNamespaces フィールドでターゲット namespace が指定されると、Operator は指定された namespace に argocd.argoproj.io/managed-by-cluster-argocd ラベルを追加します。

      dev ターゲット namespace の例

      apiVersion: v1
      kind: Namespace
      metadata:
        name: dev
        labels:
          argocd.argoproj.io/managed-by-cluster-argocd: spring-petclinic 1
          kubernetes.io/metadata.name: dev 2

      1
      ユーザー定義のクラスタースコープの Argo CD インスタンスの namespace。
      2
      Application リソースを作成および管理するための Argo CD サーバーのターゲット namespace。
  6. Operator が argocd.argoproj.io/managed-by-cluster-argocd ラベルを指定の namespace に追加することを確認します。

    1. AdministrationNamespaces に移動し、Create Namespace をクリックします。
    2. Create Namespace ダイアログボックスで Name を入力し、Create をクリックします。

      たとえば、dev ターゲット namespace を作成するには、Name フィールドに dev を入力します。前の手順を繰り返して、app-team-1 および app-team-2 ターゲット namespace を作成できます。

      Namespaces ページには、作成されたターゲット namespace が表示されます。

    3. ターゲット namespace をクリックし、YAML タブに移動して、Operator によって追加された argocd.argoproj.io/managed-by-cluster-argocd ラベルを確認します。
  7. ユーザー定義のクラスタースコープ Argo CD インスタンスが、クラスタースコープのリソースを管理するためのクラスターロールで設定されていることを確認します。

    1. User ManagementRoles に移動し、Filter リストから Cluster-wide Roles を選択します。
    2. Search by name フィールドを使用して、作成したクラスターロールを検索します。たとえば、example-spring-petclinic-argocd-application-controllerexample-spring-petclinic-argocd-server です。

      Roles ページには、作成されたクラスターロールが表示されます。

    3. GitOps Operator によって次のロールベースアクセス制御 (RBAC) リソースが作成されていることを確認します。

      名前種類目的

      <argocd_name>-<argocd_namespace>-argocd-application-controller

      ClusterRole および ClusterRoleBinding

      Argo CD アプリケーションコントローラーがクラスターレベルで Application リソースを監視してリスト表示するため

      <argocd_name>-<argocd_namespace>-argocd-server

      ClusterRole および ClusterRoleBinding

      Argo CD サーバーがクラスターレベルで アプリケーション リソースを監視し、リスト表示するため

      <argocd_name>-<target_namespace>

      Role および RoleBinding

      Argo CD サーバーが UI、API、または CLI を介してターゲット namespace 内の Application リソースを管理するため

3.3. ターゲット namespace を使用したユーザー定義の AppProject インスタンスの作成および設定

クラスター管理者は、ユーザーが Application リソースを作成、更新、および調整できる特定のコントロールプレーン以外の namespace のセットを定義できます。ターゲット namespace を使用してユーザー定義のクラスタースコープ Argo CD インスタンスを設定した後、openshift-gitops コントロールプレーン namespace にユーザー定義の AppProject インスタンスを作成して設定する必要があります。さらに、ユーザー定義の AppProject インスタンスの .spec.sourceNamespaces フィールドでターゲット namespace を明示的に設定する必要があります。

注記

GitOps コントロールプレーン namespace (openshift-gitops) 内のアプリケーションは、AppProject カスタムリソース (CR) の .spec.sourceNamespaces フィールドによって課される制限に関係なく、任意の AppProject インスタンスを参照するように .spec.project フィールドを設定できます。

前提条件

  • 管理者として OpenShift Container Platform クラスターにログインしている。
  • OpenShift Container Platform クラスターに Red Hat OpenShift GitOps 1.13.0 以降のバージョンがインストールされている。

手順

  1. openshift-gitops コントロールプレーン namespace にユーザー定義の AppProject インスタンスを作成して設定し、.spec.sourceNamespaces フィールドにターゲット namespace を指定します。

    1. Project リストから openshift-gitops プロジェクトを選択します。
    2. Web コンソールの Administrator パースペクティブで、OperatorInstalled OperatorRed Hat OpenShift GitOps をクリックし、AppProject タブに移動します。
    3. Create AppProject をクリックし、YAML ビューに以下の設定を入力します。

      ユーザー定義の AppProject インスタンスの例

      kind: AppProject
      apiVersion: argoproj.io/v1alpha1
      metadata:
        name: project-one 1
        namespace: openshift-gitops 2
      spec:
        sourceNamespaces: 3
        - dev 4
        - app-team-* 5
        destinations: 6
          - name: '*'
            namespace: '*'
            server: '*'
         sourceRepos: 7
          - '*'

      1
      ユーザー定義の AppProject インスタンスの名前。
      2
      ユーザー定義の AppProject インスタンスを実行するコントロールプレーン namespace。
      3
      Application リソースを作成および管理するための非コントロールプレーン namespace のリスト。
      4
      Application リソースを作成および管理するための Argo CD サーバーのターゲット namespace の名前。
      5
      ワイルドカード (*) を使用して、Argo CD サーバーが Application リソースを作成および管理するためのパターン app-team-* (app-team-1app-team-2 など) に一致するターゲット namespace の名前を指定します。
      6
      ユーザー定義の AppProject インスタンス内のアプリケーションをデプロイできるクラスターと namespace への参照。
      7
      ユーザー定義の AppProject インスタンス内のアプリケーションがマニフェストをプルできるリポジトリーへの参照。
    4. Create をクリックします。

      AppProjects ページには、作成されたユーザー定義の AppProject インスタンスが表示されます。

3.4. ターゲット namespace とユーザー定義の AppProject インスタンスを参照するためのアプリケーション CR の作成と設定

クラスター管理者は、ユーザーが Application リソースを作成、更新、および調整できる特定のコントロールプレーン以外の namespace のセットを定義できます。ユーザー定義の AppProject インスタンスの .spec.sourceNamespaces フィールドでターゲット namespace を設定した後、ターゲット namespace とユーザー定義の AppProject インスタンスを参照するために、metadata.namespace フィールドと .spec.project フィールドのパラメーターを使用して、Application カスタムリソース (CR) を明示的に作成して設定する必要があります。

前提条件

  • 管理者として OpenShift Container Platform クラスターにログインしている。
  • OpenShift Container Platform クラスターに Red Hat OpenShift GitOps 1.13.0 以降のバージョンがインストールされている。

手順

  1. ターゲット namespace とユーザー定義の AppProject インスタンスを参照するために、metadata.namespace および .spec.project フィールドのパラメーターを使用して Application CR を作成し、設定します。

    1. Project リストからターゲット namespace を選択します。
    2. Web コンソールの Administrator パースペクティブで、OperatorInstalled OperatorRed Hat OpenShift GitOps をクリックし、Application タブに移動します。
    3. Create Application をクリックし、YAML ビューに次の設定を入力します。

      ユーザー定義の AppProject インスタンスの例

      kind: Application
      apiVersion: argoproj.io/v1alpha1
      metadata:
        name: cluster-configs 1
        namespace: dev 2
      spec:
        project: project-one 3
        # ...

      1
      アプリケーションの名前。
      2
      Application リソースを作成および管理するための Argo CD サーバーのターゲット namespace の名前。
      3
      ユーザー定義の AppProject インスタンスの名前。
    4. Create をクリックします。

      Applications ページには、作成されたアプリケーションが表示されます。

      cluster-configs Argo CD アプリケーションに Healthy および Synced のステータスが追加されています。

3.5. 関連情報

法律上の通知

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.