Auf dieser Seite wird erläutert, wie Sie die CPU-Anfragen und Speicheranfragen eines Containers in einem Google Kubernetes Engine-Cluster analysieren und anpassen können mithilfe vertikalem Pod-Autoscaling.
Sie können Containerressourcen manuell über die Google Cloud Console skalieren, Ressourcen mit einem VerticalPodAutoscaler
-Objekt analysieren oder die automatische Skalierung mit vertikalem Pod-Autoscaling konfigurieren.
Hinweise
Führen Sie die folgenden Schritte durch, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
Ressourcenanfragen analysieren
Das vertikale Pod-Autoscaling analysiert automatisch Ihre Container und stellt vorgeschlagene Ressourcenanfragen bereit. Sie können diese Ressourcenanfragen mit der Google Cloud Console, Cloud Monitoring oder der Google Cloud CLI aufrufen.
Console
Damit die vorgeschlagenen Ressourcenanfragen in der Google Cloud Console angezeigt werden, muss eine vorhandene Arbeitslast bereitgestellt werden, die mindestens 24 Stunden alt ist. Einige Vorschläge sind möglicherweise für bestimmte Arbeitslasten wie die in den letzten 24 Stunden erstellten Arbeitslasten, eigenständige Pods und in JAVA geschriebene Anwendungen nicht verfügbar oder nicht relevant.
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie in der Liste der Arbeitslasten auf den Namen der Arbeitslast, die Sie skalieren möchten.
Klicken Sie auf list Aktionen > Skalieren > Ressourcenanfragen bearbeiten.
Im Abschnitt "Daten zur Ressourcenauslastung analysieren" werden Verlaufsdaten zur Nutzung angezeigt, die der vertikale Pod-Autoscaling-Controller analysiert hat, um die vorgeschlagenen Ressourcenanfragen im Abschnitt "Ressourcenanfragen und -limits anpassen" zu erstellen.
Cloud Monitoring
Wenn Sie die vorgeschlagenen Ressourcenanfragen in Cloud Monitoring aufrufen möchten, muss eine vorhandene Arbeitslast bereitgestellt sein.
Rufen Sie in der Google Cloud Console die Seite Metrics Explorer auf.
Klicken Sie auf Konfiguration.
Maximieren Sie das Menü Messwert auswählen.
Wählen Sie im Menü Ressource die Option Kubernetes-Skalierung aus.
Wählen Sie im Menü Messwertkategorie die Option Autoscaling aus.
Wählen Sie im Menü Messwert die Option Empfohlen pro Replikatanfragebyte und Empfohlen pro Replikatanfragekern aus.
Klicken Sie auf Anwenden.
gcloud-CLI
Wenn Sie vorgeschlagene Ressourcenanfragen aufrufen möchten, müssen Sie ein VerticalPodAutoscaler
-Objekt und ein Deployment erstellen.
Aktivieren Sie für Standardcluster das vertikale Pod-Autoscaling für Ihren Cluster. Bei Autopilot-Clustern ist vertikales Pod-Autoscaling standardmäßig aktiviert.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Ersetzen Sie
CLUSTER_NAME
durch den Namen Ihres Clusters.Speichern Sie das folgende Manifest als
my-rec-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx
Dieses Manifest beschreibt ein
Deployment
, das keine CPU- oder Speicheranforderungen hat. Der Wertcontainers.name
vonmy-rec-deployment
gibt an, dass alle Pods im Deployment zumVerticalPodAutoscaler
gehören.Wenden Sie das Manifest auf den Cluster an:
kubectl create -f my-rec-deployment.yaml
Speichern Sie das folgende Manifest als
my-rec-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-rec-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-rec-deployment updatePolicy: updateMode: "Off"
Dieses Manifest beschreibt einen
VerticalPodAutoscaler
. DieupdateMode
Wert vonOff
bedeutet, dass der vertikale Pod-Autoscaling-Controller beim Erstellen der Pods die CPU- und Speicheranforderungen der Container analysiert und diese Empfehlungen im Feldstatus
der Ressource speichert. Der vertikale Pod-Autoscaling-Controller aktualisiert die Ressourcenanfragen für die Ausführung von Containern nicht automatisch.Wenden Sie das Manifest auf den Cluster an:
kubectl create -f my-rec-vpa.yaml
Sehen Sie sich nach einiger Zeit
VerticalPodAutoscaler
an:kubectl get vpa my-rec-vpa --output yaml
Die Ausgabe sieht etwa so aus:
... recommendation: containerRecommendations: - containerName: my-rec-container lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k upperBound: cpu: 7931m memory: 8291500k ...
Diese Ausgabe zeigt Empfehlungen für CPU- und Speicheranforderungen:
Pod-Ressourcenanfragen manuell festlegen
Sie können Pod-Ressourcenanfragen manuell über die Google Cloud CLI oder die Google Cloud Console festlegen.
Console
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie in der Liste der Arbeitslasten auf den Namen der Arbeitslast, die Sie skalieren möchten.
Klicken Sie auf list Aktionen > Skalieren > Ressourcenanfragen bearbeiten.
- Im Abschnitt Ressourcenanfragen und -limits anpassen werden die aktuellen CPU- und Speicheranfragen für jeden Container sowie vorgeschlagene CPU- und Speicheranfragen angezeigt.
Klicken Sie auf Neueste Vorschläge anwenden, um vorgeschlagene Anfragen für jeden Container aufzurufen.
Klicken Sie auf Änderungen speichern.
Klicken Sie auf Bestätigen.
gcloud
Wenn Sie Ressourcenanfragen für einen Pod festlegen möchten, legen Sie die Werte „requests.cpu“ und „memory.cpu“ in Ihrem Deployment-Manifest fest. In diesem Beispiel ändern Sie das Deployment in Ressourcenanforderungen analysieren mit vorgeschlagenen Ressourcenanfragen.
Speichern Sie das folgende Beispielmanifest als
my-adjusted-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx resources: requests: cpu: 25m memory: 256Mi
Dieses Manifest beschreibt ein Deployment mit zwei Pods. Jeder Pod hat einen Container, der 25 MilliCPU und 256 MiB Speicher anfordert.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f my-adjusted-deployment.yaml
Sie können Änderungen auch manuell anwenden. Führen Sie dazu die folgenden Schritte aus:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie in der Liste der Arbeitslasten auf den Namen der Arbeitslast, die Sie skalieren möchten.
Klicken Sie auf list Aktionen > Skalieren > Ressourcenanfragen bearbeiten.
Konfigurieren Sie Ihre Containeranfragen.
Klicken Sie auf Entsprechende YAML-Datei abrufen.
Klicken Sie auf Workload herunterladen oder kopieren Sie das Manifest und fügen Sie es in eine Datei mit dem Namen
resource-adjusted.yaml
ein.Wenden Sie das Manifest auf Ihren Cluster an:
kubectl create -f resource-adjusted.yaml
Pod-Ressourcenanfragen automatisch festlegen
Vertikales Pod-Autoscaling verwendet das Objekt VerticalPodAutoscaler
, um Ressourcenanfragen für Pods automatisch festzulegen, wenn der updateMode
auf den Wert Auto
gesetzt ist. Sie können ein VerticalPodAutoscaler
über die gcloud-Befehlszeile oder die Google Cloud Console konfigurieren.
Console
Damit Sie Ressourcenanforderungen automatisch festlegen können, müssen Sie einen Cluster mit aktivierter vertikaler Pod-Autoscaling-Funktion haben. Bei Autopilot-Clustern ist das Feature für vertikales Pod-Autoscaling standardmäßig aktiviert.
Vertikales Pod-Autoscaling aktivieren
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie im Abschnitt Automatisierung für die Option Vertikales Pod-Autoscaling auf edit Bearbeiten.
Klicken Sie das Kästchen Vertikales Pod-Autoscaling aktivieren an.
Klicken Sie auf Änderungen speichern.
Vertikales Pod-Autoscaling konfigurieren
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie in der Liste der Arbeitslasten auf den Namen des Deployments, für das Sie vertikales Pod-Autoscaling konfigurieren möchten.
Klicken Sie auf list Aktionen > Automatisch skalieren > Vertikales Pod-Autoscaling.
Wählen Sie einen Autoscaling-Modus aus:
- Automatisch: Vertikales Pod-Autoscaling aktualisiert CPU- und Speicheranfragen während der Lebensdauer eines Pods.
- Anfänglich: Vertikales Pod-Autoscaling weist Ressourcenanfragen nur bei der Pod-Erstellung zu und ändert sie später nie mehr.
(Optional) Legen Sie Containerrichtlinien fest. Mit dieser Option können Sie dafür sorgen, dass die Empfehlung nie über oder unter einer bestimmten Ressourcenanfrage festgelegt wird.
- Klicken Sie auf expand_more Richtlinie hinzufügen.
- Wählen Sie unter Containermodus bearbeiten die Option Automatisch aus.
- Wählen Sie unter Gesteuerte Ressourcen die Ressourcen aus, für die Sie den Container automatisch skalieren möchten.
- Klicken Sie auf Regel hinzufügen, um einen oder mehrere Mindest- oder Höchstwerte für die Ressourcenanfragen des Containers festzulegen:
- Min. Zugelassener Arbeitsspeicher: Die minimale Speichermenge, die der Container immer haben soll, in MiB.
- Min. Zulässige CPU: Die Mindest-CPU, die der Container immer haben soll, in mCPU.
- Max. zulässiger Arbeitsspeicher: Die maximale Speichermenge, die der Container immer haben soll, in MiB.
- Maximal zulässige CPU: Die maximale CPU-Menge, die der Container immer haben soll, in mCPU.
Klicken Sie auf Fertig.
Klicken Sie auf Speichern.
gcloud
Wenn Sie Ressourcenanfragen automatisch festlegen möchten, müssen Sie einen Cluster verwenden, für den das vertikale Pod-Autoscaling aktiviert ist. Für Autopilot-Cluster ist die Funktion standardmäßig aktiviert.
Aktivieren Sie für Standardcluster das vertikale Pod-Autoscaling für Ihren Cluster:
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Ersetzen Sie
CLUSTER_NAME
durch den Namen Ihres Clusters.Speichern Sie das folgende Manifest als
my-auto-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-auto-deployment spec: replicas: 2 selector: matchLabels: app: my-auto-deployment template: metadata: labels: app: my-auto-deployment spec: containers: - name: my-container image: registry.k8s.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
Dieses Manifest beschreibt ein Deployment mit zwei Pods. Jeder Pod hat einen Container, der 100 MilliCPU und 50 MiB Speicher anfordert.
Wenden Sie das Manifest auf den Cluster an:
kubectl create -f my-auto-deployment.yaml
Listen Sie die aktiven Pods auf:
kubectl get pods
Die Ausgabe zeigt die Namen der Pods in
my-deployment
an:NAME READY STATUS RESTARTS AGE my-auto-deployment-cbcdd49fb-d6bf9 1/1 Running 0 8s my-auto-deployment-cbcdd49fb-th288 1/1 Running 0 8s
Speichern Sie das folgende Manifest als
my-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-auto-deployment updatePolicy: updateMode: "Auto"
Dieses Manifest beschreibt einen
VerticalPodAutoscaler
mit folgenden Attributen:targetRef.name
: gibt an, dass jeder Pod, der von einem Deployment mit dem Namenmy-deployment
gesteuert wird, zu diesemVerticalPodAutoscaler
gehört.updateMode: Auto
: gibt an, dass der vertikale Pod-Autoscaling-Controller einen Pod löschen, die CPU- und Speicheranforderungen anpassen und dann einen neuen Pod starten kann.
Sie können auch vertikales Pod-Autoscaling so konfigurieren, dass Ressourcenanfragen nur bei der Pod-Erstellung zugewiesen werden, indem Sie
updateMode: "Initial"
verwenden.Wenden Sie das Manifest auf den Cluster an:
kubectl create -f my-vpa.yaml
Warten Sie einige Minuten und rufen Sie dann wieder die aktiven Pods auf:
kubectl get pods
Die Ausgabe zeigt, dass sich die Pod-Namen geändert haben:
NAME READY STATUS RESTARTS AGE my-auto-deployment-89dc45f48-5bzqp 1/1 Running 0 8s my-auto-deployment-89dc45f48-scm66 1/1 Running 0 8s
Sollten sich die Namen der Pods noch nicht geändert haben, warten Sie etwas länger und listen Sie die aktiven Pods noch einmal auf.
Informationen zu vertikalem Pod-Autoscaling ansehen
So rufen Sie Details zu vertikalem Pod-Autoscaling auf:
Rufen Sie detaillierte Informationen zu einem der aktiven Pods ab:
kubectl get pod POD_NAME --output yaml
Ersetzen Sie
POD_NAME
durch den Namen eines Ihrer Pods, die Sie im vorherigen Schritt abgerufen haben.Die Ausgabe sieht in etwa so aus:
apiVersion: v1 kind: Pod metadata: annotations: vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request' ... spec: containers: ... resources: requests: cpu: 510m memory: 262144k ...
Diese Ausgabe zeigt, dass der vertikale Pod-Autoscaling-Controller eine Speicheranfrage von 26.2144 KB und eine CPU-Anfrage von 510 MilliCPU hat.
Rufen Sie detaillierte Informationen zum
VerticalPodAutoscaler
ab:kubectl get vpa my-vpa --output yaml
Die Ausgabe sieht in etwa so aus:
... recommendation: containerRecommendations: - containerName: my-container lowerBound: cpu: 536m memory: 262144k target: cpu: 587m memory: 262144k upperBound: cpu: 27854m memory: "545693548"
Diese Ausgabe enthält Empfehlungen für CPU- und Speicheranforderungen und enthält die folgenden Attribute:
target
: gibt an, dass der Container für die optimale Ausführung 587 MilliCPU und 26.2144 Kilobyte an Arbeitsspeicher anfordern sollte.lowerBound
undupperBound
: Vertikales Pod-Autoscaling verwendet diese Attribute, um zu entscheiden, ob ein Pod gelöscht und durch einen neuen Pod ersetzt werden soll. Wenn die Anforderungen eines Pods unter der Untergrenze oder über der Obergrenze liegen, wird er vom vertikalen Pod-Autoscaling gelöscht und durch einen Pod ersetzt, der mit dem Zielattribut übereinstimmt.
Bestimmte Container deaktivieren
Sie können bestimmte Container mithilfe der gcloud-Befehlszeile oder der Google Cloud Console vom vertikalen Pod-Autoscaling deaktivieren.
Console
Wenn Sie bestimmte Container aus dem vertikalen Pod-Autoscaling deaktivieren möchten, benötigen Sie einen Cluster mit aktivierter Funktion für das vertikale Pod-Autoscaling. Bei Autopilot-Clustern ist das Feature für vertikales Pod-Autoscaling standardmäßig aktiviert.
Vertikales Pod-Autoscaling aktivieren
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie im Abschnitt Automatisierung für die Option Vertikales Pod-Autoscaling auf edit Bearbeiten.
Klicken Sie das Kästchen Vertikales Pod-Autoscaling aktivieren an.
Klicken Sie auf Änderungen speichern.
Vertikales Pod-Autoscaling konfigurieren
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie in der Liste der Arbeitslasten auf den Namen des Deployments, für das Sie vertikales Pod-Autoscaling konfigurieren möchten.
Klicken Sie auf list Aktionen > Automatisch skalieren > Vertikales Pod-Autoscaling.
Wählen Sie einen Autoscaling-Modus aus:
- Automatisch: Vertikales Pod-Autoscaling aktualisiert CPU- und Speicheranfragen während der Lebensdauer eines Pods.
- Anfänglich: Vertikales Pod-Autoscaling weist Ressourcenanfragen nur bei der Pod-Erstellung zu und ändert sie später nie mehr.
Klicken Sie auf expand_more Richtlinie hinzufügen.
Wählen Sie den Container aus, den Sie deaktivieren möchten.
Wählen Sie für Containermodus bearbeiten die Option Aus aus.
Klicken Sie auf Fertig.
Klicken Sie auf Speichern.
gcloud
Wenn Sie bestimmte Container für das vertikale Pod-Autoscaling deaktivieren möchten, führen Sie die folgenden Schritte aus:
Speichern Sie das folgende Manifest als
my-opt-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-opt-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-opt-deployment updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: my-opt-sidecar mode: "Off"
Dieses Manifest beschreibt einen
VerticalPodAutoscaler
. Der Wertmode: "Off"
deaktiviert Empfehlungen für den Containermy-opt-sidecar
.Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f my-opt-vpa.yaml
Speichern Sie das folgende Manifest als
my-opt-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-opt-deployment spec: replicas: 1 selector: matchLabels: app: my-opt-deployment template: metadata: labels: app: my-opt-deployment spec: containers: - name: my-opt-container image: nginx - name: my-opt-sidecar image: busybox command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f my-opt-deployment.yaml
Nach einiger Zeit können Sie vertikales Pod-Autoscaling aufrufen:
kubectl get vpa my-opt-vpa --output yaml
Die Ausgabe zeigt Empfehlungen für CPU- und Speicheranforderungen:
... recommendation: containerRecommendations: - containerName: my-opt-container ...
In dieser Ausgabe gibt es nur Empfehlungen für einen Container. Es gibt keine Empfehlungen für
my-opt-sidecar
.Vertikales Pod-Autoscaling aktualisiert niemals Ressourcen für deaktivierte Container. Wenn Sie einige Minuten warten, erstellt der Pod Container zwar neu, aber nur ein Container enthält aktualisierte Ressourcenanforderungen.
Nächste Schritte
- Weitere Informationen zu vertikalem Pod-Autoscaling
- Best Practices zum Ausführen kostenoptimierter Kubernetes-Anwendungen in GKE
- CPU-Ressourcen zu Containern und Pods zuweisen
- Arbeitsspeicher zu Containern und Pods zuweisen