Vertical Pod Autoscaler - Amazon EKS

Vertical Pod Autoscaler

Der Kubernetes Vertical Pod Autoscaler passt die CPU- und Speicherreservierungen für Ihre pods automatisch an, um Ihre Anwendungen auf die richtige Größe zu skalieren. Diese Anpassung kann die Cluster-Ressourcennutzung verbessern und CPU und Arbeitsspeicher für andere pods freigeben. In diesem Thema können Sie den Vertical Pod Autoscaler für Ihren Cluster bereitstellen und überprüfen, ob er funktioniert.

Voraussetzungen

Bereitstellen des Vertical Pod Autoscalers

In diesem Abschnitt stellen Sie den Vertical Pod Autoscaler für Ihren Cluster bereit.

So stellen Sie den Vertical Pod Autoscaler bereit

  1. Öffnen Sie ein Terminalfenster und navigieren Sie zu einem Verzeichnis, in das Sie den Vertical Pod Autoscaler-Quellcode herunterladen möchten.

  2. Klonen Sie das kubernetes/autoscaler-GitHub-Repository.

    git clone https://github.com/kubernetes/autoscaler.git
  3. Wechseln Sie in das vertical-pod-autoscaler-Verzeichnis.

    cd autoscaler/vertical-pod-autoscaler/
  4. (Optional) Wenn Sie bereits eine andere Version des Vertical Pod Autoscalers bereitgestellt haben, entfernen Sie ihn mit dem folgenden Befehl.

    ./hack/vpa-down.sh
  5. Wenn die Knoten keinen Internetzugriff auf die Container-Registry k8s.gcr.io haben, müssen Sie die folgenden Images abrufen und in ein eigenes privates Repository verschieben. Weitere Informationen zum Abrufen und Verschieben der Images in ein eigenes privates Repository finden Sie unter Kopieren eines Container-Images von einem Repository in ein anderes.

    k8s.gcr.io/autoscaling/vpa-admission-controller:0.10.0 k8s.gcr.io/autoscaling/vpa-recommender:0.10.0 k8s.gcr.io/autoscaling/vpa-updater:0.10.0

    Wenn Sie die Images in ein privates Amazon-ECR-Repository verschieben, ersetzen Sie k8s.gcr.io in den Manifesten durch Ihrer Registrierung. Ersetzen Sie 111122223333 durch Ihre Konto-ID. Ersetzen Sie region-code durch die AWS-Region, in der sich Ihr Cluster befindet. Beim folgenden Befehl wird davon ausgegangen, dass Sie Ihr Repository genauso benannt haben wie das Repository im Manifest. Wenn Sie das Repository anders benannt haben, müssen Sie es ebenfalls ändern.

    sed -i.bak -e 's/k8s.gcr.io/111122223333.dkr.ecr.region-codeamazonaws.com/' ./deploy/admission-controller-deployment.yaml sed -i.bak -e 's/k8s.gcr.io/111122223333.dkr.ecr..dkr.ecr.region-codeamazonaws.com/' ./deploy/recommender-deployment.yaml sed -i.bak -e 's/k8s.gcr.io/111122223333.dkr.ecr..dkr.ecr.region-codeamazonaws.com/' ./deploy/updater-deployment.yaml
  6. Stellen Sie den Vertical Pod Autoscaler mit dem folgenden Befehl für Ihren Cluster bereit.

    ./hack/vpa-up.sh
  7. Überprüfen Sie, ob die Vertical-Pod-Autoscaler-pods erfolgreich erstellt wurden.

    kubectl get pods -n kube-system

    Die Beispielausgabe lautet wie folgt.

    NAME READY STATUS RESTARTS AGE ... metrics-server-8459fc497-kfj8w 1/1 Running 0 83m vpa-admission-controller-68c748777d-ppspd 1/1 Running 0 7s vpa-recommender-6fc8c67d85-gljpl 1/1 Running 0 8s vpa-updater-786b96955c-bgp9d 1/1 Running 0 8s

Testen der Installation von Vertical Pod Autoscaler

In diesem Abschnitt stellen Sie eine Beispielanwendung bereit, um zu überprüfen, ob der Vertical Pod Autoscaler funktioniert.

So testen Sie die Vertical Pod Autoscaler-Installation

  1. Stellen Sie das Vertical Pod Autoscaler-Beispiel hamster.yaml mit dem folgenden Befehl bereit.

    kubectl apply -f examples/hamster.yaml
  2. Rufen Sie die pods aus der hamster-Beispielanwendung ab.

    kubectl get pods -l app=hamster

    Die Beispielausgabe lautet wie folgt.

    hamster-c7d89d6db-rglf5 1/1 Running 0 48s hamster-c7d89d6db-znvz5 1/1 Running 0 48s
  3. Beschreiben Sie einen der pods, um die zugehörige cpu- und memory-Reservierung anzuzeigen. Ersetzen Sie c7d89d6db-rglf5 durch eine der IDs, die in der Ausgabe im vorherigen Schritt zurückgegeben wurden.

    kubectl describe pod hamster-c7d89d6db-rglf5

    Die Beispielausgabe lautet wie folgt.

    ... Containers: hamster: Container ID: docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24 Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: docker-pullable://k8s.gcr.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1 Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Fri, 27 Sep 2019 10:35:16 -0700 Ready: True Restart Count: 0 Requests: cpu: 100m memory: 50Mi ...

    Sie können sehen, dass der ursprüngliche pod 100 Millicpu CPU und 50 Mebibyte Arbeitsspeicher reserviert. Für diese Beispielanwendung ist 100 Millicpu weniger als der pod zum Ausführen benötigt, sodass er CPU-eingeschränkt ist. Außerdem reserviert er viel weniger Arbeitsspeicher, als er benötigt. Die Vertical-Pod-Autoscaler-Bereitstellung vpa-recommender analysiert die hamster-pods, um festzustellen, ob die CPU- und Speicheranforderungen angemessen sind. Wenn Anpassungen erforderlich sind, werden die vpa-updater mit aktualisierten Werten vom pods neu geladen.

  4. Warten Sie, bis der vpa-updater einen neuen hamster-pod startet. Dies sollte ein oder zwei Minuten dauern. Sie können die pods mit dem folgenden Befehl überwachen.

    Anmerkung

    Wenn Sie nicht sicher sind, ob ein neuer pod gestartet wurde, vergleichen Sie die pod-Namen mit Ihrer vorherigen Liste. Wenn der neue pod gestartet wird, wird ein neuer pod-Name angezeigt.

    kubectl get --watch pods -l app=hamster
  5. Wenn ein neuer hamster-pod gestartet wird, beschreiben Sie ihn und zeigen Sie die aktualisierten CPU- und Speicherreservierungen an.

    kubectl describe pod hamster-c7d89d6db-jxgfv

    Die Beispielausgabe lautet wie folgt.

    ... Containers: hamster: Container ID: docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: docker-pullable://k8s.gcr.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1 Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Fri, 27 Sep 2019 10:37:08 -0700 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k ...

    In der vorherigen Ausgabe können Sie feststellen, dass sich die cpu-Reservierung auf 587 Millicpu erhöht hat, was mehr als dem Fünffachen des ursprünglichen Werts entspricht. Der memory wurde auf 262.144 Kilobyte erhöht, was etwa 250 Mebibyte bzw. dem Fünffachen des ursprünglichen Werts entspricht. Diesem pod standen zu wenige Ressourcen zur Verfügung. Daher hat der Vertical Pod Autoscaler unsere Schätzung mit einem wesentlich geeigneteren Wert korrigiert.

  6. Beschreiben Sie die hamster-vpa-Ressource, um die neue Empfehlung anzuzeigen.

    kubectl describe vpa/hamster-vpa

    Die Beispielausgabe lautet wie folgt.

    Name: hamster-vpa Namespace: default Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d... API Version: autoscaling.k8s.io/v1beta2 Kind: VerticalPodAutoscaler Metadata: Creation Timestamp: 2019-09-27T18:22:51Z Generation: 23 Resource Version: 14411 Self Link: /apis/autoscaling.k8s.io/v1beta2/namespaces/default/verticalpodautoscalers/hamster-vpa UID: d0d85fb9-e153-11e9-ae53-0205785d75b0 Spec: Target Ref: API Version: apps/v1 Kind: Deployment Name: hamster Status: Conditions: Last Transition Time: 2019-09-27T18:23:28Z Status: True Type: RecommendationProvided Recommendation: Container Recommendations: Container Name: hamster Lower Bound: Cpu: 550m Memory: 262144k Target: Cpu: 587m Memory: 262144k Uncapped Target: Cpu: 587m Memory: 262144k Upper Bound: Cpu: 21147m Memory: 387863636 Events: <none>
  7. Wenn Sie mit dem Experimentieren mit der Beispielanwendung fertig sind, können Sie sie mit dem folgenden Befehl löschen.

    kubectl delete -f examples/hamster.yaml