Wie konfiguriere ich Amazon EKS-Worker-Knoten, um den Image-Cache bei einem bestimmten Prozentsatz der Festplattennutzung zu bereinigen?

Lesedauer: 4 Minute
0

Ich möchte Amazon Elastic Kubernetes Service (Amazon EKS) Worker-Knoten verwenden, um den Image-Cache bei einem bestimmten Prozentsatz der Festplattennutzung zu bereinigen.

Kurzbeschreibung

Verwenden Sie die folgenden Kubelet-Garbage Collection-Argumente, um den Image-Cache mit Amazon EKS-Worker-Knoten zu bereinigen:

  • Das Argument \ --image-gc-high-threshold definiert den Prozentsatz der Festplattennutzung, der die Image Garbage Collection initiiert. Die Standardeinstellung ist 85 %.
  • Das Argument \ --image-gc-low-threshold definiert den LowThresholdPercent-Wert. Das Kubelet löscht Bilder, bis die Festplattennutzung diesen Wert erreicht. Die Standardeinstellung ist 50 %.

**Hinweis:**In der folgenden Behebung bereinigen die Kubelet Garbage Collection-Argumente den Image-Cache im Worker-Knoten, wenn die Festplattennutzung 70 % erreicht. Der --image-gc-high-threshold ist auf 70 % gesetzt. Der --image-gc-low-threshold ist auf 50 % gesetzt.

Folgen Sie je nach Anwendungsfall den Lösungsschritten, um die Kubelet Garbage Collection zur Standardkonfigurationsdatei oder einem vorhandenen Bode hinzuzufügen. Stellen Sie dann sicher, dass die Argumente im Knotenendpunkt vorhanden sind.

Weitere Informationen finden Sie auf der Kubernetes-Website unter Garbage Collection ungenutzter Container und Images.

Behebung

**Hinweis:**Die folgende Behebung gilt für Amazon EKS-optimierte Linux-AMIs.

Hinzufügen der Kubelet Garbage Collection-Argumente zur Standard-Kubelet-Konfiguration

Verwenden Sie die Funktion Benutzerdefinierte Startvorlage von Amazon EKS, um die Kubelet Garbage Collection-Argumente zur Standard-Kubelet-Konfigurationsdatei im Amazon Machine Image (AMI) hinzuzufügen. Wenn Sie die Startvorlage erstellen, geben Sie Argumente in UserData an.

  1. Der folgende Befehl aktualisiert die KUBELET\ _CONFIG-Datei in AMI. Er setzt imageGCHighThresholdPercent=70 und imageGCLowThresholdPercent=60. Weitere Informationen finden Sie unter Instance-Details konfigurieren.
    #!/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
    Hinweis: Ersetzen Sie your-cluster-name durch den Namen Ihres Amazon EKS-Clusters. Wenn Sie nicht die Standard-Kubelet-Konfigurationsdatei verwenden, aktualisieren Sie den Dateinamen.
  2. Erstellen Sie eine Worker-Knotengruppe mit der Startvorlage.

Fügen Sie die Kubelet Garbage Collection-Argumente zu einem vorhandenen Worker-Knoten hinzu

**Wichtig:**Für die folgenden Schritte müssen Sie über SSH eine Verbindung zu einem vorhandenen Worker-Knoten herstellen und über Sudo-Zugriff verfügen. Sie müssen diese Schritte auf allen vorhandenen Worker-Knoten in Ihrem Amazon EKS-Cluster ausführen.

  1. Stellen Sie mithilfe von SSH eine Verbindung zu einem vorhandenen Worker-Knoten her.

  2. Öffnen Sie die Datei /etc/kubernetes/kubelet/kubelet-config.json in Ihren Worker-Knoten. Wenn Sie den Worker-Knoten mit EKSCTL gestartet haben, öffnen Sie /etc/eksctl/kubelet.yaml:

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json
    #WORKER NODES LAUNCHED USING EKSCTL
    
    sudo vi /etc/eksctl/kubelet.yaml
  3. Je nachdem, wie Sie Ihre Worker-Knoten gestartet haben, fügen Sie die Kubelet Garbage Collection-Argumente zur Datei kubelet-config.json oder kubelet.yaml hinzu. Speichern Sie dann die Datei:

    {  "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. Führen Sie den folgenden Befehl aus, um den Kubelet-Dienst im Worker-Knoten neu zu starten:

    sudo service kubelet restart

Stellen Sie sicher, dass sich die neuen Kubelet Garbage Collection-Argumente im Configz-Endpunkt des Knotens befinden.

  1. Führen Sie den folgenden Befehl aus, um den Namen Ihrer Worker-Knoten abzurufen:

    kubectl get nodes
  2. Führen Sie den folgenden Befehl aus, um eine Verbindung zum API-Server herzustellen:

    kubectl proxy
  3. Öffnen Sie ein neues Terminal, um die Konfiguration des Knotens zu überprüfen. Führen Sie dann den folgenden Befehl aus:

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

    **Hinweis:**Ersetzen Sie node\ _name durch Ihren Knotennamen aus der Liste der Knoten, die Sie zuvor abgerufen haben. Wenn cURL und Python nicht verfügbar sind, öffnen Sie die URL in einem Webbrowser.

    Dieser Befehl gibt die Ausgabe von kubeletconfig zurück. Diese Ausgabe beinhaltet Ihre Einstellungen aus der Datei bootstrap.sh. Siehe folgendes Beispiel:

    {"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 OFFICIAL
AWS OFFICIALAktualisiert vor einem Monat