Salta al contenuto

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

5 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:

  • --image-gc-high-threshold definisce la percentuale di utilizzo del disco che kubelet avvia per eseguire il processo di rimozione delle immagini inutili (garbage collection).
    Nota: l'impostazione predefinita per questo argomento è 85%.
  • --image-gc-low-threshold definisce la percentuale più bassa di utilizzo del disco su cui il kubelet esegue il suo processo di rimozione delle immagini inutili (garbage collection).
    Nota: l'impostazione predefinita per questo argomento è 80%.

In base al caso d'uso, aggiungi 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 risoluzione si applica alle Amazon Machine Image (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

Completa i seguenti passaggi:

  1. Per aggiornare il file kubelet-config nell'AMI, esegui questo 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: sostituisci your-cluster-name con il nome del tuo cluster Amazon EKS. Se non utilizzi il file di configurazione kubelet predefinito, sostituisci kubelet-config.json con il nome del tuo file. Il comando precedente imposta imageGCHighThresholdPercent sul 70% e imageGCLowThresholdPercent sul 60%. Di conseguenza, il kubelet pulisce la cache delle immagini nel nodo di lavoro quando l'utilizzo del disco raggiunge il 70%. Se l'utilizzo del disco è inferiore al 60%, il kubelet non pulisce la cache delle immagini.
  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

Prerequisiti: devi disporre dell'accesso tramite connessione SSH a un nodo worker esistente e disporre dell'accesso sudo.

Per aggiungere gli argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet a un nodo di lavoro esistente, completa i seguenti passaggi:

  1. Utilizza SSH per connetterti a un nodo worker esistente.

  2. Per aprire il file /etc/kubernetes/kubelet/kubelet-config.json nei nodi worker, esegui questo comando:

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

    Se hai avviato il nodo worker con eksctl, esegui questo comando per aprire /etc/eksctl/kubelet.yaml:

    sudo vi /etc/eksctl/kubelet.yaml
  3. Aggiungi gli argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet al file kubelet-config.json, quindi salva il file. Esempio di file:

    {  "kind": "KubeletConfiguration",  "apiVersion": "kubelet.config.k8s.io/v1beta1",
      .
      .
      .
      "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
      "imageGCLowThresholdPercent": 60,
      "maxPods": ...
    }

    Nota: il comando precedente imposta imageGCHighThresholdPercent su 70% e imageGCLowThresholdPercent sul 60%.
    Se hai avviato il nodo worker con eksctl, aggiungi gli argomenti del processo di rimozione di oggetti inutili (garbage collection) del kubelet al file kubelet.yaml, quindi salva il file. Esempio di file:

    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: il comando precedente imposta imageGCHighThresholdPercent su 70% e imageGCLowThresholdPercent sul 60%.

  4. Per riavviare il servizio kubelet nel nodo worker, esegui questo comando:

    sudo service kubelet restart
  5. Ripeti i passaggi di risoluzione precedenti per ogni nodo worker esistente nel cluster Amazon EKS.

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

Completa i seguenti passaggi:

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

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

    kubectl proxy
  3. Per controllare l'endpoint configz del nodo, apri un nuovo terminale ed esegui questo comando:

    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. Se non riesci a usare curl o Python, apri l'URL http://localhost:8001/api/v1/nodes/node_name/proxy/configz in un browser web.
    Esempio di output:

    {"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: l'output del comando precedente mostra le impostazioni per il file bootstrap.sh da kubeletconfig.

AWS UFFICIALEAggiornata un anno fa