第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 つのクラスターが割り当てられます。
-
Workloads
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 つのクラスターが割り当てられます。