Mehrdimensionales Pod-Autoscaling konfigurieren


Dank des mehrdimensionalen Pod-Autoscaling müssen Sie sich nicht mehr auf eine einzige Methode zur Skalierung Ihrer Cluster festlegen. Mit dem mehrdimensionalen Pod-Autoscaling können Sie eine horizontale Skalierung basierend auf der CPU und eine vertikale Skalierung anhand des Speichers gleichzeitig vornehmen.

Ein MultidimPodAutoscaler-Objekt ändert Speicheranfragen und fügt Replikate hinzu, sodass die durchschnittliche CPU-Auslastung jedes Replikats der Zielauslastung entspricht.

Vorbereitung

Mehrdimensionales Pod-Autoscaling verwenden

In diesem Beispiel wird gezeigt, wie Sie ein Deployment und ein MultidimPodAutoscaler-Objekt erstellen, um das Deployment automatisch zu skalieren.

Deployment erstellen

Bevor Sie einen MultidimPodAutoscaler erstellen können, müssen Sie die zu beobachtende Arbeitslast erstellen. Die folgende Datei, php-apache.yaml, gibt einen Wert für die CPU-Anfragen an:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 80
        resources:
        # Since MPA does not specify CPU requests, you must specify a request in
        # the Deployment
          limits:
            cpu: 500m
          requests:
            cpu: 200m

Zum Erstellen des Deployments wenden Sie das Manifest php-apache.yaml an:

kubectl apply -f php-apache.yaml

MultidimPodAutoscaler erstellen

Nachdem Sie das Deployment erstellt haben, können Sie ein MultidimPodAutoscaler-Objekt erstellen. Das folgende MultidimPodAutoscaler-Manifest passt die Anzahl der Replikate und Speicheranforderungen automatisch anhand der von Ihnen angegebenen Werte an.

Weitere Informationen zu den Feldern in diesem Beispiel finden Sie im API-Referenzabschnitt.

apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
  name: php-apache-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  goals:
    metrics:
    - type: Resource
      resource:
      # Define the target CPU utilization request here
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
  constraints:
    global:
      minReplicas: 1
      maxReplicas: 5
    containerControlledResources: [ memory ]
    container:
    - name: '*'
    # Define boundaries for the memory request here
      requests:
        minAllowed:
          memory: 1Gi
        maxAllowed:
          memory: 2Gi
  policy:
    updateMode: Auto

Zum Erstellen von MultidimPodAutoscaler wenden Sie das Manifest php-apache-autoscaler.yaml an:

kubectl apply -f php-apache-autoscaler.yaml

MultidimPodAutoscaler aufrufen

Alle MultidimPodAutoscaler-Objekte mit dem Befehl kubectl get anzeigen lassen:

kubectl get mpa

MultidimPodAutoscaler löschen

Löschen Sie ein MultidimPodAutoscaler-Objekt mit dem Befehl kubectl delete:

kubectl delete -f php-apache-autoscaler.yaml

API-Referenz

Die folgenden Abschnitte enthalten Informationen zu den möglichen Feldern, die Sie Ihrem MultidimPodAutoscaler-Objekt hinzufügen können.

Alle Felder gelten für apiVersion v1beta1 autoscaling.gke.io.

MultidimPodAutoscaler

MultidimPodAutoscaler ist die Konfiguration für ein mehrdimensionales Pod-Autoscaling, das Pod-Ressourcen und ihre Anzahl anhand der historischen und Echtzeit-Ressourcennutzung automatisch verwaltet.

Feld Typ Beschreibung
metadata ObjectMeta Standard-Objektmetadaten.
spec MultidimPodAutoscalerSpec Das gewünschte Verhalten des mehrdimensionalen Pod-Autoscaling.
status MultidimPodAutoscalerStatus Zuletzt beobachteter Status des multidimensionalen Pod-Autoscaling.

MultidimPodAutoscalerSpec

MultidimPodAutoscalerSpec ist die Spezifikation, die das Verhalten des Autoscalings definiert.

Feld Typ Beschreibung
ScaleTargetRef autoscaling.CrossVersionObjectReference Eine Referenz, die auf eine zu skalierende Zielressource verweist (mit der Unterressource „Skalieren”).
Goals *MultidimGoals Ziele, die das mehrdimensionale Pod-Autoscaling erreichen und beibehalten möchte.
Constraints *MultidimConstraints Beschreibt die Einschränkungen für das Autoscaling. Einschränkungen haben Vorrang vor den Zielen. Wenn Einschränkungen ein bestimmtes Ziel blockieren, wird das Ziel nicht erreicht. Beispielsweise wird durch das Erreichen der maximalen Replikatanzahl eine weitere vertikale Skalierung verhindert, auch wenn die Replikate skaliert werden müssen.
Policy *MultidimPolicy Mit der Richtlinie können Sie angeben, wie die Empfehlungen angewendet werden.

MultidimGoals

MultidimGoals sind Ziele, die das mehrdimensionale Pod-Autoscaling erreichen möchte.

Feld Typ Beschreibung
Metrics []MetricSpec Enthält eine Liste mit Messwerten zusammen mit dem gewünschten Wert. Mit dem mehrdimensionalen Pod-Autoscaling versuchen Sie, die gewünschten Werte zu erreichen.

MultidimConstraints

MultidimConstraints beschreibt die Einschränkungen für das Autoscaling. Beschränkungen haben Vorrang vor Zielen.

Feld Typ Beschreibung
Global *GlobalConstraints Einschränkungen, die für die automatisch skalierte Anwendung als Ganzes gelten.
Pod *PodConstraints Einschränkungen, die für einzelne Pods der Zielanwendung gelten.
ContainerControlledResources []ResourceName Containerressourcen, die durch Autoscaling gesteuert werden sollen. memory ist der einzige unterstützte Wert.
Container []ContainerConstraints Einschränkungen für die Container der Pods

ResourceConstraints

ResourceConstraints definiert die minimale und maximale Anzahl an Ressourcen, die Sie einem Container, Pod oder einer Anwendung zuweisen können.

Feld Typ Beschreibung
MinAllowed ResourceList Mindestanzahl von Ressourcen, die Sie zuweisen können. Wenn nicht angegeben, wird 0 verwendet.
MaxAllowed ResourceList Maximale Anzahl von Ressourcen, die Sie zuweisen können. Wenn keine Angabe gemacht wird, gibt es keine Begrenzung für die maximale Anzahl von Ressourcen.

GlobalConstraints

GlobalConstraints definiert die Einschränkungen, die für die Anwendung insgesamt gelten. Diese Einschränkungen umfassen die Anzahl der Replikate oder die Gesamtzahl der Ressourcen.

Feld Typ Beschreibung
MinReplicas *Int32 Mindestanzahl der Replikate, die die Anwendung haben kann. Wenn nicht angegeben, wird 1 verwendet.
MaxReplicas *Int32 Maximale Anzahl von Replikaten, die die Anwendung haben kann Wenn keine Angabe gemacht wird, gibt es keine Begrenzung für die maximale Anzahl von Replikaten.
Requests *ResourceConstraints Minimale und maximale Ressourcenmenge, die von einer Anwendung angefordert werden kann, summiert über alle Pods.

PodConstraints

PodConstraints definiert die minimale und maximale Anzahl an Ressourcen, die ein einzelner Pod anfordern kann. Die Summe wird für alle Container addiert, die zum Pod gehören.

Feld Typ Beschreibung
Requests *ResourceConstraints Minimale und maximale Ressourcenmenge, die von einem einzelnen Pod angefordert werden kann, summiert über alle Container zum Pod.

ContainerConstraints

ContainerConstraints sind Einschränkungen, die für die Container der Pods gelten.

Felder Typ Beschreibung
Name String Name des Containers, für den die Einschränkungen angegeben werden. Sie können auch * verwenden, um Einschränkungen für alle Container in einem Pod festzulegen.
Requests *ResourceConstraints Minimale und maximale Ressourcenmenge, die der angegebene Container anfordern kann.

UpdateMode

Legen Sie mit UpdateMode fest, wie die berechneten Empfehlungen angewendet werden sollen.

Felder Typ Beschreibung
AutoUpdates UpdateMode = "Auto" Automatische Updates können jederzeit für alle Autoscaling-Empfehlungen angewendet werden.
AutoUpdates UpdateMode = "Off" Automatische Updates bedeuten, dass Autoscaling-Empfehlungen überhaupt nicht angewendet werden.

MultidimPolicy

Felder Typ Beschreibung
Update UpdateMode Definiert, wie die Empfehlungen angewendet werden sollen. Ein leerer Wert kann nicht validiert werden.

MultidimPodAutoscalerStatus

MultidimPodAutoscalerStatus beschreibt den Laufzeitstatus des Autoscalings.

Felder Typ Beschreibung
ObservedGeneration *Int64 Die zuletzt von diesem Autoscaling beobachtete Generation.
RecommendedPodResources *RecommendedPodResources Die zuletzt berechnete Ressourcenmenge, die vom Autoscaling für die kontrollierten Pods empfohlen wird.
CurrentReplicas Int32 CurrentReplicas ist die aktuelle Anzahl an Replikaten von Pods, die durch das Autoscaling verwaltet werden, wie zuletzt vom Autoscaling erkannt.
DesiredReplicas Int32 DesiredReplicas ist die gewünschte Anzahl von Replikaten der Pods, die durch das Autoscaling verwaltet werden, wie zuletzt vom Autoscaling berechnet.
CurrentMetrics []autoscaling.MetricStatus Der letzte Lesestatus der Messwerte, die von diesem Autoscaling verwendet werden.
Conditions []metav1.Condition Conditions ist die Menge an Bedingungen, die für das Autoscaling zur Skalierung des Ziels erforderlich ist, und gibt an, ob diese Bedingungen erfüllt werden.

Nächste Schritte