컨트롤러 관리자 비율 제한 구성


이 페이지에서는 구성 커넥터의 컨트롤러 관리자에 대한 전체 비율 한도(토큰 버킷 비율 제한)를 구성하는 방법을 설명합니다.

비율 제한은 구성 커넥터가 Kubernetes API 서버에 보내는 요청 수를 제어합니다. 다음 두 가지 설정이 있습니다.

  • qps(초당 쿼리 수) 설정은 구성 커넥터가 Kubernetes API 서버에 요청할 수 있는 평균 속도를 결정합니다.

  • burst 값을 사용하면 단기간에 qps 한도보다 더 많은 요청을 할 수 있습니다. 이렇게 하면 GitOps를 사용하여 새 구성 일괄을 적용할 때와 같이 Kubernetes API 서버에 더 많은 쿼리를 실행해야 하는 경우에도 구성 커넥터가 빠르게 조정할 수 있습니다.

비율 제한을 위한 '토큰 버킷' 알고리즘은 다음과 같이 생각할 수 있습니다. 용량 burst 토큰의 버킷이 qps 속도로 다시 채워진다고 가정해 보겠습니다. 각 요청에는 버킷의 토큰 1개가 필요합니다. 버킷이 비어 있으면 토큰을 사용할 수 있을 때까지 요청이 지연됩니다.

네임스페이스 컨트롤러 관리자에 대한 비율 제한 구성

구성 커넥터가 네임스페이스 모드에서 실행되도록 구성된 경우 NamespacedControllerReconciler 커스텀 리소스를 사용하여 지정된 네임스페이스에서 cnrm-controller-manager 컨트롤러의 Kubernetes 클라이언트의 속도 제한을 구성할 수 있습니다. 구성 커넥터 버전 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