Comment configurer les nœuds de travail Amazon EKS pour nettoyer le cache des images lorsqu’un pourcentage défini d'utilisation du disque est atteint ?

Dernière mise à jour : 04/11/2020

Je souhaite utiliser les nœuds de travail 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 nœuds de travail Amazon EKS, utilisez les arguments de nettoyage de mémoire kubelet suivants :

  • L'argument -image-gc-high-threshold définit le pourcentage d'utilisation du disque qui déclenche le nettoyage de la mémoire d'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 nettoyage de la mémoire kubelet sont utilisés pour nettoyer le cache d'image dans le nœud de travail 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 nettoyage de la mémoire kubelet à un nouveau nœud de travail, procédez comme suit dans les sections ci-dessous :

  • Ajouter les arguments de nettoyage de la mémoire kubelet au fichier kubelet-config par défaut dans l'Amazon Machine Image (AMI) Linux optimisée pour Amazon EKS
  • Vérifier que les nouveaux arguments de nettoyage de la 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 nettoyage de la mémoire kubelet à un nœud de travail existant
  • Vérifier que les nouveaux arguments de nettoyage de la 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 nettoyage de la mémoire kubelet au fichier kubelet-config par défaut dans l'AMI Linux optimisée pour Amazon EKS en utilisant UserData pour un nouveau nœud de travail

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 page É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 des arguments, suivez les étapes dans la section Vérifier que les nouveaux arguments de nettoyage de la mémoire kubelet se trouvent dans le point de terminaison configz du nœud.

Ajouter les arguments de nettoyage de la mémoire kubelet à un nœud de travail 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 nœuds de travail.

Si le nœud de travail a été lancé avec EKSCTL, ouvrez /etc/eksctl/kubelet.yaml.

Exemples :

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

#WORKER NODES LAUNCHED USING EKSCTL

sudo vi /etc/eksctl/kubelet.yaml

3.    Ajoutez les arguments de nettoyage de la mémoire kubelet au fichier kubelet-config.json ou kubelet.yaml, selon la façon dont vos nœuds de travail ont été lancés. Enregistrez ensuite le fichier.

Exemples :

{
  "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 des arguments, suivez les étapes dans la section Vérifier que les nouveaux arguments de nettoyage de la mémoire kubelet se trouvent dans le point de terminaison configz du nœud.

Vérifier que les nouveaux arguments de nettoyage de la 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 nom_du_nœud 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, vous pouvez ouvrir l'URL dans un navigateur Web.

La commande précédente renvoie la sortie de kubeletconfig, qui inclut vos paramètres du fichier bootstrap.sh .

Par exemple :

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

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?