Deseo usar los nodos de trabajo de Amazon Elastic Kubernetes Service (Amazon EKS) para limpiar la caché de imágenes en un porcentaje específico del uso del disco.
Breve descripción
Para limpiar la caché de imágenes con los nodos de trabajo de Amazon EKS, utiliza los siguientes argumentos de recopilación de elementos no utilizados de kubelet:
- --image-gc-high-threshold define el porcentaje de uso del disco que kubelet inicia para ejecutar la recopilación de elementos no utilizados de imágenes.
Nota: El valor predeterminado para este argumento es del 85 %.
- --image-gc-low-threshold define el porcentaje más bajo de uso del disco en el que kubelet ejecuta la recopilación de elementos no utilizados de imágenes de kubelet.
Nota: El valor predeterminado para este argumento es del 80 %.
Según tu caso de uso, agrega la recopilación de elementos no utilizados de kubelet al archivo de configuración predeterminado o a un nodo existente. A continuación, comprueba que los argumentos existan en el punto de enlace del nodo.
Para obtener más información, consulte Garbage collection of unused containers and images en el sitio web de Kubernetes.
Solución
Nota: La siguiente resolución se aplica a las imágenes de máquina de Amazon (AMI) de Linux optimizadas para Amazon EKS.
Cómo agregar los argumentos de recopilación de elementos no utilizados de kubelet al archivo kubelet-config predeterminado
Sigue estos pasos:
- Para actualizar el archivo kubelet-config en la AMI, ejecuta el siguiente comando:
#!/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
Nota: Sustituye your-cluster-name por el nombre de tu clúster de Amazon EKS. Si no usas el archivo de configuración predeterminado de kubelet, sustituye kubelet-config.json por tu nombre de archivo. El comando anterior establece imageGCHighThresholdPercent en 70 % y imageGCLowThresholdPercent en 60 %. Como resultado, kubelet limpia la caché de imágenes en el nodo de trabajo cuando el uso del disco alcanza el 70 %. Si el uso del disco es inferior al 60 %, kubelet no limpia la caché de imágenes.
- Crea un grupo de nodos de trabajo con la plantilla de inicio.
Cómo agregar los argumentos de recopilación de elementos no utilizados de kubelet a un nodo de trabajo existente
Requisitos previos: Debes tener acceso de conexión SSH a un nodo de trabajo existente y tener acceso sudo.
Para agregar argumentos de recopilación de elementos no utilizados de kubelet a un nodo de trabajo existente, sigue estos pasos:
-
Usa SSH para conectarte a un nodo de trabajo existente.
-
Para abrir el archivo /etc/kubernetes/kubelet/kubelet-config.json en tus nodos de trabajo, ejecuta el siguiente comando:
sudo vi /etc/kubernetes/kubelet/kubelet-config.json
Si has iniciado el nodo de trabajo con eksctl, ejecuta el siguiente comando para abrir /etc/eksctl/kubelet.yaml:
sudo vi /etc/eksctl/kubelet.yaml
-
Agrega los argumentos de recopilación de elementos no utilizados de kubelet al archivo kubelet-config.json y, a continuación, guarda el archivo. Archivo de ejemplo:
{ "kind": "KubeletConfiguration", "apiVersion": "kubelet.config.k8s.io/v1beta1",
.
.
.
"imageGCHighThresholdPercent": 70, ==> Add the argument under the same alignment as the "kind"
"imageGCLowThresholdPercent": 60,
"maxPods": ...
}
Nota: El comando anterior establece imageGCHighThresholdPercent en 70 % y imageGCLowThresholdPercent en 60 %.
Si has iniciado el nodo de trabajo con eksctl, agrega los argumentos de recopilación de elementos no utilizados de kubelet al archivo kubelet.yaml y, a continuación, guarda el archivo. Archivo de ejemplo:
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
Nota: El comando anterior establece imageGCHighThresholdPercent en 70 % y imageGCLowThresholdPercent en 60 %.
-
Para reiniciar el servicio kubelet en el nodo de trabajo, ejecuta el siguiente comando:
sudo service kubelet restart
-
Repite los pasos de resolución anteriores para cada nodo de trabajo existente en tu clúster de Amazon EKS.
Cómo comprobar que los nuevos argumentos de recopilación de elementos no utilizados de kubelet estén en el punto de enlace configz del nodo
Sigue estos pasos:
-
Para obtener el nombre de los nodos de trabajo, ejecuta el siguiente comando:
kubectl get nodes
-
Para abrir una conexión con el servidor API, ejecuta el siguiente comando:
kubectl proxy
-
Para comprobar configz del nodo, abre un nuevo terminal y, a continuación, ejecuta el siguiente comando:
curl -sSL "http://localhost:8001/api/v1/nodes/node_name/proxy/configz" | python3 -m json.tool
Nota: Sustituye node_name por el nombre de tu nodo. Si no puedes usar curl o Python, abre la URL http://localhost:8001/api/v1/nodes/node_name/proxy/configz en un navegador web.
Resultado de ejemplo:
{"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
.
.
}
}
Nota: El resultado del comando anterior muestra la configuración del archivo bootstrap.sh de kubeletconfig.