宣言型クラスター設定
OpenShift GitOps を使用してクラスター設定で OpenShift クラスターを設定し、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
環境変数に追加します。
手順
- Web コンソールの Administrator パースペクティブで、Operators → Installed Operators → Red Hat OpenShift GitOps → Subscription に移動します。
- Actions リストをクリックし、Edit Subscription をクリックします。
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> # ...
- Save、Reload を順にクリックします。
Argo CD インスタンスがクラスタースコープのリソースを管理するクラスターロールで設定されていることを確認するには、次の手順を実行します。
- User Management → Roles に移動し、Filter リストから Cluster-wide Roles を選択します。
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-server
とargocd-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 インスタンスおよび付随するコントローラーは、単純な設定の切り替えを設定して、クラスターのインフラストラクチャーノードで実行できるようになりました。
手順
既存のノードにラベルを付けます。
$ oc label node <node-name> node-role.kubernetes.io/infra=""
オプション: 必要な場合は、テイントを適用し、インフラストラクチャーノードでワークロードを分離し、他のワークロードがそれらのノードでスケジュールされないようにすることもできます。
$ oc adm taint nodes -l node-role.kubernetes.io/infra \ infra=reserved:NoSchedule infra=reserved:NoExecute
GitOpsService
カスタムリソースにrunOnInfra
トグルを追加します。apiVersion: pipelines.openshift.io/v1alpha1 kind: GitopsService metadata: name: cluster spec: runOnInfra: true
オプション: テイントがノードに追加された場合は、
tolerations
をGitOpsService
カスタムリソースに追加します。例
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
-
コンソール UI の Pod を Pods → Pod details で表示して、
openshift-gitops
namespace のワークロードがインフラストラクチャーノードでスケジュールされていることを確認します。
デフォルトの Argo CD カスタムリソースに手動で追加された nodeSelectors
および tolerations
は、GitOpsService
カスタムリソースのトグルおよび tolerations
によって上書きされます。
関連情報
- テイントと容認の詳細は、ノードテイントを使用した Pod 配置の制御 を参照してください。
- インフラストラクチャーマシンセットの詳細は、インフラストラクチャーマシンセットの作成 を参照してください。
1.5. Argo CD ダッシュボードを使用したアプリケーションの作成
Argo CD は、アプリケーションを作成できるダッシュボードを提供します。
このサンプルワークフローでは、cluster
ディレクトリーの内容を cluster-configs
アプリケーションに対して再帰的に同期するように Argo CD を設定するプロセスを説明します。このディレクトリーは、Web コンソールの
メニューに 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 インスタンスにログインしている。
手順
- Argo CD ダッシュボードで、NEW APP をクリックして新規の Argo CD アプリケーションを追加します。
このワークフローでは、以下の設定で 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
- CREATE をクリックしてアプリケーションを作成します。
- Web コンソールの Administrator パースペクティブを開き、Administration → Namespaces を展開します。
-
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 インスタンスにログインしている。
手順
サンプルアプリケーション をダウンロードします。
$ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
アプリケーションを作成します。
$ oc create -f openshift-gitops-getting-started/argo/app.yaml
oc get
コマンドを実行して、作成されたアプリケーションを確認します。$ oc get application -n openshift-gitops
アプリケーションがデプロイされている 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 インスタンスにログインしている。
手順
Argo CD サーバーの
admin
アカウントのパスワードを取得します。$ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
Argo CD サーバーの URL を取得します。
$ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
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
すべてのアプリケーションを表示して、
argocd
コマンドをデフォルトモードで実行できることを確認します。$ argocd app list
設定が正しい場合は、既存のアプリケーションが次のヘッダーとともにリストされます。
出力例
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
デフォルトモードでアプリケーションを作成します。
$ 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
openshif-gitops
Argo CD インスタンスが管理するspring-petclinic
宛先 namespace にラベルを付けます。$ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
使用可能なアプリケーションをリスト表示して、アプリケーションが正常に作成されたことを確認します。
$ 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 がインストールされている。
手順
oc
CLI ツールを使用して OpenShift Container Platform クラスターにログインします。$ oc login -u <username> -p <password> <server_url>
例
$ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443
コンテキストが
kubeconfig
ファイルで正しく設定されているかどうかを確認します。$ oc config current-context
現在のコンテキストのデフォルトの namespace を
openshift-gitops
に設定します。$ oc config set-context --current --namespace openshift-gitops
次の環境変数を設定して、Argo CD コンポーネント名をオーバーライドします。
$ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
すべてのアプリケーションを一覧表示して、
core
モードでargocd
コマンドを実行できることを確認します。$ argocd app list --core
設定が正しい場合は、既存のアプリケーションが次のヘッダーとともにリストされます。
出力例
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
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
openshif-gitops
Argo CD インスタンスが管理するspring-petclinic
宛先 namespace にラベルを付けます。$ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
使用可能なアプリケーションをリスト表示して、アプリケーションが正常に作成されたことを確認します。
$ argocd app list --core
cluster-configs
の Argo CD アプリケーションはHealthy
ステータスであっても、sync ポリシーがnone
であるため、自動的に同期されず、OutOfSync
ステータスのままになります。
1.9. アプリケーションの Git リポジトリーとの同期
Argo CD の同期ポリシーを変更することで、アプリケーションを Git リポジトリーと同期できます。ポリシーを変更すると、クラスター設定の変更が Git リポジトリーからクラスターに自動的に適用されます。
手順
- Argo CD ダッシュボードでは、cluster-configs Argo CD アプリケーションに Missing および OutOfSync のステータスがあることに注意してください。アプリケーションは手動の同期ポリシーで設定されているため、Argo CD はこれを自動的に同期しません。
- cluster-configs タイルの 同期 をクリックし、変更を確認してから、SYNCHRONIZE をクリックします。Argo CD は Git リポジトリーの変更を自動的に検出します。設定が変更されると、Argo CD は cluster-configs のステータスを OutOfSync に変更します。Argo CD の同期ポリシーを変更し、Git リポジトリーからクラスターに変更を自動的に適用できるようにします。
- cluster-configs Argo CD アプリケーションに Healthy および Synced のステータスがあることに注意してください。cluster-configs タイルをクリックし、クラスター上で同期されたリソースおよびそれらのステータスの詳細を確認します。
-
OpenShift Container Platform Web コンソールに移動し、
をクリックして Red Hat Developer Blog - Kubernetes へのリンクが表示されることを確認します。
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 がインストールされている。
手順
Argo CD サーバーの
admin
アカウントのパスワードを取得します。$ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
Argo CD サーバーの URL を取得します。
$ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
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
アプリケーションは
none
sync ポリシーを使用して設定されているため、同期操作を手動でトリガーする必要があります。$ argocd app sync openshift-gitops/app-cluster-configs
アプリケーションをリスト表示して、アプリケーションのステータスが
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 がインストールされている。
手順
oc
CLI ツールを使用して OpenShift Container Platform クラスターにログインします。$ oc login -u <username> -p <password> <server_url>
例
$ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443
コンテキストが
kubeconfig
ファイルで正しく設定されているかどうかを確認します。$ oc config current-context
現在のコンテキストのデフォルトの namespace を
openshift-gitops
に設定します。$ oc config set-context --current --namespace openshift-gitops
次の環境変数を設定して、Argo CD コンポーネント名をオーバーライドします。
$ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
アプリケーションは
none
sync ポリシーを使用して設定されているため、同期操作を手動でトリガーする必要があります。$ argocd app sync --core openshift-gitops/app-cluster-configs
アプリケーションをリスト表示して、アプリケーションのステータスが
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 インスタンスの権限:
リソース | 説明 |
---|---|
リソースグループ | ユーザーまたは管理者の設定 |
| OLM によって管理されるオプションの Operator |
| グループ、ユーザー、およびそれらの権限 |
| クラスター全体のビルド設定、レジストリー設定、およびスケジューラーポリシーを設定するために使用される CVO によって管理されるコントロールプレーン Operator |
| ストレージ |
| コンソールのカスタマイズ |
1.13. クラスター設定のアクセス許可を追加する
Argo CD インスタンスにアクセス許可を付与して、クラスター設定を管理できます。追加のアクセス許可を持つクラスターロールを作成し、新しいクラスターロールバインディングを作成して、クラスターロールをサービスアカウントに関連付けます。
前提条件
-
cluster-admin
権限で OpenShift Container Platform クラスターにアクセスでき、Web コンソールにログインしている。 - Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
手順
Web コンソールで、User Management → Roles → Create Role を選択します。以下の
ClusterRole
YAML テンプレートを使用してルールを追加し、追加の権限を指定します。apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secrets-cluster-role rules: - apiGroups: [""] resources: ["secrets"] verbs: ["*"]
- Create をクリックしてクラスターロールを追加します。
- クラスターのロールバインディングを作成するには、User Management → Role Bindings → Create Binding を選択します。
- Project リストから All Projects を選択します。
- Create binding をクリックします。
- Binding type を Cluster-wide role binding (ClusterRoleBinding) として選択します。
- RoleBinding name の一意の値を入力します。
- ドロップダウンリストから、新しく作成したクラスターロールまたは既存のクラスターロールを選択します。
Subject を ServiceAccount として選択し、サブジェクトの namespace と 名前 を指定します。
-
サブジェクトの namespace:
openshift-gitops
サブジェクトの名前:
openshift-gitops-argocd-application-controller
注記Subject name の値は、クラスターロールおよびクラスターロールバインディングを作成する GitOps コントロールプレーンのコンポーネントによって異なります。
-
サブジェクトの namespace:
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
機能を設定できます。
手順
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
よりも正確になります。
次のコマンドを実行して、YAML ファイルに変更を適用します。
$ oc apply -f argocd-resource.yaml -n argo-cd-instance 1
- 1
ArgoCD
リソースを含む YAML ファイルの名前と、ArgoCD
をホストする namespace を指定します。
次のコマンドを実行して、
.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
)。
ConfigMap
リソースのresource.respectRBAC
パラメーターが正常に更新されていることを確認します。argocd-cm
config map の内容を取得するには、次のコマンドを実行します。$ oc get cm argocd-cm -n <argocd_namespace> -o yaml
-
argocd-cm
ConfigMap
にresource.respectRBAC
パラメーターが含まれていることを確認し、その値がstrict
またはnormal
に設定されていることを確認します。
1.15.2. Web コンソールを使用した respectRBAC の設定
Web コンソールで respectRBAC
を設定できます。
手順
- OpenShift Container Platform Web コンソールにログインします。
- Web コンソールの Administrator パースペクティブで、Operators → Installed Operators の順にクリックします。
- Project リストからユーザー定義の Argo CD インスタンスをインストールするプロジェクトを作成または選択します。
- インストールされている Operators リストから Red Hat OpenShift GitOps を選択し、Argo CD タブをクリックします。
Argo CD タブで
respectRBAC
パラメーターを設定します。spec: controller: respectRBAC: strict
Create をクリックします。
インストールが正常に完了したら、Argo CD インスタンスが Argo CD タブに一覧表示され、Status が Available であることを確認します。
Argo CD インスタンスの作成後、次の手順を実行して、
ConfigMap
リソースのresource.respectRBAC
パラメーターが正常に更新されていることを確認します。- Administrator パースペクティブで、Workload → ConfigMaps に移動します。
- Project オプションで、Argo CD namespace を選択します。
-
argocd-cm
config map を選択します。 -
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 ファイルを編集して、クラスタースコープインスタンスのデフォルトのクラスターロールの作成を無効にする必要があります。
手順
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 # ...
出力例
argocd.argoproj.io/example configured
次のコマンドを実行して、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 コントロールプレーンコンポーネントの新しいクラスターロールとクラスターロールバインディングを作成して、クラスタースコープのインスタンスの権限をカスタマイズする必要があります。
たとえば、以下の手順ではユーザー定義のクラスタースコープのインスタンスのみにフォーカスします。
手順
- Web コンソールの Administrator パースペクティブを開き、User Management → Roles → Create Role に移動します。
以下の
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
- Create をクリックしてクラスターロールを追加します。
次の手順を実行して、権限をカスタマイズするコントロールプレーンコンポーネントで使用されるサービスアカウントを見つけます。
- Workloads → Pods に移動します。
- Project リストから、ユーザー定義のクラスタースコープのインスタンスがインストールされているプロジェクトを選択します。
- コントロールプレーンコンポーネントの Pod をクリックし、YAML タブに移動します。
-
spec.ServiceAccount
フィールドを見つけ、サービスアカウントをメモします。
- User Management → RoleBindings → Create binding に移動します。
- Create binding をクリックします。
- Binding type を Cluster-wide role binding (ClusterRoleBinding) として選択します。
- <argocd_name>-<argocd_namespace>-<control_plane_component> 命名規則に従って、RoleBinding name の一意の値を入力します。
- Role name のドロップダウンリストから新たに作成されたクラスターロールを選択します。
Subject を ServiceAccount として選択し、サブジェクトの namespace と 名前 を指定します。
-
Subject namespace:
spring-petclinic
Subject name:
example-argocd-application-controller
注記Subject name は、設定する値が、権限をカスタマイズするコントロールプレーンコンポーネントの
spec.ServiceAccount
フィールドの値と同じであることを確認します。
-
Subject namespace:
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. 集約されたクラスターロールの作成
集約されたクラスターロールを作成するプロセスには、次の手順が含まれます。
- 集約されたクラスターロールの作成を有効にする
- ユーザー定義のクラスターロールを作成し、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 ファイルを編集して、対応するフィールドを設定する必要があります。
手順
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 # ...
出力例
argocd.argoproj.io/example configured
次のコマンドを実行して、クラスタースコープの 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
次のコマンドを実行して、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 Management → Roles および User Management → RoleBindings に移動します。
app.kubernetes.io/part-of:argocd
ラベルの付いたクラスターロールとクラスターロールバインディングを検索できます。次のコマンドを実行して、作成されたロールの出力の権限をチェックして、集約されたクラスターロールが作成されたことを確認します。
$ 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
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
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
ヒントまたは、OpenShift Container Platform Web コンソールを使用して、Administrator パースペクティブから確認することもできます。User Management → Roles に移動し、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
-
手順
次のコマンドを使用して、必要なラベルと権限を持つ新しいクラスターロールを作成します。
$ 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
ヒントまたは、Web コンソールを使用して、Administrator パースペクティブからユーザー定義のクラスターロールを作成することもできます。User Management → Roles → Create Role にアクセスし、前述の YAML テンプレートを使用して権限を追加し、Create をクリックします。
出力例
clusterrole.rbac.authorization.k8s.io/user-application-controller created
ユーザー定義のクラスターロールが作成されます。
次のコマンドを実行して、
<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 Management → Roles に移動し、Filter オプションを使用して Cluster-wide Roles を選択し、
<argocd_name>-<argocd_namespace>-argocd-application-controller-admin
クラスターロールを検索します。詳細と設定を確認するには、クラスターロールを作成する必要があります。
次のコマンドを実行して、
<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 Management → Roles に移動し、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
権限でクラスターにアクセスできる。
手順
- Web コンソールの Administrator パースペクティブで、Operators → Installed Operators に移動します。
- インストールされている Operator から Red Hat OpenShift GitOps をクリックし、Argo CD タブに移動します。
-
round-robin
シャーディングアルゴリズムを有効にする Argo CD インスタンス (例:openshift-gitops)
をクリックします。 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
Save をクリックします。
成功通知アラート
openshift-gitops has been updated to version <version>
が表示されます。注記デフォルトの
openshift-gitops
インスタンスを編集すると、Managed resource ダイアログボックスが表示されます。Save をもう一度クリックして、変更を確定します。次の手順を実行して、シャーディングアルゴリズムとして
round-robin
を使用する設定で、シャーディングが有効になっていることを確認します。- Workloads → StatefulSets に移動します。
- Argo CD インスタンスをインストールしたネームスペースを Project ドロップダウンリストから選択します。
- <instance_name>-application-controller (例: openshift-gitops-application-controller) をクリックし、Pod タブに移動します。
- 作成された Application Controller Pod の数を確認します。これは、セットレプリカの数に対応している必要があります。
調べるコントローラー 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"
メッセージを探します。
次の例に示すように、ログの 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
注記クラスターの数 "C" がシャードレプリカの数 "R" の倍数である場合は、各シャードに同じ数のクラスター "N" が割り当てられている必要があります。これは、"C" を "R" で割ったものに相当します。前の例では、3 つのクラスターと 3 つのレプリカを示しています。したがって、各シャードには 1 つのクラスターが割り当てられます。
4.1.2. CLI を使用したラウンドロビンシャーディングアルゴリズムの有効化
コマンドラインインターフェイスを使用して、round-robin
シャーディングアルゴリズムを有効にできます。
前提条件
- Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
-
cluster-admin
権限でクラスターにアクセスできる。
手順
以下のコマンドを実行して、シャード化を有効にし、レプリカの数を必要な値に設定します。
$ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"sharding":{"enabled":true,"replicas":<value>}}}}' --type=merge
出力例
argocd.argoproj.io/<argocd_instance> patched
以下のコマンドを実行して、シャード化アルゴリズムを
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
次のコマンドを実行して、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
次のコマンドを実行して、シャーディングアルゴリズムとして
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"
メッセージを探します。
次の手順を実行して、シャード間でクラスターが均等に分散されていることを確認します。
次のコマンドを実行して、ログレベルを
debug
に設定します。$ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"logLevel":"debug"}}}' --type=merge
出力例
argocd.argoproj.io/<argocd_instance> patched
次のコマンドを実行して、ログを表示し、
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
注記クラスターの数 "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 クラスターにインストールされている。
手順
- OpenShift Container Platform Web コンソールの Administrator パースペクティブで、Operators → Installed Operators に移動します。
- Installed Operators のリストから Red Hat OpenShift GitOps Operator を選択し、ArgoCD タブをクリックします。
-
シャードの動的スケーリングを有効にする Argo CD インスタンス名 (例:
openshift-gitops)
を選択します。 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
Save をクリックします。
成功通知アラート
openshift-gitops has been updated to version <version>
が表示されます。注記デフォルトの
openshift-gitops
インスタンスを編集すると、Managed resource ダイアログボックスが表示されます。Save をもう一度クリックして、変更を確定します。
検証
namespace の Pod 数をチェックして、シャード化が有効になっていることを確認します。
- Workloads → StatefulSets に移動します。
-
Argo CD インスタンスがデプロイされている namespace を Project ドロップダウンリストから選択します (例:
openshift-gitops
)。 -
Argo CD インスタンスの名前を持つ
StatefulSet
オブジェクトの名前 (例:openshift-gitops-apllication-controller)
をクリックします。 -
Pod タブをクリックし、Pod の数が Argo CD
YAML
ファイルで設定したminShards
の値以上であることを確認します。
4.2.2. CLI を使用したシャードの動的スケーリングの有効化
OpenShift CLI (oc
) を使用して、シャードの動的スケーリングを有効にできます。
前提条件
- Red Hat OpenShift GitOps Operator が OpenShift Container Platform クラスターにインストールされている。
-
cluster-admin
権限でクラスターにアクセスできる。
手順
-
oc
ツールを使用して、cluster-admin
権限を持つユーザーとしてクラスターにログインします。 次のコマンドを実行して、動的スケーリングを有効にします。
$ 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
検証
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}
-
オプション: OpenShift Container Platform Web コンソールで Argo CD インスタンスの設定
YAML
ファイルにある設定されたspec.controller.sharding
プロパティーをチェックして、動的スケーリングが有効になっていることを確認します。 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
の値以下である必要があります。