Configura il limite di velocità del gestore del controller


Questa pagina descrive come configurare il limite di frequenza complessivo (limite di frequenza del bucket di token) per il gestore del controller in Config Connector.

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

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

  • Il valore burst consente più 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 dell'API Kubernetes, ad esempio quando viene applicato un nuovo batch di configurazione utilizzando GitOps.

Puoi considerare l'algoritmo "bucket di token" per il limite di frequenza nel seguente modo: immagina un bucket di token con una capacità di burst, che viene rifornito alla frequenza di qps. Ogni richiesta richiede un token dal bucket. Se il bucket è vuoto, le richieste vengono ritardate fino a quando i token non diventano disponibili.

Configura il limite di frequenza per il gestore del controller con spazio dei nomi

Se Config Connector è configurato per funzionare in modalità con spazi 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 controllore in Config Connector versione 1.119 e successive.

  1. Crea un file denominato configure-rate-limit.yaml e copia al suo interno il seguente codice 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
    

    Sostituisci NAMESPACE con il nome dello 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 il seguente 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 contenitore del gestore del controller cnrm-controller-manager eseguendo il seguente 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 velocità 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 nome nello spazio dei nomi, ma in questo caso devi utilizzare la RP ControllerReconciler anziché NamespacedControllerReconciler, come nell'esempio seguente:

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