Comment configurer les composants master Amazon EKS pour nettoyer le cache des images lorsqu'un pourcentage défini d'utilisation du disque est atteint ?

Lecture de 5 minute(s)
0

Je souhaite utiliser les composants master Amazon Elastic Kubernetes Service (Amazon EKS) pour nettoyer le cache des images à un pourcentage défini d'utilisation du disque.

Brève description

Pour nettoyer le cache des images avec les composants master Amazon EKS, utilisez les arguments de récupérateur de mémoire kubelet (issus du site web de Kubernets, langue française non garantie) suivants :

  • L'argument -image-gc-high-threshold définit le pourcentage d'utilisation du disque à l'origine du récupérateur de mémoire de l'image. La valeur par défaut est 85 %.
  • L'argument --image-gc-low-threshold définit le pourcentage d'utilisation du disque que le nettoyage de la mémoire d'images tente de libérer. La valeur par défaut est 80 %.

Remarque : dans la solution suivante, les arguments de récupérateur de mémoire kubelet nettoient le cache d'image dans le composant masterl lorsque l'utilisation du disque atteint 70 %. -image-gc-high-threshold a la valeur 70 %. --image-gc-low-threshold a la valeur 50 %.

Pour ajouter des arguments de récupérateur de mémoire kubelet à un nouveau composant master, procédez comme indiqué dans les sections ci-dessous :

  • Ajouter les arguments de récupérateur de mémoire kubelet au fichier kubelet-config par défaut dans Amazon Machine Image (AMI) en utilisant UserData pour un nouveau composant master
  • Vérifier que les nouveaux arguments de récupérateur de mémoire kubelet se trouvent dans le point de terminaison configz du nœud

Pour ajouter des arguments de nettoyage de la mémoire kubelet à un nœud de travail existant, procédez comme suit dans les sections ci-dessous :

  • Ajouter les arguments de récupérateur de mémoire kubelet à un composant master existant
  • Vérifier que les nouveaux arguments de récupérateur de mémoire kubelet se trouvent dans le point de terminaison configz du nœud

Résolution

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

Ajouter les arguments de récupérateur de mémoire kubelet au fichier kubelet-config par défaut dans l'AMI en utilisant UserData pour un nouveau composant master

1.    Lancez une instance Amazon Elastic Compute Cloud (Amazon EC2).

Utilisez les commandes sed pour ajouter --image-gc-low-threshold et --image-gc-high-threshold au fichier kubelet-config.json dans l'AMI Linux optimisée pour Amazon EKS. Les commandes sed se trouvent dans la section UserData de la rubrique Étape 3 : Configurer les détails de l'instance.

Par exemple :

#!/bin/bash
set -o xtrace

# Inject imageGCHighThresholdPercent value unless it has already been set.
if ! grep -q imageGCHighThresholdPercent /etc/kubernetes/kubelet/kubelet-config.json; 
then 
    sed -i '/"apiVersion*/a \ \ "imageGCHighThresholdPercent": 70,' /etc/kubernetes/kubelet/kubelet-config.json
fi

# Inject imageGCLowThresholdPercent value unless it has already been set.
if ! grep -q imageGCLowThresholdPercent /etc/kubernetes/kubelet/kubelet-config.json; 
then 
    sed -i '/"imageGCHigh*/a \ \ "imageGCLowThresholdPercent": 50,' /etc/kubernetes/kubelet/kubelet-config.json
fi

/etc/eks/bootstrap.sh your-cluster-name

Remarque : remplacez your-cluster-name par le nom de votre cluster Amazon EKS. Si vous utilisez un autre fichier de configuration kubelet, mettez à jour le nom du fichier dans les commandes sed.

2.    Ajoutez le nœud de travail à votre cluster Amazon EKS.

3.    Pour vérifier les modifications, suivez les étapes dans la section Vérifier que les nouveaux arguments de récupérateur de mémoire kubelet se trouvent dans le point de terminaison configz du nœud.

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

Important : les étapes suivantes nécessitent que vous vous connectiez à un nœud de travail existant avec SSH et que vous disposiez d'un accès sudo. Ces étapes doivent être effectuées sur tous les nœuds de travail existants de votre cluster Amazon EKS.

1.    Connectez-vous à un nœud de travail existant en utilisant SSH.

2.    Ouvrez le fichier /etc/kubernetes/kubelet/kubelet-config.json dans vos composants master.

Si vous lancez le composant master avec EKSCTL, ouvrez /etc/eksctl/kubelet.yaml. Reportez-vous à l'exemple suivant :

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

#WORKER NODES LAUNCHED USING EKSCTL

sudo vi /etc/eksctl/kubelet.yaml

3.    Ajoutez les arguments de récupérateur de mémoire kubelet au fichier kubelet-config.json ou kubelet.yaml, selon la façon dont vous avez lancé vos composants master. Enregistrez ensuite le fichier. Reportez-vous à l'exemple suivant :

{
  "kind": "KubeletConfiguration",
  "apiVersion": "kubelet.config.k8s.io/v1beta1",
  .
  .
  .
  "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
  "imageGCLowThresholdPercent": 50,
  "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: 50

4.    Pour redémarrer le service kubelet dans le nœud de travail, exécutez la commande suivante :

sudo service kubelet restart

5.    Pour vérifier les modifications, suivez les étapes dans la section Vérifier que les nouveaux arguments de récupérateur de mémoire kubelet se trouvent dans le point de terminaison configz du nœud.

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

1.    Pour obtenir le nom de vos nœuds de travail, 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, 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 dans la liste des nœuds récupérés à l'étape 1. Si curl et Python ne sont pas disponibles, ouvrez l'URL dans un navigateur Web.

La commande précédente renvoie la sortie de la fonction kubeletconfig. Cette sortie inclut les paramètres du fichier bootstrap.sh. Reportez-vous à l'exemple suivant :

{
"kubeletconfig": {
  .
  .
  "imageGCHighThresholdPercent": 70,          <=== The new value is set to 70 as given in UserData
  "imageGCLowThresholdPercent": 50,           <=== The new value is set to 50 as given in UserData
  .
  .
}
}

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 mois