Come posso configurare i nodi worker di Amazon EKS per pulire la cache delle immagini a una percentuale specifica di utilizzo del disco?

4 minuti di lettura
0

Desidero utilizzare i nodi worker di Amazon Elastic Kubernetes Service (Amazon EKS) per pulire la cache delle immagini al raggiungimento di una percentuale specifica di utilizzo del disco.

Breve descrizione

Per pulire la cache delle immagini con i nodi worker di Amazon EKS, utilizza i seguenti argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet:

  • L'argomento --image-gc-high-threshold definisce la percentuale di utilizzo del disco che attiva la rimozione di oggetti inutili (garbage collection) per l’immagine. Il valore predefinito è 85%.
  • L'argomento**--image-gc-low-threshold** definisce il valore lowThresholdPercent. Il kubelet elimina le immagini finché l'utilizzo del disco non raggiunge tale valore. Il valore predefinito è 50%.

Nota: nella risoluzione seguente, gli argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet puliscono la cache delle immagini nel nodo worker quando l'utilizzo del disco raggiunge il 70%. --image-gc-high-threshold è impostato al 70%. --image-gc-low-threshold è impostato al 50%.

In base al caso d'uso, segui i passaggi di risoluzione per aggiungere il processo di rimozione di oggetti inutili (garbage collection) del kubelet al file di configurazione predefinito o a un nodo esistente. Quindi, verifica che nell’endpoint del nodo siano presenti gli argomenti.

Per ulteriori informazioni, consulta la sezione Rimozione di oggetti inutili (garbage collection) di container e immagini inutilizzati sul sito Web di Kubernetes.

Soluzione

Nota: la seguente soluzione si applica alle AMI Linux ottimizzate per Amazon EKS.

Aggiungi gli argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet al file kubelet-config predefinito

Utilizza la funzionalità Modello di avvio personalizzato di Amazon EKS per aggiungere gli argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet al file kubelet-config predefinito in Amazon Machine Image (AMI). Quando crei il modello di avvio, specifica gli argomenti in UserData.

  1. Il comando seguente aggiorna il file KUBELET_CONFIG nell’AMI. Imposta imageGCHighThresholdPercent=70 e imageGCLowThresholdPercent=60. Per ulteriori informazioni, consulta la sezione Configurare i dettagli dell’istanza.
    #!/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: sostituisci your-cluster-name con il nome del tuo cluster Amazon ECS. Se non usi il file kubelet-config predefinito, aggiorna il nome del file.
  2. Crea un gruppo nodi worker con il modello di avvio.

Aggiungi gli argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet a un nodo worker esistente

Importante: i passaggi seguenti richiedono la connessione a un nodo worker esistente con SSH e l'accesso sudo. È necessario completare questi passaggi in tutti i nodi worker esistenti nel cluster Amazon EKS.

  1. Connettiti a un nodo worker esistente tramite SSH.

  2. Apri il file /etc/kubernetes/kubelet/kubelet-config.json nei tuoi nodi worker. Se hai avviato il nodo worker con EKSCTL, apri /etc/eksctl/kubelet.yaml:

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json
    #WORKER NODES LAUNCHED USING EKSCTL
    
    sudo vi /etc/eksctl/kubelet.yaml
  3. In base a come hai avviato i tuoi nodi worker, aggiungi gli argomenti del proesso di rimozione di oggetti inutili (garbage collection) del kubelet al file kubelet-config.json o kubelet.yaml. Quindi, salva il file:

    {  "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. Per riavviare il servizio kubelet nel nodo worker, esegui il seguente comando:

    sudo service kubelet restart

Verifica che i nuovi argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet siano nell'endpoint configz del nodo

  1. Per ottenere il nome dei nodi worker, esegui il comando seguente:

    kubectl get nodes
  2. Per aprire una connessione al server API, esegui il comando:

    kubectl proxy
  3. Per controllare il nodo configz, apri una nuova finestra terminale. Esegui il seguente:

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

    Nota: sostituisci node_name con il nome del tuo nodo dall'elenco dei nodi recuperato in precedenza. Se non sono disponibili cURL e Python, apri l'URL in un browser Web.

    Questo comando restituisce l'output di kubeletconfig. Questo output include le impostazioni del file bootstrap.sh. Considera l'esempio seguente:

    {"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
      .
      .
    }
    }
AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa