宣言型クラスター設定


Red Hat OpenShift GitOps 1.16

OpenShift GitOps を使用してクラスター設定で OpenShift クラスターを設定し、GitOps CLI を使用してデフォルトモードとコードモードでアプリケーションを作成および同期する

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、クラスターのカスタム設定を含むアプリケーションと Git ディレクトリーのコンテンツを再帰的に同期するように Argo CD を設定する手順を説明します。また、GitOps CLI を使用して、デフォルトモードとコードモードでアプリケーションを作成および同期する方法も説明します。

第1章 クラスター設定を使用したアプリケーションのデプロイによる OpenShift クラスターの設定

Red Hat OpenShift GitOps では、Argo CD を、クラスターのカスタム設定が含まれるアプリケーションと Git ディレクトリーの内容を再帰的に同期するように設定することができます。

1.1. 前提条件

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

1.2. Argo CD インスタンスを使用してクラスタースコープのリソースの管理

警告

特別なユースケースで必要な場合を除き、Argo CD インスタンスの権限をクラスタースコープに昇格しないでください。昇格したインスタンスは、cluster-admin 権限を持つユーザーのみが管理する必要があります。クラスタースコープのインスタンスの namespace にアクセスできるユーザーは誰でも、クラスターの権限を昇格してクラスター管理者になることができます。

クラスタースコープのリソースを管理するには、Red Hat OpenShift GitOps Operator の既存の Subscription オブジェクトを更新し、Argo CD インスタンスの名前空間を spec セクションの ARGOCD_CLUSTER_CONFIG_NAMESPACES 環境変数に追加します。

手順

  1. Web コンソールの Administrator パースペクティブで、OperatorsInstalled OperatorsRed Hat OpenShift GitOpsSubscription に移動します。
  2. Actions リストをクリックし、Edit Subscription をクリックします。
  3. openshift-gitops-operator サブスクリプションの詳細ページの YAML タブで、Argo CD インスタンスの namespace を仕様セクションの ARGOCD_CLUSTER_CONFIG_NAMESPACES 環境変数に追加して、spec セクションの Subscription YAML ファイルを編集します。

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-gitops-operator
      namespace: openshift-gitops-operator
    # ...
    spec:
      config:
        env:
        - name: ARGOCD_CLUSTER_CONFIG_NAMESPACES
          value: openshift-gitops, <list of namespaces of cluster-scoped Argo CD instances>
    # ...
  4. SaveReload を順にクリックします。
  5. Argo CD インスタンスがクラスタースコープのリソースを管理するクラスターロールで設定されていることを確認するには、次の手順を実行します。

    1. User ManagementRoles に移動し、Filter リストから Cluster-wide Roles を選択します。
    2. Search by name フィールドを使用して、argocd-application-controller を検索します。

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

      ヒント

      あるいは、OpenShift CLI で次のコマンドを実行します。

      oc auth can-i create oauth -n openshift-gitops --as system:serviceaccount:openshift-gitops:openshift-gitops-argocd-application-controller

      出力 yes は、Argo インスタンスがクラスタースコープのリソースを管理するクラスターロールで設定されていることを確認します。それ以外の場合は、設定を確認し、必要に応じて必要な手順を実行します。

1.3. Argo CD インスタンスのデフォルトの権限

デフォルトでは、Argo CD インスタンスには次の権限があります。

  • Argo CD インスタンスには、それがデプロイされている namespace 内のリソースのみを管理する admin 権限があります。たとえば、foo namespace にデプロイされた Argo CD インスタンスには、その namespace に対してのみリソースを管理する admin 権限があります。
  • Argo CD が適切に機能するには、リソースに対するクラスター全体の read 権限が必要であるため、Argo CD には次のクラスタースコープのアクセス許可があります。

    - verbs:
        - get
        - list
        - watch
       apiGroups:
        - '*'
       resources:
        - '*'
     - verbs:
        - get
        - list
       nonResourceURLs:
        - '*'
注記
  • Argo CD が実行している argocd-serverargocd-application-controller コンポーネントで使用されるクラスターのロールを編集して、write 権限が Argo CD で管理したい namespace とリソースのみに制限できます。

    $ oc edit clusterrole argocd-server
    $ oc edit clusterrole argocd-application-controller

1.4. クラスターレベルでの Argo CD インスタンスの実行

Red Hat OpenShift GitOps Operator によってインストールされるデフォルトの Argo CD インスタンスおよび付随するコントローラーは、単純な設定の切り替えを設定して、クラスターのインフラストラクチャーノードで実行できるようになりました。

手順

  1. 既存のノードにラベルを付けます。

    $ oc label node <node-name> node-role.kubernetes.io/infra=""
  2. オプション: 必要な場合は、テイントを適用し、インフラストラクチャーノードでワークロードを分離し、他のワークロードがそれらのノードでスケジュールされないようにすることもできます。

    $ oc adm taint nodes -l node-role.kubernetes.io/infra \
    infra=reserved:NoSchedule infra=reserved:NoExecute
  3. GitOpsService カスタムリソースに runOnInfra トグルを追加します。

    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
    spec:
      runOnInfra: true
  4. オプション: テイントがノードに追加された場合は、tolerationsGitOpsService カスタムリソースに追加します。

    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
      spec:
        runOnInfra: true
        tolerations:
        - effect: NoSchedule
          key: infra
          value: reserved
        - effect: NoExecute
          key: infra
          value: reserved

  5. コンソール UI の Pod を PodsPod details で表示して、openshift-gitops namespace のワークロードがインフラストラクチャーノードでスケジュールされていることを確認します。
注記

デフォルトの Argo CD カスタムリソースに手動で追加された nodeSelectors および tolerations は、GitOpsService カスタムリソースのトグルおよび tolerations によって上書きされます。

関連情報

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

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

このサンプルワークフローでは、cluster ディレクトリーの内容を cluster-configs アプリケーションに対して再帰的に同期するように Argo CD を設定するプロセスを説明します。このディレクトリーは、Web コンソールの red hat applications menu icon メニューに Red Hat Developer Blog - Kubernetes へのリンクを追加する OpenShift Container Platform Web コンソールクラスター設定を定義します。また、クラスターの namespace spring-petclinic を定義します。

前提条件

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

手順

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

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

1.6. 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.7. GitOps CLI を使用したデフォルトモードでのアプリケーションの作成

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

このサンプルワークフローでは、cluster ディレクトリーの内容を cluster-configs アプリケーションに対して再帰的に同期するように Argo CD を設定するプロセスを説明します。このディレクトリーは、OpenShift Container Platform クラスター設定とクラスター上の spring-petclinic namespace を定義します。

前提条件

  • 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-cluster-configs \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path cluster \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy none \
        --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. 使用可能なアプリケーションをリスト表示して、アプリケーションが正常に作成されたことを確認します。

    $ argocd app list

    cluster-configs の Argo CD アプリケーションは Healthy ステータスであっても、sync ポリシーが none であるため、自動的に同期されず、OutOfSync ステータスのままになります。

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

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

このサンプルワークフローでは、cluster ディレクトリーの内容を cluster-configs アプリケーションに対して再帰的に同期するように Argo CD を設定するプロセスを説明します。このディレクトリーは、OpenShift Container Platform クラスター設定とクラスター上の spring-petclinic namespace を定義します。

前提条件

  • 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-cluster-configs --core \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path cluster \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy none \
        --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. 使用可能なアプリケーションをリスト表示して、アプリケーションが正常に作成されたことを確認します。

    $ argocd app list --core

    cluster-configs の Argo CD アプリケーションは Healthy ステータスであっても、sync ポリシーが none であるため、自動的に同期されず、OutOfSync ステータスのままになります。

1.9. アプリケーションの Git リポジトリーとの同期

Argo CD の同期ポリシーを変更することで、アプリケーションを Git リポジトリーと同期できます。ポリシーを変更すると、クラスター設定の変更が Git リポジトリーからクラスターに自動的に適用されます。

手順

  1. Argo CD ダッシュボードでは、cluster-configs Argo CD アプリケーションに Missing および OutOfSync のステータスがあることに注意してください。アプリケーションは手動の同期ポリシーで設定されているため、Argo CD はこれを自動的に同期しません。
  2. cluster-configs タイルの 同期 をクリックし、変更を確認してから、SYNCHRONIZE をクリックします。Argo CD は Git リポジトリーの変更を自動的に検出します。設定が変更されると、Argo CD は cluster-configs のステータスを OutOfSync に変更します。Argo CD の同期ポリシーを変更し、Git リポジトリーからクラスターに変更を自動的に適用できるようにします。
  3. cluster-configs Argo CD アプリケーションに Healthy および Synced のステータスがあることに注意してください。cluster-configs タイルをクリックし、クラスター上で同期されたリソースおよびそれらのステータスの詳細を確認します。
  4. OpenShift Container Platform Web コンソールに移動し、 red hat applications menu icon をクリックして Red Hat Developer Blog - Kubernetes へのリンクが表示されることを確認します。
  5. Project ページに移動し、spring-petclinic namespace を検索し、これがクラスターに追加されていることを確認します。

    クラスター設定がクラスターに正常に同期されます。

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

GitOps argocd CLI を使用して、デフォルトモードでアプリケーションを同期できます。

このサンプルワークフローでは、cluster ディレクトリーの内容を cluster-configs アプリケーションに対して再帰的に同期するように Argo CD を設定するプロセスを説明します。このディレクトリーは、OpenShift Container Platform クラスター設定とクラスター上の spring-petclinic namespace を定義します。

前提条件

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

手順

  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. アプリケーションは none sync ポリシーを使用して設定されているため、同期操作を手動でトリガーする必要があります。

    $ argocd app sync openshift-gitops/app-cluster-configs
  5. アプリケーションをリスト表示して、アプリケーションのステータスが Healthy および Synced であることを確認します。

    $ argocd app list

1.11. GitOps CLI を使用したコアモードでのアプリケーションの同期

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

このサンプルワークフローでは、cluster ディレクトリーの内容を cluster-configs アプリケーションに対して再帰的に同期するように Argo CD を設定するプロセスを説明します。このディレクトリーは、OpenShift Container Platform クラスター設定とクラスター上の spring-petclinic namespace を定義します。

前提条件

  • 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. アプリケーションは none sync ポリシーを使用して設定されているため、同期操作を手動でトリガーする必要があります。

    $ argocd app sync --core openshift-gitops/app-cluster-configs
  6. アプリケーションをリスト表示して、アプリケーションのステータスが Healthy および Synced であることを確認します。

    $ argocd app list --core

1.12. クラスター設定用の組み込みのアクセス許可

デフォルトでは、Argo CD インスタンスには、クラスター Operator、オプションの OLM オペレーター、およびユーザー管理など、特定のクラスタースコープのリソースを管理する権限があります。

注記
  • Argo CD には cluster-admin 権限がありません。
  • GitOps Operator に管理される任意の Argo CD インスタンスにバインドされた権限を拡張できます。ただし、GitOps Operator に作成されたロールやクラスターロールなどの権限リソースは、Operator により初期状態に戻される可能性があるため、変更しないでください。代わりに、専用のロールとクラスターロールオブジェクトを作成し、それらをアプリケーションコントローラーが使用する適切なサービスアカウントにバインドします。

Argo CD インスタンスの権限:

リソース説明

リソースグループ

ユーザーまたは管理者の設定

operators.coreos.com

OLM によって管理されるオプションの Operator

user.openshift.io , rbac.authorization.k8s.io

グループ、ユーザー、およびそれらの権限

config.openshift.io

クラスター全体のビルド設定、レジストリー設定、およびスケジューラーポリシーを設定するために使用される CVO によって管理されるコントロールプレーン Operator

storage.k8s.io

ストレージ

console.openshift.io

コンソールのカスタマイズ

1.13. クラスター設定のアクセス許可を追加する

Argo CD インスタンスにアクセス許可を付与して、クラスター設定を管理できます。追加のアクセス許可を持つクラスターロールを作成し、新しいクラスターロールバインディングを作成して、クラスターロールをサービスアカウントに関連付けます。

前提条件

  • cluster-admin 権限で OpenShift Container Platform クラスターにアクセスでき、Web コンソールにログインしている。
  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。

手順

  1. Web コンソールで、User ManagementRolesCreate Role を選択します。以下の ClusterRole YAML テンプレートを使用してルールを追加し、追加の権限を指定します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: secrets-cluster-role
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["*"]
  2. Create をクリックしてクラスターロールを追加します。
  3. クラスターのロールバインディングを作成するには、User ManagementRole BindingsCreate Binding を選択します。
  4. Project リストから All Projects を選択します。
  5. Create binding をクリックします。
  6. Binding typeCluster-wide role binding (ClusterRoleBinding) として選択します。
  7. RoleBinding name の一意の値を入力します。
  8. ドロップダウンリストから、新しく作成したクラスターロールまたは既存のクラスターロールを選択します。
  9. SubjectServiceAccount として選択し、サブジェクトの namespace名前 を指定します。

    1. サブジェクトの namespace: openshift-gitops
    2. サブジェクトの名前: openshift-gitops-argocd-application-controller

      注記

      Subject name の値は、クラスターロールおよびクラスターロールバインディングを作成する GitOps コントロールプレーンのコンポーネントによって異なります。

  10. Create をクリックします。ClusterRoleBinding オブジェクトの YAML ファイルは以下のとおりです。

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: cluster-role-binding
    subjects:
      - kind: ServiceAccount
        name: openshift-gitops-argocd-application-controller
        namespace: openshift-gitops
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: secrets-cluster-role

1.14. Red Hat OpenShift GitOps を使用した OLM Operator のインストール

クラスター設定の Red Hat OpenShift GitOps は、特定のクラスタースコープのリソースを管理し、クラスター Operator または namespace スコープの OLM Operator のインストールを処理します。

クラスター管理者として、Tekton などの OLM Operator をインストールする必要がある場合を考えてみましょう。OpenShift Container Platform Web コンソールを使用して Tekton Operator を手動でインストールするか、OpenShift CLI を使用して Tekton サブスクリプションと Tekton Operator グループをクラスターに手動でインストールします。

Red Hat OpenShift GitOps は、Kubernetes リソースを Git リポジトリーに配置します。クラスター管理者は、Red Hat OpenShift GitOps を使用して、手動手順を行わずに他の OLM Operator のインストールを管理および自動化できます。たとえば、Red Hat OpenShift GitOps を使用して Tekton サブスクリプションを Git リポジトリーに配置すると、Red Hat OpenShift GitOps はこの Tekton サブスクリプションを Git リポジトリーから自動的に取得し、クラスターに Tekton Operator をインストールします。

1.14.1. クラスタースコープの Operator のインストール

Operator Lifecycle Manager (OLM) は、クラスタースコープの Operator の openshift-operators namespace 内のデフォルトの global-operators Operator グループを使用します。したがって、Gitops リポジトリーで OperatorGroup リソースを管理する必要はありません。ただし、namespace スコープの Operator の場合は、その namespace で OperatorGroup リソースを管理する必要があります。

クラスタースコープの Operator をインストールするには、必要な Operator の Subscription リソースを作成し、Git リポジトリーに配置します。

例: Grafana Operator サブスクリプション

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: grafana
spec:
  channel: v4
  installPlanApproval: Automatic
  name: grafana-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace

1.14.2. namespace スコープの Operator のインストール

namespace スコープの Operator をインストールするには、必要な Operator の Subscription リソースと OperatorGroup リソースを作成して Git リポジトリーに配置します。

例: Ansible Automation Platform リソースオペレーター

# ...
apiVersion: v1
kind: Namespace
metadata:
  labels:
    openshift.io/cluster-monitoring: "true"
  name: ansible-automation-platform
# ...
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: ansible-automation-platform-operator
  namespace: ansible-automation-platform
spec:
  targetNamespaces:
    - ansible-automation-platform
# ...
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: ansible-automation-platform
  namespace: ansible-automation-platform
spec:
  channel: patch-me
  installPlanApproval: Automatic
  name: ansible-automation-platform-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
# ...

重要

Red Hat OpenShift GitOps を使用して複数の Operator をデプロイする場合は、対応する namespace に Operator グループを 1 つだけ作成する必要があります。1 つの namespace に複数の Operator グループが存在する場合、その namespace で作成された CSV はすべて、TooManyOperatorGroups の理由で failure 状態に移行します。対応する namespace 内の Operator グループの数が 1 に達すると、以前の failure 状態の CSV はすべて pending 状態に移行します。Operator のインストールを完了するには、保留中のインストールプランを手動で承認する必要があります。

1.15. Red Hat OpenShift GitOps を使用した respectRBAC の設定

Argo CD の respectRBAC 機能は、Argo CD がクラスター上のリソースを監視する方法を制御します。デフォルトでは、Argo CD はクラスタースコープでクラスター上のすべての Kubernetes リソース (CRD) を監視しようとします。respectRBAC 機能を使用すると、リソースの除外を手動で設定することなく、コントローラー RBAC のみを使用して ArgoCD コントローラーによる特定のリソースの検出や同期を制限できます。

この機能を有効にするには、Argo CD リソースで .spec.controller.respectRBAC キーを設定します。このキーを設定すると、コントローラーはリストまたはアクセスできないリソースの監視を自動的に停止します。たとえば、こうすることで、Argo CD クラスターロールにより、Argo CD が OpenShift Routes を監視できなくなるといった状況が回避されます。監視できなくなると、同期中にリソースの監視ができない旨のエラーが発生してしまいます。

コマンドラインインターフェイス (CLI) または Web コンソールを使用して Argo CD インスタンスを作成し、respectRBAC 機能を有効にできます。

前提条件

Subscription リソースで namespace を作成して更新していることを確認し、Subscription がクラスタースコープの Argo CD インスタンスをホストできるようにします。詳細は、「Argo CD インスタンスを使用してクラスタースコープのリソースの管理」を参照してください。

1.15.1. CLI を使用した respectRBAC の設定

CLI を使用して respectRBAC 機能を設定できます。

手順

  1. respectRBAC 機能を設定するには、YAML オブジェクトファイル (例: argo-cd-resource.yaml) を作成します。

    respectRBAC を作成するための ArgoCD YAML の例

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: example-argocd 1
    spec:
      controller:
        respectRBAC: strict 2

    1
    Argo CD インスタンスの名前を指定します。
    2
    ArgoCD リソースの .spec.controller.respectRBAC キーの値を normal または strict として指定できます。リソースの表示は軽量な操作であるため、精度と速度のバランスをとるために値を normal に設定することを検討してください。値を normal に設定したときに、Argo CD がリソースにアクセスできないことを示すエラーを報告する場合は、値を strict に設定します。strict に設定すると、サーバーへの API 呼び出しの数が増え、Argo CD が RBAC リソースの追加検証を実行して権限を決定するため、normal よりも正確になります。
  2. 次のコマンドを実行して、YAML ファイルに変更を適用します。

    $ oc apply -f argocd-resource.yaml -n argo-cd-instance 1
    1
    ArgoCD リソースを含む YAML ファイルの名前と、ArgoCD をホストする namespace を指定します。
  3. 次のコマンドを実行して、.status.phase フィールドのステータスが Available であることを確認します。

    $ oc get argocd <argocd_instance_name> -n <argocd_namespace> -o jsonpath='{.status.phase}' 1
    1
    <argocd_instance_name> は、Argo CD インスタンスの名前に置き換えます (例: example-argocd)。
  4. ConfigMap リソースの resource.respectRBAC パラメーターが正常に更新されていることを確認します。

    1. argocd-cm config map の内容を取得するには、次のコマンドを実行します。

      $ oc get cm argocd-cm -n <argocd_namespace> -o yaml
    2. argocd-cm ConfigMapresource.respectRBAC パラメーターが含まれていることを確認し、その値が strict または normal に設定されていることを確認します。

1.15.2. Web コンソールを使用した respectRBAC の設定

Web コンソールで respectRBAC を設定できます。

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. Web コンソールの Administrator パースペクティブで、OperatorsInstalled Operators の順にクリックします。
  3. Project リストからユーザー定義の Argo CD インスタンスをインストールするプロジェクトを作成または選択します。
  4. インストールされている Operators リストから Red Hat OpenShift GitOps を選択し、Argo CD タブをクリックします。
  5. Argo CD タブで respectRBAC パラメーターを設定します。

    spec:
      controller:
        respectRBAC: strict
  6. Create をクリックします。

    インストールが正常に完了したら、Argo CD インスタンスが Argo CD タブに一覧表示され、StatusAvailable であることを確認します。

  7. Argo CD インスタンスの作成後、次の手順を実行して、ConfigMap リソースの resource.respectRBAC パラメーターが正常に更新されていることを確認します。

    1. Administrator パースペクティブで、WorkloadConfigMaps に移動します。
    2. Project オプションで、Argo CD namespace を選択します。
    3. argocd-cm config map を選択します。
    4. YAML タブを選択して、resource.respectRBAC パラメーターを表示します。

1.16. 関連情報

第2章 クラスタースコープのインスタンスのユーザー定義のクラスターロールを作成して権限をカスタマイズする

デフォルトのクラスタースコープのインスタンスの場合、Red Hat OpenShift GitOps Operator は特定のクラスタースコープのリソース管理向けの権限を追加で付与します。したがって、クラスター管理者として、Argo CD をクラスタースコープのインスタンスとしてデプロイすると、Operator は GitOps コントロールプレーンコンポーネントに対して追加のクラスターロールとクラスターロールバインディングを作成します。これらのクラスターロールとクラスターロールバインディングは、Argo CD がクラスターレベルで動作させるのに必要な追加の権限を提供します。

クラスタースコープのインスタンスに Operator によって付与されたすべての権限を付与せず、クラスター全体のリソースへの権限を追加または削除する場合は、まずクラスタースコープのインスタンスのデフォルトのクラスターロールの作成を無効にする必要があります。次に、次のクラスタースコープのインスタンスの権限をカスタマイズできます。

  • デフォルトの ArgoCD インスタンス (デフォルトのクラスタースコープインスタンス)
  • ユーザー定義のクラスタースコープ Argo CD インスタンス

このガイドでは、ユーザー定義のクラスタースコープ Argo CD インスタンスを作成し、クラスターのカスタム設定を含む定義済みの namespace に Argo CD アプリケーションをデプロイし、クラスタースコープインスタンスのデフォルトのクラスターロールの作成を無効にし、GitOps コントロールプレーンコンポーネントの新しいクラスターロールとクラスターロールバインディングを作成してユーザー定義のクラスタースコープインスタンスの権限をカスタマイズする手順を、例を交えて説明します。

注記

開発者として、Argo CD アプリケーションを作成し、クラスター全体のリソースをデプロイする場合は、クラスター管理者がそれらに必要な権限を付与していることを確認してください。

それ以外の場合は、Argo CD の調整後に、アプリケーションの Status フィールドに次の例のような認証エラーメッセージが表示されます。

認証エラーメッセージの例

persistentvolumes is forbidden: User "system:serviceaccount:gitops-demo:argocd-argocd-application-controller" cannot create resource "persistentvolumes" in API group "" at the cluster scope.

2.1. 前提条件

  • OpenShift Container Platform クラスターに Red Hat OpenShift GitOps 1.13.0 以降のバージョンがインストールされている。
  • OpenShift CLI (oc) がインストールされている。
  • Red Hat OpenShift GitOps argocd CLI がインストールされている。
  • クラスタースコープの Argo CD インスタンス を定義済みの namespace にインストールしている。たとえば、spring-petclinic namespace です。
  • ユーザー定義のクラスタースコープインスタンスが、次のコンポーネントのクラスターロールとクラスターロールバインディングを使用して設定されていることを検証している。

    • Argo CD Application Controller
    • Argo CD サーバー
    • Argo CD ApplicationSet Controller (ApplicationSet Controller 作成される)
  • spring-petclinic namespace の customclusterrole パス を使用して cluster-configs Argo CD アプリケーション をデプロイし、test-gitops-ns namespace と test-gitops-pv 永続ボリュームリソースを作成している。

    注記

    cluster-configs Argo CD アプリケーションは、次のパラメーターが設定されたユーザー定義のクラスタースコープインスタンスによって管理される必要があります。

    • selfHeal フィールドの値が true に設定されている
    • syncPolicy フィールドの値が automated に設定されている
    • Label フィールドが app.kubernetes.io/part-of=argocd の値に設定されている
    • 定義した namespace 内の Argo CD インスタンスが namespace を管理できるように、Label フィールドが argocd.argoproj.io/managed-by=<user_defined_namespace> 値に設定されている
    • ラベル フィールドが app.kubernetes.io/name=<user_defined_argocd_instance> 値に設定されている

2.2. クラスタースコープのインスタンスのデフォルトクラスターロール作成の無効化

必要に応じてクラスター全体のリソースへの権限を追加または削除するには、Argo CD カスタムリソース (CR) の YAML ファイルを編集して、クラスタースコープインスタンスのデフォルトのクラスターロールの作成を無効にする必要があります。

手順

  1. Argo CD CR で、.spec.defaultClusterScopedRoleDisabled フィールドの値を true に設定します。

    Argo CD CR の例

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: example 1
      namespace: spring-petclinic 2
    # ...
    spec:
      defaultClusterScopedRoleDisabled: true 3
    # ...

    1
    クラスタースコープのインスタンスの名前。
    2
    クラスタースコープのインスタンスを実行する namespace。
    3
    クラスタースコープインスタンスのデフォルトのクラスターロールの作成を無効にするフラグ値。Operator がクラスタースコープインスタンスのデフォルトのクラスターロールとクラスターロールバインディングを再作成するようにする場合は、フィールド値を false に設定します。

    出力例

    argocd.argoproj.io/example configured

  2. 次のコマンドを実行して、Red Hat OpenShift GitOps Operator が GitOps コントロールプレーンコンポーネントのデフォルトのクラスターロールとクラスターロールバインディングを削除したことを確認します。

    $ oc get ClusterRoles/<argocd_name>-<argocd_namespace>-<control_plane_component>
    $ oc get ClusterRoleBindings/<argocd_name>-<argocd_namespace>-<control_plane_component>

    出力例

    No resources found

    クラスタースコープのインスタンスのデフォルトのクラスターロールおよびクラスターロールバインディングは作成されません。クラスター管理者は、GitOps コントロールプレーンコンポーネントの新しいクラスターロールとクラスターロールバインディングを作成することで、クラスタースコープのインスタンスのアクセス許可を作成およびカスタマイズできるようになりました。

2.3. クラスタースコープのインスタンスの権限のカスタマイズ

クラスター管理者は、GitOps コントロールプレーンコンポーネントの新しいクラスターロールとクラスターロールバインディングを作成して、クラスタースコープのインスタンスの権限をカスタマイズする必要があります。

たとえば、以下の手順ではユーザー定義のクラスタースコープのインスタンスのみにフォーカスします。

手順

  1. Web コンソールの Administrator パースペクティブを開き、User ManagementRolesCreate Role に移動します。
  2. 以下の ClusterRole YAML テンプレートを使用してルールを追加し、追加の権限を指定します。

    クラスターロール YAML テンプレートの例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: example-spring-petclinic-argocd-application-controller 1
    rules:
      - verbs:
          - get
          - list
          - watch
        apiGroups:
          - '*'
        resources:
          - '*'
      - verbs:
          - '*'
        apiGroups:
          - ''
        resources: 2
          - namespaces
          - persistentvolumes

    1
    <argocd_name>-<argocd_namespace>-<control_plane_component> の命名規則に従ったクラスターロールの名前。
    2
    クラスターレベルで権限を付与するリソース。
  3. Create をクリックしてクラスターロールを追加します。
  4. 次の手順を実行して、権限をカスタマイズするコントロールプレーンコンポーネントで使用されるサービスアカウントを見つけます。

    1. WorkloadsPods に移動します。
    2. Project リストから、ユーザー定義のクラスタースコープのインスタンスがインストールされているプロジェクトを選択します。
    3. コントロールプレーンコンポーネントの Pod をクリックし、YAML タブに移動します。
    4. spec.ServiceAccount フィールドを見つけ、サービスアカウントをメモします。
  5. User ManagementRoleBindingsCreate binding に移動します。
  6. Create binding をクリックします。
  7. Binding typeCluster-wide role binding (ClusterRoleBinding) として選択します。
  8. <argocd_name>-<argocd_namespace>-<control_plane_component> 命名規則に従って、RoleBinding name の一意の値を入力します。
  9. Role name のドロップダウンリストから新たに作成されたクラスターロールを選択します。
  10. SubjectServiceAccount として選択し、サブジェクトの namespace名前 を指定します。

    1. Subject namespace: spring-petclinic
    2. Subject name: example-argocd-application-controller

      注記

      Subject name は、設定する値が、権限をカスタマイズするコントロールプレーンコンポーネントの spec.ServiceAccount フィールドの値と同じであることを確認します。

  11. Create をクリックします。

    コントロールプレーンコンポーネントのサービスアカウントと namespace に必要な権限が作成されました。ClusterRoleBinding オブジェクトの YAML ファイルは以下の例のようになります。

    クラスターロールバインディングの YAML ファイルの例

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: example-spring-petclinic-argocd-application-controller
    subjects:
      - kind: ServiceAccount
        name: example-argocd-application-controller
        namespace: spring-petclinic
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: example-spring-petclinic-argocd-application-controller

2.4. 関連情報

第3章 集約されたクラスターロールの作成による権限のカスタマイズ

Argo CD Application Controller のデフォルトのクラスターロールには、特定のハードコードされた権限セットがあります。このクラスターロールは Red Hat OpenShift GitOps Operator によって管理されるため、変更できません。クラスター管理者は、以下のいずれかの方法で権限をカスタマイズできます。

3.1. 集約されたクラスターロール

集約されたクラスターロールを使用すると、新しいクラスターロールを最初から作成して権限を定義する必要がなくなります。代わりに、複数のクラスターロールを 1 つに結合できます。

Red Hat OpenShift GitOps 1.14 以降では、クラスター管理者は集約されたクラスターロールを使用して、ユーザーが Argo CD Application Controller のユーザー定義の権限を簡単に追加できるようにすることが可能です。

重要
  • 集約されたクラスターロール機能はオプションであり、デフォルトでは無効になっています。集約されたクラスターロールは、クラスタースコープの Argo CD インスタンスの Argo CD Application Controller コンポーネントに対してのみ作成できます。
  • Argo CD カスタムリソース (CR) から aggregatedClusterRoles フィールドを削除しても、ユーザー定義のクラスターロールは削除されません。CLI または UI を使用して、ユーザー定義のクラスターロールを手動で削除する必要があります。

3.2. 前提条件

  • 集約されたクラスターロール を理解している。
  • OpenShift Container Platform クラスターに Red Hat OpenShift GitOps がインストールされている。
  • OpenShift CLI (oc) がインストールされている。
  • Red Hat OpenShift GitOps argocd CLI がインストールされている。
  • クラスタースコープの Argo CD インスタンス を定義済みの namespace にインストールしている。
  • ユーザー定義のクラスタースコープインスタンスが、次のコンポーネントのクラスターロールとクラスターロールバインディングを使用して設定されていることを検証している。

    • Argo CD Application Controller
    • Argo CD サーバー
    • Argo CD ApplicationSet Controller (ApplicationSet Controller が作成されている場合)
  • クラスタースコープインスタンスの デフォルトのクラスターロールの作成が無効化されている

3.3. 集約されたクラスターロールの作成

集約されたクラスターロールを作成するプロセスには、次の手順が含まれます。

  1. 集約されたクラスターロールの作成を有効にする
  2. ユーザー定義のクラスターロールを作成し、Application Controller のユーザー定義の権限を設定する

3.3.1. 集約されたクラスターロールの作成を有効にする

Argo CD カスタムリソース (CR) で .spec.aggregatedClusterRoles フィールドの値を true に設定して、集約されたクラスターロールの作成を有効化できます。集約されたクラスターロールの作成を有効にすると、Red Hat OpenShift GitOps Operator は次のアクションを実行します。

  • デフォルトで事前定義された aggregationRule フィールドを含む <argocd_name>-<argocd_namespace>-argocd-application-controller 集約クラスターロールを作成します。
  • 対応するクラスターロールバインディングを作成し、管理します。
  • アプリケーションコントローラーの view および admin クラスターロールを作成および管理し、集約されたクラスターロールにユーザー定義の権限を追加します。

3.3.2. ユーザー定義のクラスターロールを作成してユーザー定義の権限を設定する

<argocd_name>-<argocd_namespace>-argocd-application-controller-admin クラスターロールと集約クラスターロールにユーザー定義の権限を設定するには、argocd/aggregate-to-admin: 'true' ラベルを持つ 1 つ以上のユーザー定義クラスターロールを作成し、Application Controller のユーザー定義の権限を設定する必要があります。

注記
  • 集約されたクラスターロールは <argocd_name>-<argocd_namespace>-argocd-application-controller-admin および <argocd_name>-<argocd_namespace>-argocd-application-controller-view クラスターロールから権限を継承します。
  • <argocd_name>-<argocd_namespace>-argocd-application-controller-admin クラスターロールは、ユーザー定義のクラスターロールから権限を継承します。

3.4. 集約されたクラスターロールの作成を有効にする

クラスタースコープの Argo CD インスタンスの Argo CD Application Controller コンポーネントの集約されたクラスターロールの作成を有効にするには、Argo CD カスタムリソース (CR) の YAML ファイルを編集して、対応するフィールドを設定する必要があります。

手順

  1. Argo CD CR で、.spec.aggregatedClusterRoles フィールドの値を true に設定します。

    Argo CD CR の例

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: example 1
      namespace: spring-petclinic 2
    # ...
    spec:
      aggregatedClusterRoles: true 3
    # ...

    1
    クラスタースコープのインスタンスの名前。
    2
    クラスタースコープのインスタンスを実行する namespace。
    3
    値を true に設定すると、集約されたクラスターロールの作成が有効になります。集約されたクラスターロールの作成を有効にしない場合は、この行を含めないか、値を false に設定します。

    出力例

    argocd.argoproj.io/example configured

  2. 次のコマンドを実行して、クラスタースコープの Argo CD インスタンスの Status フィールドに Phase: Available と表示されていることを確認します。

    $ oc describe argocd.argoproj.io/example -n spring-petclinic

    出力例

    Name:         example
    Namespace:    spring-petclinic
    Labels:       <none>
    Annotations:  <none>
    API Version:  argoproj.io/v1beta1
    Kind:         ArgoCD
    Metadata:
      Creation Timestamp:  2024-08-14T08:20:53Z
      Finalizers:
        argoproj.io/finalizer
      Generation:        3
      Resource Version:  60437
      UID:               57940e54-d60b-4c1a-bc4a-85c81c63ab69
    Spec:
      Aggregated Cluster Roles:  true
    ...
    Status:
      Application Controller:      Running
      Application Set Controller:  Unknown
      Phase:                       Available 1
      Redis:                       Running
      Repo:                        Running
      Server:                      Running
      Sso:                         Unknown
    Events:                        <none>

    1
    Available ステータスは、クラスタースコープの Argo CD インスタンスが正常で使用可能であることを示します。
    注記

    Red Hat OpenShift GitOps Operator は、次のデフォルトのクラスターロールを作成し、管理します。

    • <argocd_name>-<argocd_namespace>-argocd-application-controller 集約クラスターロール
    • <argocd_name>-<argocd_namespace>-argocd-application-controller-view
    • <argocd_name>-<argocd_namespace>-argocd-application-controller-admin
  3. 次のコマンドを実行して、Operator が Argo CD Application Controller と Argo CD サーバーコンポーネントのデフォルトのクラスターロールとクラスターロールバインディングを作成したことを確認します。

    $ oc get ClusterRoles -l app.kubernetes.io/part-of=argocd

    出力例

    NAME                                                           CREATED AT
    example-spring-petclinic-argocd-application-controller         2024-08-14T08:20:58Z
    example-spring-petclinic-argocd-application-controller-admin   2024-08-14T09:08:38Z
    example-spring-petclinic-argocd-application-controller-view    2024-08-14T09:08:38Z
    example-spring-petclinic-argocd-server                         2024-08-14T08:20:59Z

    $ oc get ClusterRoleBindings -l app.kubernetes.io/part-of=argocd

    出力例

    NAME                                                     ROLE                                                                 AGE
    example-spring-petclinic-argocd-application-controller   ClusterRole/example-spring-petclinic-argocd-application-controller   54m
    example-spring-petclinic-argocd-server                   ClusterRole/example-spring-petclinic-argocd-server                   54m

    view および admin クラスターロールのクラスターロールバインディングは作成されません。これは、view および admin クラスターロールは集約されたクラスターロールに権限を追加するだけで、Argo CD Application Controller への権限を直接設定しないためです。

    ヒント

    または、OpenShift Container Platform Web コンソールを使用して、Administrator パースペクティブから確認することもできます。User ManagementRoles および User ManagementRoleBindings に移動します。app.kubernetes.io/part-of:argocd ラベルの付いたクラスターロールとクラスターロールバインディングを検索できます。

  4. 次のコマンドを実行して、作成されたロールの出力の権限をチェックして、集約されたクラスターロールが作成されたことを確認します。

    $ oc get ClusterRole/<cluster_role_name> -o yaml 1
    1
    <cluster_role_name> は、作成したロールの名前に置き換えます。

    集約されたクラスターロールの出力例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
        rbac.authorization.kubernetes.io/autoupdate: "true"
      creationTimestamp: "2024-08-14T08:20:58Z"
      labels:
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
      name: example-spring-petclinic-argocd-application-controller 1
      resourceVersion: "78640"
      uid: aeeb2ef5-b531-4fe3-a61a-b5ad8dd8ca6e
    aggregationRule: 2
      clusterRoleSelectors:
      - matchLabels:
          app.kubernetes.io/managed-by: spring-petclinic
          argocd/aggregate-to-controller: "true"
    rules: [] 3

    1
    集約されたクラスターロールの名前。
    2
    定義済みのラベルのリストは、集約されたクラスターロールが他のユーザー定義のクラスターロールから権限を継承できることを示します。
    3
    事前定義された権限は設定されません。ただし、Operator が <argocd_name>-<argocd_namespace>-argocd-application-controller-view クラスターロールをすぐに作成すると、対応する定義済み view 権限が集約されたクラスターロールに追加されます。

    view クラスターロールの出力例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
      creationTimestamp: "2024-08-14T09:59:14Z"
      labels: 1
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
        argocd/aggregate-to-controller: "true"
      name: example-spring-petclinic-argocd-application-controller-view 2
      resourceVersion: "78639"
      uid: 068b8867-7a0c-4af3-a17a-0560a00eba41
    rules: 3
    - apiGroups:
      - '*'
      resources:
      - '*'
      verbs:
      - get
      - list
      - watch
    - nonResourceURLs:
      - '*'
      verbs:
      - get
      - list

    1
    ラベルは、既存の集約されたクラスターロールの定義済みリストと一致します。
    2
    view クラスターロールの名前。
    3
    事前定義された view 権限。これらの権限は、既存の集約されたクラスターロールに追加されます。

    admin クラスターロールの出力例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
        rbac.authorization.kubernetes.io/autoupdate: "true"
      creationTimestamp: "2024-08-14T09:59:15Z"
      labels: 1
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
        argocd/aggregate-to-controller: "true"
      name: example-spring-petclinic-argocd-application-controller-admin 2
      resourceVersion: "78642"
      uid: e2d35b6f-0832-4993-8b24-915a725454f9
    aggregationRule: 3
      clusterRoleSelectors:
      - matchLabels:
          app.kubernetes.io/managed-by: spring-petclinic
          argocd/aggregate-to-admin: "true"
    rules: null 4

    1
    ラベルは、既存の集約されたクラスターロールの定義済みリストと一致します。
    2
    admin クラスターロールの名前。
    3
    定義済みのラベルリストは、既存の <argocd_name>-<argocd_namespace>-argocd-application-controller-admin クラスターロールが他のユーザー定義のクラスターロールから権限を継承できることを示しています。
    4
    1 つ以上のユーザー定義のクラスターロールにまだ権限が定義されていないことを指定します。
    ヒント

    または、OpenShift Container Platform Web コンソールを使用して、Administrator パースペクティブから確認することもできます。User ManagementRoles に移動し、Filter オプションを使用して Cluster-wide Roles を選択し、集約されたクラスターロール、view、および admin クラスターロールを検索できます。詳細と設定を確認するには、クラスターロールを作成する必要があります。

    クラスター管理者は、1 つ以上のユーザー定義のクラスターロールを作成し、Argo CD Application Controller のユーザー定義のアクセス許可を設定できるようになりました。

3.5. ユーザー定義のクラスターロールを作成し、Application Controller のユーザー定義の権限を設定する

クラスター管理者が、集約されたクラスターロールにユーザー定義のアクセス許可を追加するには、1 つ以上のユーザー定義のクラスターロールを作成し、クラスタースコープの Argo CD インスタンスの Argo CD Application Controller コンポーネントに対してユーザー定義のアクセス権限を設定する必要があります。

前提条件

  • クラスタースコープの Argo CD インスタンスの Argo CD Application Controller コンポーネントの集約されたクラスターロールの作成を有効にしている。
  • Red Hat OpenShift GitOps Operator によって作成および管理される次のデフォルトのクラスターロールがある。

    • <argocd_name>-<argocd_namespace>-argocd-application-controller は、定義済みの aggregationRule フィールドを持つ集約クラスターロールです。
    • 事前定義された view 権限を持つ <argocd_name>-<argocd_namespace>-argocd-application-controller-view
    • 事前定義された権限のない <argocd_name>-<argocd_namespace>-argocd-application-controller-admin

手順

  1. 次のコマンドを使用して、必要なラベルと権限を持つ新しいクラスターロールを作成します。

    $ oc apply -n <namespace> -f <cluster_role_name>.yaml

    ここでは

    <namespace>
    定義した namespace の名前を指定します。
    <cluster_role_name>

    定義済みのクラスターロール YAML ファイルの名前を指定します。

    ユーザー定義のクラスターロール YAML の例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: user-application-controller 1
      labels: 2
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
        argocd/aggregate-to-admin: 'true'
    rules: 3
      - verbs:
          - '*'
        apiGroups:
          - ''
        resources:
          - namespaces
          - persistentvolumeclaims
          - persistentvolumes
          - configmaps
      - verbs:
          - '*'
        apiGroups:
          - compliance.openshift.io
        resources:
          - scansettingbindings

    1
    ユーザー定義のクラスターロールの名前。
    2
    ラベルは、既存の <argocd_name>-<argocd_namespace>-argocd-application-controller-admin クラスターロールの定義済みリストと一致します。
    3
    <argocd_name>-<argocd_namespace>-argocd-application-controller-admin クラスターロールは、ユーザー定義のクラスターロールから権限を継承します。
    ヒント

    または、Web コンソールを使用して、Administrator パースペクティブからユーザー定義のクラスターロールを作成することもできます。User ManagementRolesCreate Role にアクセスし、前述の YAML テンプレートを使用して権限を追加し、Create をクリックします。

    出力例

    clusterrole.rbac.authorization.k8s.io/user-application-controller created

    ユーザー定義のクラスターロールが作成されます。

  2. 次のコマンドを実行して、<argocd_name>-<argocd_namespace>-argocd-application-controller-admin クラスターロールがユーザー定義のクラスターロールから権限を継承していることを確認します。

    $ oc get ClusterRole/<argocd_name>-<argocd_namespace>-argocd-application-controller-admin -o yaml

    ここでは

    <argocd_name>
    ユーザー定義のクラスタースコープ Argo CD インスタンスの名前を指定します。
    <argocd_namespace>

    Argo CD がインストールされている namespace を指定します。

    出力例

    aggregationRule:
      clusterRoleSelectors:
      - matchLabels:
          app.kubernetes.io/managed-by: spring-petclinic
          argocd/aggregate-to-admin: "true"
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
      creationTimestamp: "2024-08-14T09:59:15Z"
      labels:
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
        argocd/aggregate-to-controller: "true"
      name: example-spring-petclinic-argocd-application-controller-admin
      resourceVersion: "79202"
      uid: e2d35b6f-0832-4993-8b24-915a725454f9
    rules:
    - apiGroups:
      - ""
      resources:
      - namespaces
      - persistentvolumeclaims
      - persistentvolumes
      - configmaps
      verbs:
      - '*'
    - apiGroups:
      - compliance.openshift.io
      resources:
      - scansettingbindings
      verbs:
      - '*'

    ヒント

    または、OpenShift Container Platform Web コンソールを使用して、Administrator パースペクティブから確認することもできます。User ManagementRoles に移動し、Filter オプションを使用して Cluster-wide Roles を選択し、<argocd_name>-<argocd_namespace>-argocd-application-controller-admin クラスターロールを検索します。詳細と設定を確認するには、クラスターロールを作成する必要があります。

  3. 次のコマンドを実行して、<argocd_name>-<argocd_namespace>-argocd-application-controller 集約クラスターロールが <argocd_name>-<argocd_namespace>-argocd-application-controller-admin および <argocd_name>-<argocd_namespace>-argocd-application-controller-view クラスターロールから権限を継承していることを確認します。

    $ oc get ClusterRole/<argocd_name>-<argocd_namespace>-argocd-application-controller -o yaml

    ここでは

    <argocd_name>
    ユーザー定義のクラスタースコープ Argo CD インスタンスの名前を指定します。
    <argocd_namespace>

    Argo CD がインストールされている namespace を指定します。

    集約されたクラスターロールの出力例

    aggregationRule:
      clusterRoleSelectors:
      - matchLabels:
          app.kubernetes.io/managed-by: spring-petclinic
          argocd/aggregate-to-controller: "true"
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
        rbac.authorization.kubernetes.io/autoupdate: "true"
      creationTimestamp: "2024-08-14T08:20:58Z"
      labels:
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
      name: example-spring-petclinic-argocd-application-controller
      resourceVersion: "79203"
      uid: aeeb2ef5-b531-4fe3-a61a-b5ad8dd8ca6e
    rules:
    - apiGroups:
      - ""
      resources:
      - namespaces
      - persistentvolumeclaims
      - persistentvolumes
      - configmaps
      verbs:
      - '*'
    - apiGroups:
      - compliance.openshift.io
      resources:
      - scansettingbindings
      verbs:
      - '*'
    - apiGroups:
      - '*'
      resources:
      - '*'
      verbs:
      - get
      - list
      - watch
    - nonResourceURLs:
      - '*'
      verbs:
      - get
      - list

    ヒント

    または、OpenShift Container Platform Web コンソールを使用して、Administrator パースペクティブから確認することもできます。User ManagementRoles に移動し、Filter オプションを使用して Cluster-wide Roles を選択し、集約されたクラスターロールを検索できます。詳細と設定を確認するには、クラスターロールを作成する必要があります。

3.6. 関連情報

第4章 Argo CD Application Controller レプリカ間でのクラスターのシャーディング

コントローラーが管理しているクラスターが多すぎてメモリーを大量に使用している場合は、複数の Argo CD Application Controller レプリカ間でクラスターをシャードできます。

4.1. ラウンドロビンシャーディングアルゴリズムの有効化

重要

round-robin シャーディングアルゴリズムはテクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

デフォルトでは、Argo CD Application Controller は、不均一な legacy のハッシュベースのシャーディングアルゴリズムを使用してクラスターをシャードに割り当てます。これにより、クラスターの分散が不均等になる可能性があります。round-robin シャーディングアルゴリズムを有効にして、すべてのシャードにわたってより均等なクラスター分散を実現できます。

Red Hat OpenShift GitOps で round-robin シャーディングアルゴリズムを使用すると、次の利点があります。

  • よりバランスの取れたワークロード分散を確保する
  • シャードが過負荷になったり、十分に活用されなかったりすることを回避する
  • コンピューティングリソースの効率を最適化する
  • ボトルネックのリスクを軽減する
  • Argo CD システムの全体的なパフォーマンスと信頼性を向上する

代替シャーディングアルゴリズムの導入により、特定の使用例に基づいてさらにカスタマイズできるようになります。デプロイメントのニーズに最も適したアルゴリズムを選択できるため、さまざまな運用シナリオでの柔軟性と適応性が向上します。

ヒント

GitOps で代替シャーディングアルゴリズムの利点を活用するには、デプロイ中にシャーディングを有効にすることが重要です。

4.1.1. Web コンソールでの round-robin シャーディングアルゴリズムの有効化

OpenShift Container Platform Web コンソールを使用して round-robin シャーディングアルゴリズムを有効にできます。

前提条件

  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • cluster-admin 権限でクラスターにアクセスできる。

手順

  1. Web コンソールの Administrator パースペクティブで、OperatorsInstalled Operators に移動します。
  2. インストールされている Operator から Red Hat OpenShift GitOps をクリックし、Argo CD タブに移動します。
  3. round-robin シャーディングアルゴリズムを有効にする Argo CD インスタンス (例: openshift-gitops) をクリックします。
  4. YAML タブをクリックし、以下の例のように YAML ファイルを編集します。

    ラウンドロビンシャーディングアルゴリズムが有効になっている Argo CD インスタンスの例

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: openshift-gitops
      namespace: openshift-gitops
    spec:
      controller:
        sharding:
          enabled: true 1
          replicas: 3 2
        env: 3
          - name: ARGOCD_CONTROLLER_SHARDING_ALGORITHM
            value: round-robin
        logLevel: debug 4

    1
    シャーディングを有効にするには、sharding.enabled パラメーターを true に設定します。
    2
    レプリカの数を必要な値 (例: 3) に設定します。
    3
    シャーディングアルゴリズムを round-robin に設定します。
    4
    各クラスターがどのシャードに接続されているかを確認できるように、ログレベルを debug に設定します。
  5. Save をクリックします。

    成功通知アラート openshift-gitops has been updated to version <version> が表示されます。

    注記

    デフォルトの openshift-gitops インスタンスを編集すると、Managed resource ダイアログボックスが表示されます。Save をもう一度クリックして、変更を確定します。

  6. 次の手順を実行して、シャーディングアルゴリズムとして round-robin を使用する設定で、シャーディングが有効になっていることを確認します。

    1. WorkloadsStatefulSets に移動します。
    2. Argo CD インスタンスをインストールしたネームスペースを Project ドロップダウンリストから選択します。
    3. <instance_name>-application-controller (例: openshift-gitops-application-controller) をクリックし、Pod タブに移動します。
    4. 作成された Application Controller Pod の数を確認します。これは、セットレプリカの数に対応している必要があります。
    5. 調べるコントローラー Pod をクリックし、Logs タブに移動して Pod ログを表示します。

      コントローラー Pod ログスニペットの例

      time="2023-12-13T09:05:34Z" level=info msg="ArgoCD Application Controller is starting" built="2023-12-01T19:21:49Z" commit=a3vd5c3df52943a6fff6c0rg181fth3248976299 namespace=openshift-gitops version=v2.9.2+c5ea5c4
      time="2023-12-13T09:05:34Z" level=info msg="Processing clusters from shard 1"
      time="2023-12-13T09:05:34Z" level=info msg="Using filter function:  round-robin" 1
      time="2023-12-13T09:05:34Z" level=info msg="Using filter function:  round-robin"
      time="2023-12-13T09:05:34Z" level=info msg="appResyncPeriod=3m0s, appHardResyncPeriod=0s"

      1
      "Using filter function: round-robin" メッセージを探します。
    6. 次の例に示すように、ログの Search フィールドで processed by shard を検索して、シャード間でのクラスターの分布が均一であることを確認します。

      重要

      これらのログを確認するには、ログレベルを debug に設定していることを確認してください。

      コントローラー Pod ログスニペットの例

      time="2023-12-13T09:05:34Z" level=debug msg="ClustersList has 3 items"
      time="2023-12-13T09:05:34Z" level=debug msg="Adding cluster with id= and name=in-cluster to cluster's map"
      time="2023-12-13T09:05:34Z" level=debug msg="Adding cluster with id=068d8b26-6rhi-4w23-jrf6-wjjfyw833n23 and name=in-cluster2 to cluster's map"
      time="2023-12-13T09:05:34Z" level=debug msg="Adding cluster with id=836d8b53-96k4-f68r-8wq0-sh72j22kl90w and name=in-cluster3 to cluster's map"
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id= will be processed by shard 0" 1
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=068d8b26-6rhi-4w23-jrf6-wjjfyw833n23 will be processed by shard 1" 2
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=836d8b53-96k4-f68r-8wq0-sh72j22kl90w will be processed by shard 2" 3

      1 2 3
      この例では、3 つのクラスターがシャード 0、シャード 1、およびシャード 2 に連続して接続されています。
      注記

      クラスターの数 "C" がシャードレプリカの数 "R" の倍数である場合は、各シャードに同じ数のクラスター "N" が割り当てられている必要があります。これは、"C" を "R" で割ったものに相当します。前の例では、3 つのクラスターと 3 つのレプリカを示しています。したがって、各シャードには 1 つのクラスターが割り当てられます。

4.1.2. CLI を使用したラウンドロビンシャーディングアルゴリズムの有効化

コマンドラインインターフェイスを使用して、round-robin シャーディングアルゴリズムを有効にできます。

前提条件

  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
  • cluster-admin 権限でクラスターにアクセスできる。

手順

  1. 以下のコマンドを実行して、シャード化を有効にし、レプリカの数を必要な値に設定します。

    $ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"sharding":{"enabled":true,"replicas":<value>}}}}' --type=merge

    出力例

    argocd.argoproj.io/<argocd_instance> patched

  2. 以下のコマンドを実行して、シャード化アルゴリズムを round-robin に設定します。

    $ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"env":[{"name":"ARGOCD_CONTROLLER_SHARDING_ALGORITHM","value":"round-robin"}]}}}' --type=merge

    出力例

    argocd.argoproj.io/<argocd_instance> patched

  3. 次のコマンドを実行して、Argo CD Application Controller Pod の数がセットされたレプリカの数と一致していることを確認します。

    $ oc get pods -l app.kubernetes.io/name=<argocd_instance>-application-controller -n <namespace>

    出力例

    NAME                                        READY   STATUS    RESTARTS   AGE
    <argocd_instance>-application-controller-0   1/1     Running   0          11s
    <argocd_instance>-application-controller-1   1/1     Running   0          32s
    <argocd_instance>-application-controller-2   1/1     Running   0          22s

  4. 次のコマンドを実行して、シャーディングアルゴリズムとして round-robin を使用する設定で、シャーディングが有効になっていることを確認します。

    $ oc logs <argocd_application_controller_pod> -n <namespace>

    出力の抜粋例

    time="2023-12-13T09:05:34Z" level=info msg="ArgoCD Application Controller is starting" built="2023-12-01T19:21:49Z" commit=a3vd5c3df52943a6fff6c0rg181fth3248976299 namespace=<namespace> version=v2.9.2+c5ea5c4
    time="2023-12-13T09:05:34Z" level=info msg="Processing clusters from shard 1"
    time="2023-12-13T09:05:34Z" level=info msg="Using filter function:  round-robin" 1
    time="2023-12-13T09:05:34Z" level=info msg="Using filter function:  round-robin"
    time="2023-12-13T09:05:34Z" level=info msg="appResyncPeriod=3m0s, appHardResyncPeriod=0s"

    1
    "Using filter function: round-robin" メッセージを探します。
  5. 次の手順を実行して、シャード間でクラスターが均等に分散されていることを確認します。

    1. 次のコマンドを実行して、ログレベルを debug に設定します。

      $ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"logLevel":"debug"}}}' --type=merge

      出力例

      argocd.argoproj.io/<argocd_instance> patched

    2. 次のコマンドを実行して、ログを表示し、processed by shard を検索して、各クラスターがどのシャードに接続されているかを確認します。

      $ oc logs <argocd_application_controller_pod> -n <namespace> | grep "processed by shard"

      出力の抜粋例

      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id= will be processed by shard 0" 1
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=068d8b26-6rhi-4w23-jrf6-wjjfyw833n23 will be processed by shard 1" 2
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=836d8b53-96k4-f68r-8wq0-sh72j22kl90w will be processed by shard 2" 3

      1 2 3
      この例では、3 つのクラスターがシャード 0、シャード 1、およびシャード 2 に連続して接続されています。
      注記

      クラスターの数 "C" がシャードレプリカの数 "R" の倍数である場合は、各シャードに同じ数のクラスター "N" が割り当てられている必要があります。これは、"C" を "R" で割ったものに相当します。前の例では、3 つのクラスターと 3 つのレプリカを示しています。したがって、各シャードには 1 つのクラスターが割り当てられます。

4.2. Argo CD Application Controller のシャードの動的スケーリングを有効にする手順

重要

シャードの動的スケーリングはテクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

デフォルトでは、Argo CD Application Controller はクラスターをシャードに無期限に割り当てます。round-robin シャーディングアルゴリズムを使用している場合、この静的割り当てにより、特にレプリカが追加または削除されたときに、シャードが不均一に分散される可能性があります。シャードの動的なスケーリングを有効にして、特定の時点で Argo CD Application Controller が管理するクラスターの数に基づいてシャードの数を自動的に調整できます。これにより、シャードのバランスが確保され、コンピューティングリソースの使用が最適化されます。

注記

動的スケーリングを有効にした後は、シャード数を手動で変更できません。システムは、特定の時点で Argo CD Application Controller が管理するクラスターの数に基づいて、シャードの数を自動的に調整します。

4.2.1. Web コンソールでのシャードの動的スケーリングの有効化

OpenShift Container Platform Web コンソールを使用して、シャードの動的スケーリングを有効にできます。

前提条件

  • cluster-admin 権限でクラスターにアクセスできる。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。

手順

  1. OpenShift Container Platform Web コンソールの Administrator パースペクティブで、OperatorsInstalled Operators に移動します。
  2. Installed Operators のリストから Red Hat OpenShift GitOps Operator を選択し、ArgoCD タブをクリックします。
  3. シャードの動的スケーリングを有効にする Argo CD インスタンス名 (例: openshift-gitops) を選択します。
  4. YAML タブをクリックし、以下のように spec.controller.sharding プロパティーを編集して設定します。

    動的なスケーリングを有効にした Argo CD YAML ファイルの例

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: openshift-gitops
      namespace: openshift-gitops
    spec:
      controller:
        sharding:
          dynamicScalingEnabled: true 1
          minShards: 1 2
          maxShards: 3 3
          clustersPerShard: 1 4

    1
    動的スケーリングを有効にするには、dynamicScalingEnabledtrue に設定します。
    2
    minShards は、シャードの最小要件数に設定します。この値は 1 以上に設定する必要があります。
    3
    maxShards を、シャードの最大要件数に設定します。値は minShards の値よりも大きくする必要があります。
    4
    clustersPerShard は、シャードごとに必要なクラスターの数に設定します。この値は 1 以上に設定する必要があります。
  5. Save をクリックします。

    成功通知アラート openshift-gitops has been updated to version <version> が表示されます。

    注記

    デフォルトの openshift-gitops インスタンスを編集すると、Managed resource ダイアログボックスが表示されます。Save をもう一度クリックして、変更を確定します。

検証

namespace の Pod 数をチェックして、シャード化が有効になっていることを確認します。

  1. WorkloadsStatefulSets に移動します。
  2. Argo CD インスタンスがデプロイされている namespace を Project ドロップダウンリストから選択します (例: openshift-gitops)。
  3. Argo CD インスタンスの名前を持つ StatefulSet オブジェクトの名前 (例: openshift-gitops-apllication-controller) をクリックします。
  4. Pod タブをクリックし、Pod の数が Argo CD YAML ファイルで設定した minShards の値以上であることを確認します。

4.2.2. CLI を使用したシャードの動的スケーリングの有効化

OpenShift CLI (oc) を使用して、シャードの動的スケーリングを有効にできます。

前提条件

  • Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
  • cluster-admin 権限でクラスターにアクセスできる。

手順

  1. oc ツールを使用して、cluster-admin 権限を持つユーザーとしてクラスターにログインします。
  2. 次のコマンドを実行して、動的スケーリングを有効にします。

    $ oc patch argocd <argocd_instance> -n <namespace> --type=merge --patch='{"spec":{"controller":{"sharding":{"dynamicScalingEnabled":true,"minShards":<value>,"maxShards":<value>,"clustersPerShard":<value>}}}}'

    コマンドの例

    $ oc patch argocd openshift-gitops -n openshift-gitops --type=merge --patch='{"spec":{"controller":{"sharding":{"dynamicScalingEnabled":true,"minShards":1,"maxShards":3,"clustersPerShard":1}}}}' 1

    1
    このサンプルコマンドは、openshift-gitops namespace の openshift-gitops Argo CD インスタンスの動的スケーリングを有効にし、シャードの最小数を 1 に、シャードの最大数を 3 に、およびシャードごとのクラスター数を 1 に設定します。minShard および clustersPerShard の値は、1 以上に設定する必要があります。maxShard の値は、minShard の値以下である必要があります。

    出力例

    argocd.argoproj.io/openshift-gitops patched

検証

  1. Argo CD インスタンスの spec.controller.sharding プロパティーを確認します。

    $ oc get argocd <argocd_instance> -n <namespace> -o jsonpath='{.spec.controller.sharding}'

    コマンドの例

    $ oc get argocd openshift-gitops -n openshift-gitops -o jsonpath='{.spec.controller.sharding}'

    シャードの動的スケーリングが有効になっている場合の出力例

    {"dynamicScalingEnabled":true,"minShards":1,"maxShards":3,"clustersPerShard":1}

  2. オプション: OpenShift Container Platform Web コンソールで Argo CD インスタンスの設定 YAML ファイルにある設定された spec.controller.sharding プロパティーをチェックして、動的スケーリングが有効になっていることを確認します。
  3. Argo CD Application Controller Pod の数を確認します。

    $ oc get pods -n <namespace> -l app.kubernetes.io/name=<argocd_instance>-application-controller

    コマンドの例

    $ oc get pods -n openshift-gitops -l app.kubernetes.io/name=openshift-gitops-application-controller

    出力例

    NAME                                           READY   STATUS    RESTARTS   AGE
    openshift-gitops-application-controller-0      1/1     Running   0          2m  1

    1
    Argo CD Application Controller Pod の数は、minShard の値以下である必要があります。

法律上の通知

Copyright © 2025 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.