Passer au contenu

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 :

  • --image-gc-high-threshold définit le pourcentage d'utilisation du disque pendant lequel kubelet commence à exécuter la récupération de mémoire.
    Remarque : La valeur par défaut pour cet argument est de 85 %.
  • --image-gc-low-threshold définit le pourcentage le plus faible d'utilisation du disque sur lequel kubelet exécute la récupération de mémoire d’images kubelet.
    Remarque : La valeur par défaut pour cet argument est de 80 %.

En fonction de votre cas d'utilisation, ajoutez le récupérateur de mémoire kubelet au fichier de configuration par défaut ou à un nœud existant. Puis, vérifiez que les arguments existent bien dans le 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 Amazon Machine Images (AMI) Linux optimisées pour Amazon EKS.

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

Procédez comme suit :

  1. Pour mettre à jour le fichier kubelet-config dans l'AMI, exécutez la commande suivante :
    #!/bin/bashset -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, remplacez kubelet-config.json par votre nom de fichier. La commande précédente définit imageGCHighThresholdPercent sur 70 % et imageGCLowThresholdPercent sur 60 %. Par conséquent, kubelet nettoie le cache d'images dans le composant master lorsque l'utilisation du disque atteint 70 %. Si l'utilisation du disque est inférieure à 60 %, kubelet ne nettoie pas le cache d'images.
  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

Prérequis : Vous devez disposer d'un accès par connexion SSH à un composant master existant et d'un accès sudo.

Pour ajouter des arguments de récupérateur de mémoire kubelet à un composant master existant, procédez comme suit :

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

  2. Pour ouvrir le fichier /etc/kubernetes/kubelet/kubelet-config.json dans vos composants master, exécutez la commande suivante :

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json

    Si vous avez lancé le composant master avec eksctl, exécutez la commande suivante pour ouvrir /etc/eksctl/kubelet.yaml :

    sudo vi /etc/eksctl/kubelet.yaml
  3. Ajoutez les arguments de récupérateur de mémoire kubelet au fichier kubelet-config.json, puis enregistrez le fichier. Exemple de fichier :

    {  "kind": "KubeletConfiguration",  "apiVersion": "kubelet.config.k8s.io/v1beta1",
      .
      .
      .
      "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
      "imageGCLowThresholdPercent": 60,
      "maxPods": ...
    }

    Remarque : La commande précédente définit imageGCHighThresholdPercent sur 70 % et imageGCLowThresholdPercent sur 60 %.
    Si vous avez lancé le composant master avec eksctl, ajoutez les arguments de récupérateur de mémoire kubelet au fichier kubelet.yaml, puis enregistrez le fichier. Exemple de fichier :

    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

    Remarque : La commande précédente définit imageGCHighThresholdPercent sur 70 % et imageGCLowThresholdPercent sur 60 %.

  4. Pour redémarrer le service kubelet dans le composant master, exécutez la commande suivante :

    sudo service kubelet restart
  5. Répétez les étapes de résolution précédentes pour chaque composant master existant dans votre cluster Amazon EKS.

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

Procédez comme suit :

  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 node configz, ouvrez un nouveau terminal, puis exécutez 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 de votre nœud. Si vous ne pouvez pas utiliser curl ou Python, ouvrez l'URL http://localhost:8001/api/v1/nodes/node_name/proxy/configz dans un navigateur Web.
    Exemple de sortie :

    {"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
      .
      .
    }
    }

    Remarque : La sortie de commande précédente indique vos paramètres pour le fichier bootstrap.sh du kubeletconfig.

AWS OFFICIELA mis à jour il y a un an