配置控制器管理器速率限制


本页介绍了如何在 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 及更高版本中为此控制器配置速率限制。

  1. 创建名为 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 替换为您的命名空间名称。

  2. 使用 kubectl apply 将速率限制配置应用于您的集群:

    kubectl apply -f configure-rate-limit.yaml
  3. 通过运行以下命令来验证配置是否成功:

    kubectl get namespacedcontrollerreconciler cnrm-controller-manager -n NAMESPACE -o jsonpath='{.status.healthy}'

    输出应显示 status.healthy 字段已设置为 true

  4. 通过运行以下命令,验证 --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