Comment puis-je configurer les composants master Amazon EKS pour nettoyer le cache d’images selon le pourcentage d’utilisation du disque spécifié ?

Lecture de 5 minute(s)
0

Je souhaite utiliser les composants master Amazon Elastic Kubernetes Service (Amazon EKS) pour nettoyer le cache d’images selon le pourcentage d’utilisation du disque spécifié.

Brève description

Pour nettoyer le cache d’images à l’aide des composants master Amazon EKS, utilisez les arguments de récupérateur de mémoire kubelet suivants :

  • L’argument --image-gc-high-threshold définit le pourcentage d’utilisation du disque qui déclenche le lancement du récupérateur de mémoire d’images. La valeur par défaut est de 85 %.
  • L’argument --image-gc-low-threshold définit la valeur LowThresholdPercent. Le kubelet supprime les images jusqu’à ce que l’utilisation du disque atteigne cette valeur. La valeur par défaut est de 50 %.

Remarque : dans la résolution suivante, les arguments de récupérateur de mémoire kubelet nettoient le cache d’images dans le composant master lorsque l’utilisation du disque atteint 70 %. Le seuil --image-gc-high-threshold est défini sur 70 %. Le seuil --image-gc-low-threshold est défini sur 50 %.

En fonction de votre cas d’utilisation, suivez les étapes de résolution pour ajouter le récupérateur de mémoire kubelet au fichier de configuration par défaut ou à un bode existant. Vérifiez ensuite que les arguments existent bien au point de terminaison du nœud.

Pour plus d’informations, consultez la section Garbage collection of unused containers and images sur le site Web de Kubernetes.

Résolution

Remarque : la résolution suivante s’applique aux AMI Linux optimisées pour Amazon EKS.

Ajouter des arguments de récupérateur de mémoire kubelet à la configuration par défaut de kubelet-config

À l’aide de la fonctionnalité de modèle de lancement personnalisé d’Amazon EKS, ajoutez les arguments de récupérateur de mémoire kubelet au fichier kubelet-config par défaut dans l’Amazon Machine Image (AMI). Lorsque vous créez le modèle de lancement, spécifiez des arguments dans UserData.

  1. La commande suivante met à jour le fichier KUBELET_CONFIG dans l’AMI. Elle définit imageGCHighThresholdPercent=70 et imageGCLowThresholdPercent=60. Pour plus d’informations, consultez la section Configuration des détails de l’instance.
    #!/bin/bash
    set -o xtrace
    
    KUBELET_CONFIG=/etc/kubernetes/kubelet/kubelet-config.json
    
    # Inject imageGCHighThresholdPercent value unless it has already been set.
    if ! grep -q imageGCHighThresholdPercent $KUBELET_CONFIG;
    then
    echo "$(jq ".imageGCHighThresholdPercent=70" $KUBELET_CONFIG)" > $KUBELET_CONFIG
    fi
    
    # Inject imageGCLowThresholdPercent value unless it has already been set.
    if ! grep -q imageGCLowThresholdPercent $KUBELET_CONFIG;
    then
    echo "$(jq ".imageGCLowThresholdPercent=60" $KUBELET_CONFIG)" > $KUBELET_CONFIG
    fi
    
    /etc/eks/bootstrap.sh your-cluster-name
    Remarque : remplacez your-cluster-name par le nom du cluster Amazon EKS. Si vous n’utilisez pas le fichier de configuration kubelet par défaut, mettez à jour le nom du fichier.
  2. Créez un groupe de composants master avec le modèle de lancement.

Ajouter des arguments de récupérateur de mémoire kubelet à un composant master existant

Important : les étapes suivantes exigent de se connecter à un composant master via SSH et de disposer d’un accès sudo. Vous devez effectuer ces étapes sur tous les composants master du cluster Amazon EKS.

  1. Connectez-vous à un composant master via SSH.

  2. Ouvrez le fichier /etc/kubernetes/kubelet/kubelet-config.json dans les composants master. Si vous avez lancé le composant master avec EKSCTL, ouvrez le fichier /etc/eksctl/kubelet.yaml :

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json
    #WORKER NODES LAUNCHED USING EKSCTL
    
    sudo vi /etc/eksctl/kubelet.yaml
  3. En fonction de la façon dont vous avez lancé les composants master, ajoutez les arguments de récupérateur de mémoire kubelet au fichier kubelet-config.json ou kubelet.yaml. Enregistrez ensuite le fichier :

    {  "kind": "KubeletConfiguration",
      "apiVersion": "kubelet.config.k8s.io/v1beta1",
      .
      .
      .
      "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
      "imageGCLowThresholdPercent": 60,
      "maxPods": ...
    }
    
    
    #WORKER NODES LAUNCHED USING EKSCTL
    
    kind: KubeletConfiguration
    kubeReserved:
      cpu: 70m
      ephemeral-storage: 1Gi
      memory: 1843Mi
    serverTLSBootstrap: true
    imageGCHighThresholdPercent: 70        ==> Add the arguments under the alignment "Kind" in the yaml file
    imageGCLowThresholdPercent: 60
  4. Pour redémarrer le service kubelet dans le composant master, exécutez la commande suivante :

    sudo service kubelet restart

Vérifier que les nouveaux arguments du récupérateur de mémoire kubelet se trouvent bien dans le point de terminaison du nœud configz

  1. Pour obtenir le nom des composants master, exécutez la commande suivante :

    kubectl get nodes
  2. Pour ouvrir une connexion au serveur d’API, exécutez la commande suivante :

    kubectl proxy
  3. Pour vérifier la configuration du nœud, ouvrez un nouveau terminal. Exécutez ensuite la commande suivante :

    curl -sSL "http://localhost:8001/api/v1/nodes/node_name/proxy/configz" | python3 -m json.tool

    Remarque : remplacez node_name par le nom du nœud figurant dans la liste des nœuds que vous avez récupérée précédemment. Si cURL et Python ne sont pas disponibles, ouvrez l’URL dans un navigateur Web.

    Cette commande renvoie le résultat du kubeletconfig. Cette sortie inclut les paramètres que vous avez définis dans le fichier bootstrap.sh. Reportez-vous à l’exemple suivant :

    {"kubeletconfig": {
      .
      .
      "imageGCHighThresholdPercent": 70,          <=== The new value is set to 70 as given in UserData
      "imageGCLowThresholdPercent": 60,           <=== The new value is set to 50 as given in UserData
      .
      .
    }
    }
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un mois