コントローラ マネージャーのレート制限を構成する
このページでは、Config Connector でコントローラ マネージャに全体的なレート制限(トークン バケット レート制限)を構成する方法について説明します。
レート制限は、Config Connector が Kubernetes API サーバーに対して行うリクエストの数を制御します。次の 2 種類の設定があります。
qps
(1 秒あたりのクエリ数)の設定により、Config Connector が Kubernetes API サーバーにリクエストを送信できる平均レートが決まります。burst
の値は、短期間であればqps
の上限よりも多くのリクエストを許可します。これにより、GitOps を使用して新しい構成バッチを適用する場合など、Kubernetes API サーバーへのクエリがさらに必要になる場合でも、Config Connector は迅速に調整できます。
レート制限の「トークン バケット」アルゴリズムは、次のように考えることができます。容量 burst
個のトークンが入ったバケットが、レート qps
で補充されるとします。各リクエストには、バケットから 1 つのトークンが必要です。バケットが空の場合、トークンが使用可能になるまでリクエストは遅延します。
名前空間コントローラ マネージャーのレート制限を構成する
Config Connector が名前空間モードで実行されるように構成されている場合は、NamespacedControllerReconciler
カスタム リソースを使用して、指定された名前空間内で cnrm-controller-manager
コントローラの Kubernetes クライアントのレート制限を構成できます。このコントローラのレート制限は、Config Connector バージョン 1.119 以上で構成できます。
configure-rate-limit.yaml
という名前のファイルを作成して、次の YAML ファイルをコピーします。apiVersion: customize.core.cnrm.cloud.google.com/v1beta1 kind: NamespacedControllerReconciler metadata: name: cnrm-controller-manager # name must not contain the namespace ID suffix namespace: NAMESPACE spec: rateLimit: qps: 80 # the default value is 20 burst: 40 # the default value is 30
NAMESPACE
を実際のバケット名で置き換えます。kubectl apply
を使用して、クラスタにレート制限の構成を適用します。kubectl apply -f configure-rate-limit.yaml
次のコマンドを実行して、構成が成功したことを確認します。
kubectl get namespacedcontrollerreconciler cnrm-controller-manager -n NAMESPACE -o jsonpath='{.status.healthy}'
出力には、
true
に設定されたstatus.healthy
フィールドが表示されます。次のコマンドを実行して、
--qps
フラグと--burst
フラグがcnrm-controller-manager
コントローラのマネージャー コンテナに追加されたことを確認します。kubectl describe statefulsets -n cnrm-system -l "cnrm.cloud.google.com/scoped-namespace=NAMESPACE"
出力に次の内容が含まれているはずです。
Containers: manager: Image: gcr.io/gke-release/cnrm/controller:fd4c42c Port: 23232/TCP Host Port: 0/TCP Command: /configconnector/manager Args: --qps=80 --burst=40 --scoped-namespace=config-control --prometheus-scrape-endpoint=:8888
クラスタモードでレート制限を構成する
バージョン 1.125 以降では、Config Connector がクラスタモードで実行されるように構成されている場合、ControllerReconciler
カスタム リソースを使用して cnrm-controller-manager
コントローラの Kubernetes クライアントのレート制限を構成できます。使用方法は名前空間モードと似ていますが、この場合は次の例のように NamespacedControllerReconciler
ではなく ControllerReconciler
CR を使用する必要があります。
apiVersion: customize.core.cnrm.cloud.google.com/v1alpha1
kind: ControllerReconciler
metadata:
name: cnrm-controller-manager
spec:
rateLimit:
qps: 80 # the default value is 20
burst: 40 # the default value is 30