配置控制器管理器速率限制
本页面介绍了如何为 Config Connector 中的控制器管理器配置总体速率限制(令牌桶速率限制)。
速率限制用于控制 Config Connector 向 Kubernetes API 服务器发出的请求数。有两项设置:
qps
(每秒查询次数)设置决定了 Config Connector 可以向 Kubernetes API 服务器发出请求的平均速率。burst
值允许在短时间内发出比qps
限制更多的请求。这有助于 Config Connector 快速协调,即使在需要向 Kubernetes API 服务器发出更多查询时(例如使用 GitOps 应用新的一批配置时),也能快速协调。
您可以这样理解用于速率限制的“令牌桶”算法:想象一个容量为 burst
个令牌的桶,以 qps
的速率重新填充。每次请求都需要从桶中获取一个令牌。如果存储桶为空,系统会延迟请求,直到有令牌可用为止。
为命名空间级控制器管理器配置速率限制
如果 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 客户端的速率限制。此模式的用法与命名空间模式类似,但在此模式下,您应使用 ControllerReconciler
CR 而不是 NamespacedControllerReconciler
,如以下示例所示:
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