Zwischen API-Versionen von VerticalPodAutoscaler migrieren

Auf dieser Seite wird die Migration von VerticalPodAutoscaler-Objekten von API-Version v1beta1 zu v1beta2 erläutert.

Vorbereitung

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

Mit den folgenden Methoden können Sie die gcloud-Einstellungen festlegen:

  • Verwenden Sie gcloud init, wenn Sie die Standardeinstellungen ansehen möchten.
  • Verwenden Sie gcloud config, um Ihre Projekt-ID, Zone und Region individuell festzulegen.

gcloud init verwenden

Wenn Sie die Fehlermeldung One of [--zone, --region] must be supplied: Please specify location erhalten, führen Sie diesen Abschnitt aus.

  1. Führen Sie gcloud init aus und folgen Sie der Anleitung:

    gcloud init

    Wenn Sie SSH auf einem Remote-Server verwenden, können Sie mit dem Flag --console-only verhindern, dass mit dem Befehl ein Browserfenster geöffnet wird:

    gcloud init --console-only
  2. Folgen Sie der Anleitung, um gcloud zur Verwendung Ihres Google Cloud-Kontos zu autorisieren.
  3. Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
  4. Wählen Sie ein Google Cloud-Projekt aus.
  5. Wählen Sie eine Compute Engine-Standardzone aus.

gcloud config verwenden

  • Legen Sie Ihre standardmäßige Projekt-ID fest:
    gcloud config set project project-id
  • Wenn Sie mit zonalen Clustern arbeiten, legen Sie die Compute-Standardzone fest:
    gcloud config set compute/zone compute-zone
  • Wenn Sie mit regionalen Clustern arbeiten, legen Sie die Standardregion für Compute Engine fest:
    gcloud config set compute/region compute-region
  • Aktualisieren Sie gcloud auf die neueste Version:
    gcloud components update

Vertikales Pod-Autoscaling für einen Cluster aktivieren

Geben Sie den folgenden Befehl ein, um einen neuen Cluster mit aktiviertem vertikalen Pod-Autoscaling zu erstellen:

gcloud beta container clusters create cluster-name --enable-vertical-pod-autoscaling

Dabei ist cluster-name ein Name, den Sie für Ihren neuen Cluster auswählen.

Mit dem folgenden Befehl können Sie vertikales Pod-Autoscaling für einen vorhandenen Cluster aktivieren:

gcloud beta container clusters update cluster-name --enable-vertical-pod-autoscaling

Dabei ist cluster-name der Name des vorhandenen Clusters.

Einführung in die v1beta2 API

Das vertikale Pod-Autoscaling ist eine Betafunktion, die in der Version 1.11 von GKE eingeführt wurde. Die v1beta1 API verwendet eine Labelauswahl, um festzulegen, welche Pods zu einem bestimmten VerticalPodAutoscaler gehören. Wir haben Nutzerfeedback gesammelt und beschlossen, die API aus Gründen der Nutzerfreundlichkeit zu ändern:

  • Die Verwendung von Selektoren kann zu Fehlkonfigurationen führen. Beispiel: Ein VerticalPodAutoscaler-Objekt, das auf alle Pods in einem Cluster abzielt, oder Pods, die zu mehr als einem VerticalPodAutoscaler-Objekt gehören.
  • Der weitaus häufigste Anwendungsfall ist, dass ein VerticalPodAutoscaler ein gesamtes Deployment als Ziel hat.
  • Durch diese Änderung wird VPA an die HorizontalPodAutoscaler-API angeglichen.

Bei der v1beta2 API verweist ein VerticalPodAutoscaler-Objekt direkt auf einen Controller, z. B. ein Deployment oder ein DaemonSet.

Von der v1beta1-API zur v1beta2-API migrieren

In diesem Handbuch wird gezeigt, wie Sie ein von einem VerticalPodAutoscaler skaliertes Deployment sicher von v1beta1 zu v1beta2 migrieren.

Hier ein Beispielmanifest für ein Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    label: vpa-label
spec:
  replicas: 2
  selector:
    matchLabels:
      label: vpa-label
  template:
    metadata:
      labels:
        label: vpa-label
    spec:
      containers:
      - {...}

In v1beta1 geben Sie zum Skalieren des VerticalPodAutoscaler einen selector an, der allen Pods im Deployment entspricht:

apiVersion: autoscaling.k8s.io/v1beta1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  selector:
    matchLabels:
      label: vpa-label
  updatePolicy:
    updateMode: {...}

In v1beta2 zielt der VerticalPodAutoscaler direkt auf das Deployment ab:

apiVersion: autoscaling.k8s.io/v1beta2 # different API version
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment
    name:       deployment-name
  updatePolicy:
    updateMode: {...}

Speichern Sie das v1beta2-Manifest in einer Datei mit dem Namen vpa-v1beta2.yaml.

Wenn updateMode auf "Off" gesetzt ist, können Sie den folgenden Befehl ausführen:

kubectl apply -f vpa-v1beta2.yaml

Empfehlungen werden beim Wechsel vom VerticalPodAutoscaler beibehalten.

Wenn updateMode aktiviert ist ("Initial", "Auto" oder "Recreate"), führen Sie die Migration in mehreren Schritten aus:

  1. Erstellen Sie ein v1beta2 VerticalPodAutoscaler-Manifest mit einem neuen Namen (vpa-name-new) und legen Sie für das Feld updateMode den Wert "Off" fest:

    apiVersion: autoscaling.k8s.io/v1beta2
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-name-new # Different name
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       deployment-name
      updatePolicy:
        updateMode: "Off" # Recommendation only mode.
    
  2. Speichern Sie dieses Manifest als vpa-v1beta1-off.yaml.

  3. Erstellen Sie das neue VerticalPodAutoscaler-Objekt:

    kubectl apply -f vpa-v1beta1-off.yaml
    
  4. Warten Sie, bis die Empfehlung eingefügt ist, und vergleichen Sie sie mit der Empfehlung im ursprünglichen VerticalPodAutoscaler-Objekt.

  5. Wenn die Empfehlungen übereinstimmen, löschen Sie das v1beta1-VerticalPodAutoscaler-Objekt:

    kubectl delete vpa-name
    
  6. Aktualisieren Sie den neuen VerticalPodAutoscaler auf Ihre ursprüngliche Aktualisierungsstrategie. Zum Beispiel für updateMode: "Auto":

    apiVersion: autoscaling.k8s.io/v1beta2
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-name-new
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       deployment-name
      updatePolicy:
        updateMode: "Auto" # Mode switched to auto
    
  7. Speichern Sie dieses Manifest als vpa-v1beta1-final.yaml.

  8. Wenden Sie die neue Konfiguration an:

    kubectl apply -f vpa-v1beta1-final.yaml
    

Referenz

Dies ist die v1beta1-API-Referenz. Sie können auch die v1beta2-Referenz ansehen.

VerticalPodAutoscaler v1beta1 autoscaling.k8s.io

Felder

TypeMeta

API-Gruppe, Version und Art.

metadata

ObjectMeta

Standard-Objektmetadaten.

spec

VerticalPodAutoscalerSpec

Das gewünschte Verhalten des VerticalPodAutoscaler.

status

VerticalPodAutosclerStatus

Zuletzt beobachteter Status des VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1beta1 autoscaling.k8s.io

Felder
selector

LabelSelector

Eine Label-Abfrage, mit der die von VerticalPodAutoscaler gesteuerten Pods bestimmt werden.

updatePolicy

PodUpdatePolicy

Gibt an, ob empfohlene Aktualisierungen beim Start eines Pods angewendet werden und ob empfohlene Aktualisierungen während der Lebensdauer eines Pods angewendet werden.

resourcePolicy

PodResourcePolicy

Legt Richtlinien für das Anpassen der CPU- und Speicheranforderungen für einzelne Container fest.

VerticalPodAutoscalerList v1beta1 autoscaling.k8s.io

Felder

TypeMeta

API-Gruppe, Version und Art.

metadata

ObjectMeta

Standard-Objektmetadaten.

items

VerticalPodAutoscaler array

Eine Liste von VerticalPodAutoscaler-Objekten.

PodUpdatePolicy v1beta1 autoscaling.k8s.io

Felder
updateMode

string

Gibt an, ob empfohlene Aktualisierungen beim Start eines Pods angewendet werden und ob empfohlene Aktualisierungen während der Lebensdauer eines Pods angewendet werden. Mögliche Werte sind "Off" (Aus), "Initial" (Anfänglich), "Recreate" (Neu erstellen) und "Auto" (Automatisch).

PodResourcePolicy v1beta1 autoscaling.k8s.io

Felder
containerPolicies

ContainerResourcePolicy array

Eine Reihe von Ressourcenrichtlinien für einzelne Container.

ContainerResourcePolicy v1beta1 autoscaling.k8s.io

Felder
containerName

string

Der Name des Containers, für den die Richtlinie gilt. Wenn keine Angabe erfolgt, dient die Richtlinie als Standardrichtlinie.

mode

ContainerScalingMode

Gibt an, ob empfohlene Aktualisierungen beim Start eines Containers angewendet werden und ob empfohlene Aktualisierungen während der Lebensdauer eines Containers angewendet werden. Mögliche Werte sind "Off" (Aus) und "Auto" (Automatisch).

minAllowed

ResourceList

Gibt die minimalen CPU- und Speicheranforderungen an, die für den Container zulässig sind.

maxAllowed

ResourceList

Gibt die maximalen CPU- und Speicheranforderungen an, die für den Container zulässig sind.

VerticalPodAutoscalerStatus v1beta1 autoscaling.k8s.io

Felder
recommendation

RecommendedPodResources

Die zuletzt empfohlenen CPU- und Speicheranforderungen.

conditions

VerticalPodAutoscalerCondition array

Beschreibt den aktuellen Status des VerticalPodAutoscaler.

RecommendedPodResources v1beta1 autoscaling.k8s.io

Felder
containerRecommendation

RecommendedContainerResources array

Eine Reihe von Ressourcenempfehlungen für einzelne Container.

RecommendedContainerResources v1beta1 autoscaling.k8s.io

Felder
containerName

string

Der Name des Containers, für den die Empfehlung gilt.

target

ResourceList

Die empfohlene CPU- und Speicheranforderung für den Container.

lowerBound

ResourceList

Die empfohlenen minimalen CPU- und Speicheranforderungen für den Container. Die angegebenen Ressourcenmengen gewährleisten keine stabile Ausführung der Anwendung. Die Ausführung mit geringeren CPU- und Speicheranforderungen hat wahrscheinliche erhebliche Auswirkungen auf Leistung oder Verfügbarkeit.

upperBound

ResourceList

Die empfohlenen maximalen CPU- und Speicheranforderungen für den Container. CPU- und Speicheranforderungen, die über diesen Werten liegen, führen wahrscheinlich zu einer Verschwendung von Ressourcen.

uncappedTarget

ResourceList

Die zuletzt von der Autoscaling-Funktion berechnete Ressourcenempfehlung, die nur auf der tatsächlichen Ressourcennutzung basiert und die ContainerResourcePolicy nicht berücksichtigt. Kann von der begrenzten Empfehlung abweichen, wenn die tatsächliche Ressourcennutzung dazu führt, dass das Ziel gegen die ContainerResourcePolicy verstößt. Dieses Feld wird nur als Statusanzeige verwendet und hat keine Auswirkung auf die tatsächliche Ressourcenzuweisung.

VerticalPodAutoscalerCondition v1beta1 autoscaling.k8s.io

Felder
type

VerticalPodAutoscalerConditionType

Die Art des beschriebenen Zustands. Mögliche Werte sind "RecommendationProvided" (Empfehlung bereitgestellt), "LowConfidence" (Geringe Konfidenz), "NoPodsMatched" (Keine übereinstimmenden Pods) und "FetchingHistory" (Verlauf wird abgerufen).

status

ConditionStatus

Der Status des Zustands. Mögliche Werte sind "True" (Wahr), "False" (Falsch) und "Unknown" (Nicht bekannt).

lastTransitionTime

Time

Die letzte Statusänderung des Zustands.

reason

string

Der Grund für die letzte Statusänderung.

message

string

Ein menschenlesbarer String mit Details zur letzten Statusänderung.