Configurer la limite de débit du gestionnaire de contrôleurs


Cette page explique comment configurer la limite de débit globale (limite de débit du bucket de jetons) pour le gestionnaire de contrôleurs dans Config Connector.

La limite de débit contrôle le nombre de requêtes envoyées par Config Connector au serveur d'API Kubernetes. Il existe deux paramètres:

  • Le paramètre qps (requêtes par seconde) détermine le débit moyen auquel Config Connector peut envoyer des requêtes au serveur d'API Kubernetes.

  • La valeur burst permet d'envoyer plus de requêtes que la limite qps pendant de courtes périodes. Cela permet à Config Connector de procéder à une réconciliation rapide, même lorsque des requêtes supplémentaires sont requises auprès du serveur d'API Kubernetes, par exemple lors de l'application d'un nouveau lot de configuration à l'aide de GitOps.

Vous pouvez considérer l'algorithme de "token bucket" pour la limitation de débit comme suit : imaginez un seau de jetons de capacité burst, qui est rempli au débit qps. Chaque requête nécessite un jeton du bucket. Si le bucket est vide, les requêtes sont retardées jusqu'à ce que les jetons soient disponibles.

Configurer la limite de débit pour le gestionnaire de contrôleurs avec espace de noms

Si Config Connector est configuré pour s'exécuter en mode espace de noms, vous pouvez utiliser la ressource personnalisée NamespacedControllerReconciler pour configurer la limite de débit du client Kubernetes du contrôleur cnrm-controller-manager dans votre espace de noms désigné. Vous pouvez configurer la limite de débit pour ce contrôleur dans Config Connector 1.119 et versions ultérieures.

  1. Créez un fichier nommé configure-rate-limit.yaml et copiez-y le YAML ci-dessous:

    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
    

    Remplacez NAMESPACE par le nom de votre espace de noms.

  2. Utilisez kubectl apply pour appliquer la configuration de la limite de débit à votre cluster:

    kubectl apply -f configure-rate-limit.yaml
  3. Vérifiez que la configuration a réussi en exécutant la commande suivante:

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

    Le résultat doit afficher le champ status.healthy défini sur true.

  4. Vérifiez que les indicateurs --qps et --burst sont ajoutés au conteneur de gestion du contrôleur cnrm-controller-manager en exécutant la commande suivante:

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

    La sortie doit contenir les éléments suivants :

    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
    

Configurer la limite de débit en mode cluster

À partir de la version 1.125, si Config Connector est configuré pour s'exécuter en mode cluster, vous pouvez configurer la limite de débit du client Kubernetes du contrôleur cnrm-controller-manager à l'aide de la ressource personnalisée ControllerReconciler. L'utilisation est semblable au mode avec espace de noms, mais dans ce cas, vous devez utiliser le CR ControllerReconciler au lieu de NamespacedControllerReconciler, comme dans l'exemple suivant:

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