¿Cómo configuro los nodos de trabajo de Amazon EKS para limpiar la caché de imágenes en un porcentaje específico de uso del disco?

5 minutos de lectura
0

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, utilice los siguientes argumentos de recopilación de elementos no utilizados de kubelet:

  • El argumento --image-gc-high-threshold define el porcentaje de uso del disco que inicia la recopilación de imágenes no utilizadas. El valor predeterminado es 85 %.
  • El argumento --image-gc-low-threshold define el valor LowThresholdPercent. El kubelet elimina las imágenes hasta que el uso del disco alcance este valor. El valor predeterminado es 50 %.

Nota: En la siguiente solución, los argumentos de recopilación de elementos no utilizados de kubelet limpian la caché de imágenes en el nodo de trabajo cuando el uso del disco alcanza el 70 %. El argumento --image-gc-high-threshold está configurado en 70 %. El argumento --image-gc-low-threshold está configurado en 50 %.

Según su caso de uso, siga los pasos indicados en la solución para añadir la recopilación de elementos no utilizados de kubelet al archivo de configuración predeterminado o a un nodo existente. A continuación, compruebe 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 solución es aplicable a las AMI de Amazon Linux optimizadas para Amazon EKS.

Cómo añadir los argumentos de recopilación de elementos no utilizados de kubelet al archivo kubelet-config predeterminado

Utilice la característica de plantilla de lanzamiento personalizada de Amazon EKS para añadir los argumentos de recopilación de elementos no utilizados de kubelet al archivo kubelet-config predeterminado de la imagen de máquina de Amazon (AMI). Al crear la plantilla de lanzamiento, especifique los argumentos en UserData.

  1. El siguiente comando actualiza el archivo KUBELET_CONFIG en la AMI. Establece imageGCHighThresholdPercent=70 y imageGCLowThresholdPercent=60. Para obtener más información, consulte Configurar los detalles de la instancia.
    #!/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
    Nota: Sustituya your-cluster-name por el nombre de su clúster de Amazon EKS. Si no utiliza el archivo de configuración predeterminado de kubelet, actualice el nombre del archivo.
  2. Cree un grupo de nodos de trabajo con la plantilla de lanzamiento.

Cómo añadir los argumentos de recopilación de elementos no utilizados de kubelet a un nodo de trabajo existente

Importante: Los pasos siguientes requieren que se conecte a un nodo de trabajo existente con SSH y cuente con acceso sudo. Debe completar estos pasos en todos los nodos de trabajo existentes en su clúster de Amazon EKS.

  1. Conéctese a un nodo de trabajo existente mediante SSH.

  2. Abra el archivo /etc/kubernetes/kubelet/kubelet-config.json en sus nodos de trabajo. Si ha lanzado el nodo de trabajo con EKSCTL, abra /etc/eksctl/kubelet.yaml:

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json
    #WORKER NODES LAUNCHED USING EKSCTL
    
    sudo vi /etc/eksctl/kubelet.yaml
  3. Según cómo haya lanzado sus nodos de trabajo, añada los argumentos de recopilación de elementos no utilizados de kubelet al archivo kubelet-config.json o kubelet.yaml. A continuación, guarde el archivo:

    {  "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. Para reiniciar el servicio kubelet en el nodo de trabajo, ejecute el siguiente comando:

    sudo service kubelet restart

Cómo comprobar que los nuevos argumentos de recopilación de elementos no utilizados de kubelet estén en el punto de enlace node configz

  1. Para obtener el nombre de los nodos de trabajo, ejecute el siguiente comando:

    kubectl get nodes
  2. Para abrir una conexión con el servidor API, ejecute el siguiente comando:

    kubectl proxy
  3. Para comprobar la configuración del nodo, abre una nueva terminal. A continuación, ejecute el siguiente comando:

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

    Nota: Sustituya node_name por el nombre de su nodo de la lista de nodos que ha recuperado anteriormente. Si cURL y Python no están disponibles, abra la URL en un navegador web.

    Este comando devuelve el resultado de kubeletconfig. Este resultado incluye la configuración del archivo bootstrap.sh. Vea el siguiente 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
      .
      .
    }
    }
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un mes