La scalabilità automatica multidimensionale dei pod ti evita di dover scegliere una sola modalità per scalare i tuoi cluster. Con la scalabilità automatica multidimensionale dei pod, puoi utilizzare contemporaneamente la scalabilità orizzontale basata sulla CPU e la scalabilità verticale basata sulla memoria.
Un oggetto MultidimPodAutoscaler modifica le richieste di memoria e aggiunge repliche in modo che l'utilizzo medio della CPU di ogni replica corrisponda all'utilizzo target.
Prerequisiti
- Cluster GKE versione 1.19.4-gke.1700 o successive.
 - Per i cluster Standard, abilita la scalabilità automatica verticale dei pod nel cluster. La scalabilità automatica pod verticale è già abilitata nei cluster Autopilot.
 
Utilizzo della scalabilità automatica multidimensionale dei pod
Questo esempio mostra come creare un deployment e un oggetto MultidimPodAutoscaler
per scalare automaticamente il deployment.
Creazione di un deployment
Prima di poter creare un MultidimPodAutoscaler, devi creare il carico di lavoro
che monitora. Il seguente file, php-apache.yaml, specifica un valore per le
richieste di CPU:
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
Per creare il deployment, applica il manifest php-apache.yaml:
kubectl apply -f php-apache.yaml
Creazione di un oggetto MultidimPodAutoscaler
Una volta creato il deployment, puoi creare un oggetto MultidimPodAutoscaler. Il seguente manifest MultidimPodAutoscaler regola automaticamente
il numero di repliche e le richieste di memoria in base ai valori specificati.
Per ulteriori informazioni sui campi di questo esempio, consulta la sezione Riferimento API.
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
Per creare MultidimPodAutoscaler, applica il manifest php-apache-autoscaler.yaml:
kubectl apply -f php-apache-autoscaler.yaml
Visualizzazione di un oggetto MultidimPodAutoscaler
Visualizza tutti gli oggetti MultidimPodAutoscaler utilizzando il comando kubectl get:
kubectl get mpa
Eliminazione di un oggetto MultidimPodAutoscaler
Elimina un oggetto MultidimPodAutoscaler utilizzando il comando kubectl delete:
kubectl delete -f php-apache-autoscaler.yaml
Riferimento API
Le sezioni seguenti forniscono informazioni sui possibili campi che puoi aggiungere
all'oggetto MultidimPodAutoscaler.
Tutti i campi sono per apiVersion v1beta1 autoscaling.gke.io.
MultidimPodAutoscaler
MultidimPodAutoscaler è la configurazione di un gestore della scalabilità automatica dei pod multidimensionale, che gestisce automaticamente le risorse dei pod e il loro conteggio in base all'utilizzo delle risorse storiche e in tempo reale.
| Campo | Tipo | Descrizione | 
|---|---|---|
metadata | 
ObjectMeta | 
Metadati degli oggetti standard. | 
spec | 
MultidimPodAutoscalerSpec | 
Il comportamento desiderato della scalabilità automatica dei pod multidimensionale. | 
status | 
MultidimPodAutoscalerStatus | 
Lo stato osservato più di recente del gestore della scalabilità automatica dei pod multidimensionale. | 
MultidimPodAutoscalerSpec
MultidimPodAutoscalerSpec è la specifica che definisce il comportamento
del gestore della scalabilità automatica.
| Campo | Tipo | Descrizione | 
|---|---|---|
ScaleTargetRef | 
autoscaling.CrossVersionObjectReference | 
Un riferimento che punta a una risorsa di destinazione da scalare (con la risorsa secondaria Scale). | 
Goals | 
*MultidimGoals | 
Obiettivi che il gestore della scalabilità automatica dei pod multidimensionale tenta di raggiungere e mantenere. | 
Constraints | 
*MultidimConstraints | 
Descrive i vincoli per la scalabilità automatica. I vincoli hanno la precedenza sugli obiettivi. Se i vincoli bloccano un obiettivo, quest'ultimo non verrà raggiunto. Ad esempio, il raggiungimento del numero massimo di repliche impedisce un ulteriore aumento anche se le repliche potrebbero dover essere scalate. | 
Policy | 
*MultidimPolicy | 
Il criterio ti consente di specificare come vengono applicati i consigli. | 
MultidimGoals
MultidimGoals sono obiettivi che il gestore della scalabilità automatica dei pod multidimensionale cerca di
raggiungere.
| Campo | Tipo | Descrizione | 
|---|---|---|
Metrics | 
[]MetricSpec | 
Contiene l'elenco delle metriche insieme al valore desiderato. Il gestore della scalabilità automatica dei pod multidimensionale tenta di rimanere vicino ai valori desiderati. | 
MultidimConstraints
MultidimConstraints descrivi i vincoli per la scalabilità automatica. I vincoli hanno
la precedenza sugli obiettivi.
| Campo | Tipo | Descrizione | 
|---|---|---|
Global | 
*GlobalConstraints | 
Vincoli che si applicano all'applicazione con scalabilità automatica nel suo complesso. | 
Pod | 
*PodConstraints | 
Vincoli che si applicano a un singolo pod dell'applicazione di destinazione. | 
ContainerControlledResources | 
[]ResourceName | 
Risorse container che devono essere controllate dal gestore della scalabilità automatica. memory è l'unico valore supportato. | 
Container | 
[]ContainerConstraints | 
Vincoli che si applicano ai container dei pod. | 
ResourceConstraints
ResourceConstraints definisci la quantità minima e massima di risorse che
puoi assegnare a un container, un pod o un'applicazione.
| Campo | Tipo | Descrizione | 
|---|---|---|
MinAllowed | 
ResourceList | 
Quantità minima di risorse che puoi assegnare. Se non viene fornito, viene utilizzato 0. | 
MaxAllowed | 
ResourceList | 
Importo massimo delle risorse che puoi assegnare. Se non viene fornito, non ci sono limiti alla quantità massima di risorse. | 
GlobalConstraints
GlobalConstraints definisci i vincoli che si applicano all'applicazione nel suo complesso. Questi vincoli includono il numero di repliche o la quantità totale di risorse.
| Campo | Tipo | Descrizione | 
|---|---|---|
MinReplicas | 
*Int32 | 
Quantità minima di repliche che l'applicazione può avere. Se non viene fornito, viene utilizzato 1. | 
MaxReplicas | 
*Int32 | 
Quantità massima di repliche che l'applicazione può avere. Se non viene fornito, non ci sono limiti alla quantità massima di repliche. | 
Requests | 
*ResourceConstraints | 
Quantità minima e massima di risorse che un'applicazione può richiedere, sommate in tutti i pod. | 
PodConstraints
PodConstraints definisci la quantità minima e massima di risorse che un
singolo pod può richiedere, sommate in tutti i container che appartengono al pod.
| Campo | Tipo | Descrizione | 
|---|---|---|
Requests | 
*ResourceConstraints | 
Quantità minima e massima di risorse che un singolo pod può richiedere, sommate per tutti i container appartenenti al pod. | 
ContainerConstraints
ContainerConstraints sono vincoli che si applicano ai container dei pod.
| Campi | Tipo | Descrizione | 
|---|---|---|
Name | 
String | 
Nome del contenitore per il quale sono specificati i vincoli. Puoi anche utilizzare * per specificare i vincoli per tutti i container in un pod. | 
Requests | 
*ResourceConstraints | 
Quantità minima e massima di risorse che il container specificato può richiedere. | 
UpdateMode
Utilizza UpdateMode per controllare come vengono applicati i consigli calcolati.
| Campi | Tipo | Descrizione | 
|---|---|---|
AutoUpdates | 
UpdateMode = "Auto" | 
Aggiornamenti automatici significa che tutti i consigli del gestore della scalabilità automatica possono essere applicati in qualsiasi momento. | 
AutoUpdates | 
UpdateMode = "Off" | 
Aggiornamenti automatici significa che i suggerimenti del gestore della scalabilità automatica non vengono applicati. | 
MultidimPolicy
| Campi | Tipo | Descrizione | 
|---|---|---|
Update | 
UpdateMode | 
Definisce in che modo devono essere applicati i suggerimenti. Un valore vuoto non supera la convalida. | 
MultidimPodAutoscalerStatus
MultidimPodAutoscalerStatus descrive lo stato di runtime del gestore della scalabilità automatica.
| Campi | Tipo | Descrizione | 
|---|---|---|
ObservedGeneration | 
*Int64 | 
La generazione più recente osservata da questo gestore della scalabilità automatica. | 
RecommendedPodResources | 
*RecommendedPodResources | 
La quantità di risorse calcolata più di recente consigliata dallo strumento di scalabilità automatica per i pod controllati. | 
CurrentReplicas | 
Int32 | 
CurrentReplicas è il numero attuale di repliche dei pod gestiti da questo gestore della scalabilità automatica, come visto l'ultima volta dal gestore della scalabilità automatica. | 
DesiredReplicas | 
Int32 | 
DesiredReplicas è il numero desiderato di repliche dei pod gestiti da questo gestore della scalabilità automatica, come calcolato l'ultima volta dal gestore della scalabilità automatica. | 
CurrentMetrics | 
[]autoscaling.MetricStatus | 
L'ultimo stato di lettura delle metriche utilizzate da questo gestore della scalabilità automatica. | 
Conditions | 
[]metav1.Condition | 
Conditions è l'insieme di condizioni richieste per la scalabilità automatica della destinazione e indica se queste condizioni sono soddisfatte o meno. | 
Passaggi successivi
- Scopri di più sulla configurazione della scalabilità automatica orizzontale dei pod.
 - Scopri di più sulla configurazione della scalabilità automatica verticale dei pod.