宣言型クラスター設定
OpenShift GitOps を使用したクラスター設定での OpenShift クラスターの設定
概要
第1章 クラスター設定を使用したアプリケーションのデプロイによる OpenShift クラスターの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift GitOps では、Argo CD を、クラスターのカスタム設定が含まれるアプリケーションと Git ディレクトリーの内容を再帰的に同期するように設定することができます。
1.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift Container Platform クラスターに管理者としてログインしていること。
- Red Hat OpenShift GitOps Operator がクラスターにインストールされている。
- Argo CD インスタンスにログインしました。
1.2. Argo CD インスタンスを使用してクラスタースコープのリソースを管理する リンクのコピーリンクがクリップボードにコピーされました!
クラスタースコープのリソースを管理するには、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セクションのSubscriptionYAML ファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Argo インスタンスがクラスタースコープのリソースを管理するクラスターロールで設定されていることを確認するには、次の手順を実行します。
- 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
oc auth can-i create oauth -n openshift-gitops --as system:serviceaccount:openshift-gitops:openshift-gitops-argocd-application-controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力
yesは、Argo インスタンスがクラスタースコープのリソースを管理するクラスターロールで設定されていることを確認します。それ以外の場合は、設定を確認し、必要に応じて必要な手順を実行します。
1.3. Argo CD インスタンスのデフォルトの権限 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Argo CD インスタンスには次の権限があります。
-
Argo CD インスタンスには、それがデプロイされている namespace 内のリソースのみを管理する
admin権限があります。たとえば、foo namespace にデプロイされた Argo CD インスタンスには、その namespace に対してのみリソースを管理するadmin権限があります。 Argo CD が適切に機能するには、リソースに対するクラスター全体の
read権限が必要であるため、Argo CD には次のクラスタースコープのアクセス許可があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Argo CD が実行されている
argocd-serverとargocd-application-controllerコンポーネントで使用されるクラスターのロールを編集して、write権限が Argo CD で管理したい namespace とリソースのみに制限されるようにすることができます。oc edit clusterrole argocd-server oc edit clusterrole argocd-application-controller
$ oc edit clusterrole argocd-server $ oc edit clusterrole argocd-application-controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4. クラスターレベルでの Argo CD インスタンスの実行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift GitOps Operator によってインストールされるデフォルトの Argo CD インスタンスおよび付随するコントローラーは、単純な設定の切り替えを設定して、クラスターのインフラストラクチャーノードで実行できるようになりました。
手順
既存のノードにラベルを付けます。
oc label node <node-name> node-role.kubernetes.io/infra=""
$ oc label node <node-name> node-role.kubernetes.io/infra=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 必要な場合は、テイントを適用し、インフラストラクチャーノードでワークロードを分離し、他のワークロードがそれらのノードでスケジュールされないようにすることもできます。
oc adm taint nodes -l node-role.kubernetes.io/infra \ infra=reserved:NoSchedule infra=reserved:NoExecute
$ oc adm taint nodes -l node-role.kubernetes.io/infra \ infra=reserved:NoSchedule infra=reserved:NoExecuteCopy to Clipboard Copied! Toggle word wrap Toggle overflow GitOpsServiceカスタムリソースにrunOnInfraトグルを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: テイントがノードに追加された場合は、
tolerationsをGitOpsServiceカスタムリソースに追加します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
コンソール UI の Pod を Pods → Pod details で表示して、
openshift-gitopsnamespace のワークロードがインフラストラクチャーノードでスケジュールされていることを確認します。
デフォルトの Argo CD カスタムリソースに手動で追加された nodeSelectors および tolerations は、GitOpsService カスタムリソースのトグルおよび tolerations によって上書きされます。
1.5. Argo CD ダッシュボードを使用したアプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
Argo CD は、アプリケーションを作成できるダッシュボードを提供します。
このサンプルワークフローでは cluster ディレクトリーの内容を cluster-configs アプリケーションに対して再帰的に同期するために Argo CD を設定するプロセスについて説明します。このディレクトリーは、Web コンソールの
メニューに Red Hat Developer Blog - Kubernetes へのリンクを追加する OpenShift Container Platform Web コンソールクラスター設定を定義します。また、クラスターの namespace spring-petclinic を定義します。
手順
- 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-gitopsnamespace にある Argo CD インスタンスが namespace を管理できるようにします。
1.6. oc ツールを使用したアプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
oc ツールを使用して、ターミナルで Argo CD アプリケーションを作成できます。
手順
サンプルアプリケーション をダウンロードします。
git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
$ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションを作成します。
oc create -f openshift-gitops-getting-started/argo/app.yaml
$ oc create -f openshift-gitops-getting-started/argo/app.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc getコマンドを実行して、作成されたアプリケーションを確認します。oc get application -n openshift-gitops
$ oc get application -n openshift-gitopsCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションがデプロイされている namespace にラベルを追加し、
openshift-gitopsnamespace の Argo CD インスタンスが管理できるようにします。oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops
$ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitopsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7. アプリケーションの 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-petclinicnamespace を検索し、これがクラスターに追加されていることを確認します。クラスター設定がクラスターに正常に同期されます。
1.8. クラスター設定用の組み込みのアクセス許可 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Argo CD インスタンスには、クラスター Operator、オプションの OLM オペレーター、およびユーザー管理など、特定のクラスタースコープのリソースを管理する権限があります。
Argo CD にはクラスター管理者権限がありません。
Argo CD インスタンスのパーミッション:
| Resources | 説明 |
|---|---|
| リソースグループ | ユーザーまたは管理者の設定 |
|
| OLM によって管理されるオプションの Operator |
|
| グループ、ユーザー、およびそれらの権限 |
|
| クラスター全体のビルド設定、レジストリー設定、およびスケジューラーポリシーを設定するために使用される CVO によって管理されるコントロールプレーン Operator |
|
| ストレージ |
|
| コンソールのカスタマイズ |
1.9. クラスター設定のアクセス許可を追加する リンクのコピーリンクがクリップボードにコピーされました!
Argo CD インスタンスにアクセス許可を付与して、クラスター設定を管理できます。追加のアクセス許可を持つクラスターロールを作成し、新しいクラスターロールバインディングを作成して、クラスターロールをサービスアカウントに関連付けます。
前提条件
-
cluster-admin権限で OpenShift Container Platform クラスターにアクセスでき、Web コンソールにログインしている。 - Red Hat OpenShift GitOps Operator がクラスターにインストールされている。
手順
Web コンソールで、User Management → Roles → Create Role を選択します。以下の
ClusterRoleYAML テンプレートを使用してルールを追加し、追加のパーミッションを指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックしてクラスターロールを追加します。
- クラスターのロールバインディングを作成するには、User Management → Role Bindings → Create Binding を選択します。
- プロジェクト ドロップダウンから すべてのプロジェクト を選択します。
- Create binding をクリックします。
- Binding type を Cluster-wide role binding (ClusterRoleBinding) として選択します。
- RoleBinding name の一意の値を入力します。
- ドロップダウンリストから、新しく作成したクラスターロールまたは既存のクラスターロールを選択します。
Subject を ServiceAccount として選択し、サブジェクトの namespace と 名前 を指定します。
-
Subject namespace:
openshift-gitops -
Subject name:
openshift-gitops-argocd-application-controller
-
Subject namespace:
Create をクリックします。
ClusterRoleBindingオブジェクトの YAML ファイルは以下のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.10. 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.10.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 サブスクリプション
1.10.2. namespace スコープの Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
namespace スコープの Operator をインストールするには、必要な Operator の Subscription リソースと OperatorGroup リソースを作成して Git リポジトリーに配置します。
例: Ansible Automation Platform リソースオペレーター
Red Hat OpenShift GitOps を使用して複数の Operator をデプロイする場合、対応する namespace に Operator グループを 1 つだけ作成する必要があります。1 つの namespace に複数の Operator グループが存在する場合、その namespace で作成された CSV はすべて、TooManyOperatorGroups の理由で failure 状態に移行します。対応する namespace 内の Operator グループの数が 1 に達すると、以前の failure 状態の CSV はすべて pending 状態に移行します。Operator のインストールを完了するには、保留中のインストールプランを手動で承認する必要があります。
第2章 Argo CD アプリケーションコントローラーレプリカ間でのクラスターのシャーディング リンクのコピーリンクがクリップボードにコピーされました!
コントローラーが管理するクラスターや使用するメモリーが過剰な場合は、複数の Argo CD アプリケーションコントローラーレプリカにわたってクラスターをシャーディングできます。
2.1. ラウンドロビンシャーディングアルゴリズムの有効化 リンクのコピーリンクがクリップボードにコピーされました!
round-robin シャーディングアルゴリズムはテクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではない場合があります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
デフォルトでは、Argo CD アプリケーションコントローラーは、不均一な legacy のハッシュベースのシャーディングアルゴリズムを使用してクラスターをシャードに割り当てます。これにより、クラスターの分散が不均等になる可能性があります。round-robin シャーディングアルゴリズムを有効にして、すべてのシャードにわたってより均等なクラスター分散を実現できます。
Red Hat OpenShift GitOps で round-robin シャーディングアルゴリズムを使用すると、次の利点があります。
- よりバランスの取れたワークロード分散を確保する
- シャードが過負荷になったり、十分に活用されなかったりすることを回避する
- コンピューティングリソースの効率を最適化する
- ボトルネックのリスクを軽減する
- Argo CD システムの全体的なパフォーマンスと信頼性を向上する
代替シャーディングアルゴリズムの導入により、特定の使用例に基づいてさらにカスタマイズできるようになります。デプロイメントのニーズに最も適したアルゴリズムを選択できるため、さまざまな運用シナリオでの柔軟性と適応性が向上します。
GitOps で代替シャーディングアルゴリズムの利点を活用するには、デプロイ中にシャーディングを有効にすることが重要です。
2.1.1. Web コンソールでの round-robin シャーディングアルゴリズムの有効化 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して round-robin シャーディングアルゴリズムを有効にできます。
前提条件
- Red Hat OpenShift GitOps Operator がクラスターにインストールされている。
- 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 インスタンスの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 タブに移動します。
- 作成されたアプリケーションコントローラー 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" 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"
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"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Using filter function: round-robinメッセージを探します。
次の例に示すように、ログの Search フィールドで
processed by shardを検索して、シャード間でのクラスターの分布が均一であることを確認します。重要これらのログを確認するには、ログレベルを
debugに設定していることを確認してください。コントローラー Pod ログスニペットの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記クラスターの数 C がシャードレプリカの数 R の倍数である場合、各シャードには同じ数のクラスター N が割り当てられている必要があります。これは、C を R で割ったものに相当します。前の例では、3 つのクラスターと 3 つのレプリカを示しています。したがって、各シャードには 1 つのクラスターが割り当てられます。
2.1.2. CLI を使用したラウンドロビンシャーディングアルゴリズムの有効化 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインインターフェイスを使用して、round-robin シャーディングアルゴリズムを有効にできます。
前提条件
- Red Hat OpenShift GitOps Operator がクラスターにインストールされている。
-
cluster-admin権限でクラスターにアクセスできる。
手順
以下のコマンドを実行して、シャード化を有効にし、レプリカの数を必要な値に設定します。
oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"sharding":{"enabled":true,"replicas":<value>}}}}' --type=merge$ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"sharding":{"enabled":true,"replicas":<value>}}}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
argocd.argoproj.io/<argocd_instance> patched
argocd.argoproj.io/<argocd_instance> patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、シャード化アルゴリズムを
round-robinに設定します。oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"env":[{"name":"ARGOCD_CONTROLLER_SHARDING_ALGORITHM","value":"round-robin"}]}}}' --type=merge$ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"env":[{"name":"ARGOCD_CONTROLLER_SHARDING_ALGORITHM","value":"round-robin"}]}}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
argocd.argoproj.io/<argocd_instance> patched
argocd.argoproj.io/<argocd_instance> patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Argo CD アプリケーションコントローラー Pod の数がセットされたレプリカの数と一致していることを確認します。
oc get pods -l app.kubernetes.io/name=<argocd_instance>-application-controller -n <namespace>
$ oc get pods -l app.kubernetes.io/name=<argocd_instance>-application-controller -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
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
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 22sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、シャーディングアルゴリズムとして
round-robinを使用する設定で、シャーディングが有効になっていることを確認します。oc logs <argocd_application_controller_pod> -n <namespace>
$ oc logs <argocd_application_controller_pod> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力の抜粋例
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" 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"
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"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Using filter function: round-robinメッセージを探します。
次の手順を実行して、シャード間でクラスターが均等に分散されていることを確認します。
次のコマンドを実行して、ログレベルを
debugに設定します。oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"logLevel":"debug"}}}' --type=merge$ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"logLevel":"debug"}}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
argocd.argoproj.io/<argocd_instance> patched
argocd.argoproj.io/<argocd_instance> patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ログを表示し、
processed by shardを検索して、各クラスターがどのシャードに接続されているかを確認します。oc logs <argocd_application_controller_pod> -n <namespace> | grep "processed by shard"
$ oc logs <argocd_application_controller_pod> -n <namespace> | grep "processed by shard"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力の抜粋例
time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id= will be processed by shard 0" time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=068d8b26-6rhi-4w23-jrf6-wjjfyw833n23 will be processed by shard 1" time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=836d8b53-96k4-f68r-8wq0-sh72j22kl90w will be processed by shard 2"
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 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記クラスターの数 C がシャードレプリカの数 R の倍数である場合、各シャードには同じ数のクラスター N が割り当てられている必要があります。これは、C を R で割ったものに相当します。前の例では、3 つのクラスターと 3 つのレプリカを示しています。したがって、各シャードには 1 つのクラスターが割り当てられます。
2.2. Argo CD アプリケーションコントローラーのシャードの動的スケーリングを有効にする手順 リンクのコピーリンクがクリップボードにコピーされました!
シャードの動的スケーリングはテクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではない場合があります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
デフォルトでは、Argo CD アプリケーションコントローラーはクラスターをシャードに無期限に割り当てます。round-robin シャーディングアルゴリズムを使用している場合、この静的割り当てにより、特にレプリカが追加または削除されたときに、シャードが不均一に分散される可能性があります。シャードの動的なスケーリングを有効にして、特定の時点で Argo CD アプリケーションコントローラーによって管理されるクラスターの数に基づいてシャードの数を自動的に調整できます。これにより、シャードのバランスが確保され、コンピューティングリソースの使用が最適化されます。
動的スケーリングを有効にした後は、シャード数を手動で変更できません。システムは、特定の時点で Argo CD アプリケーションコントローラーが管理するクラスターの数に基づいて、シャードの数を自動的に調整します。
2.2.1. Web コンソールでのシャードの動的スケーリングの有効化 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して、シャードの動的スケーリングを有効にできます。
前提条件
-
cluster-admin権限でクラスターにアクセスできる。 - OpenShift Container Platform Web コンソールにアクセスできる。
- Red Hat OpenShift GitOps Operator がクラスターにインストールされている。
手順
- 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 ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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の値以上であることを確認します。
2.2.2. CLI を使用したシャードの動的スケーリングの有効化 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift CLI (oc) を使用して、シャードの動的スケーリングを有効にできます。
前提条件
- Red Hat OpenShift GitOps Operator がクラスターにインストールされている。
-
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 <argocd_instance> -n <namespace> --type=merge --patch='{"spec":{"controller":{"sharding":{"dynamicScalingEnabled":true,"minShards":<value>,"maxShards":<value>,"clustersPerShard":<value>}}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
oc patch argocd openshift-gitops -n openshift-gitops --type=merge --patch='{"spec":{"controller":{"sharding":{"dynamicScalingEnabled":true,"minShards":1,"maxShards":3,"clustersPerShard":1}}}}'$ oc patch argocd openshift-gitops -n openshift-gitops --type=merge --patch='{"spec":{"controller":{"sharding":{"dynamicScalingEnabled":true,"minShards":1,"maxShards":3,"clustersPerShard":1}}}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このサンプルコマンドは、
openshift-gitopsnamespace のopenshift-gitopsArgo CD インスタンスの動的スケーリングを有効にし、シャードの最小数を1に、シャードの最大数を3に、およびシャードごとのクラスター数を1に設定します。minShardおよびclustersPerShardの値は、1以上に設定する必要があります。maxShardの値は、minShardの値以下である必要があります。
出力例
argocd.argoproj.io/openshift-gitops patched
argocd.argoproj.io/openshift-gitops patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Argo CD インスタンスの
spec.controller.shardingプロパティーを確認します。oc get argocd <argocd_instance> -n <namespace> -o jsonpath='{.spec.controller.sharding}'$ oc get argocd <argocd_instance> -n <namespace> -o jsonpath='{.spec.controller.sharding}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
oc get argocd openshift-gitops -n openshift-gitops -o jsonpath='{.spec.controller.sharding}'$ oc get argocd openshift-gitops -n openshift-gitops -o jsonpath='{.spec.controller.sharding}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow シャードの動的スケーリングが有効になっている場合の出力例
{"dynamicScalingEnabled":true,"minShards":1,"maxShards":3,"clustersPerShard":1}{"dynamicScalingEnabled":true,"minShards":1,"maxShards":3,"clustersPerShard":1}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション: 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 <namespace> -l app.kubernetes.io/name=<argocd_instance>-application-controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
oc get pods -n openshift-gitops -l app.kubernetes.io/name=openshift-gitops-application-controller
$ oc get pods -n openshift-gitops -l app.kubernetes.io/name=openshift-gitops-application-controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE openshift-gitops-application-controller-0 1/1 Running 0 2m
NAME READY STATUS RESTARTS AGE openshift-gitops-application-controller-0 1/1 Running 0 2m1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Argo CD Application Controller Pod の数は、
minShardの値以下である必要があります。