Configura il limite di frequenza di Controller Manager

Queste pagine descrivono come configurare il limite di frequenza complessivo (limite di frequenza del token bucket) per il controller manager in Config Connector.

Il limite di frequenza controlla il numero di richieste che Config Connector invia al server API Kubernetes. Esistono due impostazioni:

  • L'impostazione qps (query al secondo) determina la velocità media con cui Config Connector può effettuare richieste al server API Kubernetes.

  • Il valore burst consente un numero maggiore di richieste rispetto al limite qps per brevi periodi. In questo modo, Config Connector può eseguire la riconciliazione rapidamente, anche durante i periodi che richiedono più query al server API Kubernetes, ad esempio quando si applica un nuovo batch di configurazione utilizzando GitOps.

Puoi pensare all'algoritmo "token bucket" per limitazione di frequenza in questo modo: immagina un bucket con una capacità di burst token, che viene riempito alla velocità di qps. Ogni richiesta richiede un token dal bucket. Se il bucket è vuoto, le richieste vengono ritardate finché non sono disponibili token.

Configura il limite di frequenza per il controller manager con spazio dei nomi

Se Config Connector è configurato per l'esecuzione in modalità con spazio dei nomi, puoi utilizzare la risorsa personalizzata NamespacedControllerReconciler per configurare il limite di frequenza del client Kubernetes del controller cnrm-controller-manager nello spazio dei nomi designato. Puoi configurare il limite di frequenza per questo controller in Config Connector versione 1.119 e successive.

  1. Crea un file denominato configure-rate-limit.yaml e copia il seguente codice YAML al suo interno:

    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
    

    Sostituisci NAMESPACE con il nome del tuo spazio dei nomi.

  2. Utilizza kubectl apply per applicare la configurazione del limite di frequenza al tuo cluster:

    kubectl apply -f configure-rate-limit.yaml
  3. Verifica che la configurazione sia andata a buon fine eseguendo questo comando:

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

    L'output dovrebbe mostrare il campo status.healthy impostato su true.

  4. Verifica che i flag --qps e --burst siano aggiunti al container del gestore del controller cnrm-controller-manager eseguendo questo comando:

    kubectl describe statefulsets -n cnrm-system -l "cnrm.cloud.google.com/scoped-namespace=NAMESPACE"

    L'output dovrebbe contenere quanto segue.

    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
    

Configurare il limite di frequenza in modalità cluster

A partire dalla versione 1.125, se Config Connector è configurato per l'esecuzione in modalità cluster, puoi configurare il limite di frequenza del client Kubernetes del controller cnrm-controller-manager utilizzando la risorsa personalizzata ControllerReconciler. L'utilizzo è simile alla modalità con spazi dei nomi, ma in questo caso devi utilizzare la RP ControllerReconciler anziché NamespacedControllerReconciler, come nel seguente esempio:

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