配置控制器管理器速率限制
本页介绍了如何在 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/v1alpha1 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}'
输出应显示
status.healthy
字段已设置为true
。通过运行以下命令,验证
--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