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
- GKE-Cluster-Version 1.19.4-gke.1700 oder neuer.
- Aktivieren Sie für Standardcluster das vertikale Pod-Autoscaling für Ihren Cluster. Vertikales Pod-Autoscaling ist in Autopilot-Clustern bereits aktiviert.
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 einen einzelnen Pods aus 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. Dazu gehören die Anzahl der Replikate oder die Gesamtzahl der Ressourcen.
Feld | Typ | Beschreibung |
---|---|---|
MinReplicas |
*Int32 |
Mindestanzahl an Replikaten, die die Anwendung haben darf. 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 Ressourcenmenge, die ein einzelner Pod anfordern kann, summiert über alle Container, 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, die zum Pod gehören. |
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 Generierung. |
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 zuletzt gelesene Status 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. |