Configurazione della scalabilità automatica dei pod multidimensionali


La scalabilità automatica multidimensionale dei pod ti evita di dover scegliere una sola modalità per la scalabilità dei tuoi cluster. Grazie alla 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

Utilizzo della scalabilità automatica multidimensionale dei pod

Questo esempio mostra come creare un oggetto 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 monitorato. Il seguente file, php-apache.yaml, specifica un valore per le richieste 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 di php-apache.yaml:

kubectl apply -f php-apache.yaml

Creazione di un MultidimPodAutoscaler

Dopo aver creato il deployment, puoi creare un oggetto MultidimPodAutoscaler. Il seguente manifest di MultidimPodAutoscaler regola automaticamente il numero di repliche e 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 il file MultidimPodAutoscaler, applica il manifest php-apache-autoscaler.yaml:

kubectl apply -f php-apache-autoscaler.yaml

Visualizzazione di un MultidimPodAutoscaler

Visualizza tutti gli oggetti MultidimPodAutoscaler utilizzando il comando kubectl get:

kubectl get mpa

Eliminazione di un MultidimPodAutoscaler

Elimina un oggetto MultidimPodAutoscaler utilizzando il comando kubectl delete:

kubectl delete -f php-apache-autoscaler.yaml

Riferimento API

Le seguenti sezioni 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 per un gestore della scalabilità automatica multidimensionale dei pod, che gestisce automaticamente le risorse dei pod e il loro conteggio in base all'utilizzo storico e in tempo reale delle risorse.

Campo Tipo Descrizione
metadata ObjectMeta Metadati degli oggetti standard.
spec MultidimPodAutoscalerSpec Il comportamento desiderato del gestore della scalabilità automatica dei pod multidimensionali.
status MultidimPodAutoscalerStatus Lo stato osservato più di recente del gestore della scalabilità automatica dei pod multidimensionali.

MultidimPodAutoscalerSpec

MultidimPodAutoscalerSpec è la specifica che definisce il comportamento del gestore della scalabilità automatica.

Campo Tipo Descrizione
ScaleTargetRef autoscaling.CrossVersionObjectReference Un riferimento che rimanda a una risorsa di destinazione da scalare (con la sottorisorsa Scala).
Goals *MultidimGoals Obiettivi che il gestore della scalabilità automatica dei pod multidimensionale cerca di raggiungere e mantenere.
Constraints *MultidimConstraints Descrive i vincoli per la scalabilità automatica. I vincoli superano gli obiettivi. Se i vincoli bloccano alcuni obiettivi, l'obiettivo non verrà raggiunto. Ad esempio, raggiungere il numero massimo di repliche impedisce un ulteriore scale up anche se potrebbe essere necessario scalare le repliche.
Policy *MultidimPolicy Le norme ti consentono di specificare in che modo vengono applicati i consigli.

MultidimGoals

Gli MultidimGoals sono obiettivi che il gestore della scalabilità automatica dei pod multidimensionale cerca di raggiungere.

Campo Tipo Descrizione
Metrics []MetricSpec Contiene l'elenco di metriche insieme al valore desiderato. Il gestore della scalabilità automatica dei pod multidimensionali cerca di avvicinarsi ai valori desiderati.

MultidimConstraints

MultidimConstraints descrive 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 target.
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 definiscono la quantità minima e massima di risorse che puoi assegnare a un container, a un pod o a un'applicazione.

Campo Tipo Descrizione
MinAllowed ResourceList Quantità minima di risorse che puoi assegnare. Se non specificato, viene utilizzato 0.
MaxAllowed ResourceList Quantità massima di risorse che puoi assegnare. Se non viene specificato, non sono previsti limiti alla quantità massima di risorse.

GlobalConstraints

GlobalConstraints definiscono i vincoli che si applicano completamente all'applicazione. Questi vincoli includono il numero di repliche o la quantità totale di risorse.

Campo Tipo Descrizione
MinReplicas *Int32 Quantità minima di repliche che può avere l'applicazione. Se non viene specificato, ne viene utilizzato uno.
MaxReplicas *Int32 Quantità massima di repliche che può avere l'applicazione. Se non specificato, non sono previsti limiti al numero massimo di repliche.
Requests *ResourceConstraints Quantità minima e massima di risorse che un'applicazione può richiedere, sommate in tutti i pod.

PodConstraints

PodConstraints definiscono 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 in tutti i container che appartengono 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 in che modo vengono applicati i consigli calcolati.

Campi Tipo Descrizione
AutoUpdates UpdateMode = "Auto" Aggiornamenti automatici significa che tutti i suggerimenti del gestore della scalabilità automatica possono essere applicati in qualsiasi momento.
AutoUpdates UpdateMode = "Off" Aggiornamenti automatici indica 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 consigli. 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à calcolata più di recente di risorse consigliate dal gestore della scalabilità automatica per i pod controllati.
CurrentReplicas Int32 CurrentReplicas è il numero attuale di repliche di pod gestiti da questo gestore della scalabilità automatica, come indicato per l'ultima volta dal gestore della scalabilità automatica.
DesiredReplicas Int32 DesiredReplicas è il numero desiderato di repliche di pod gestiti da questo gestore della scalabilità automatica, come calcolato per ultimo dal gestore della scalabilità automatica.
CurrentMetrics []autoscaling.MetricStatus Lo stato dell'ultima lettura delle metriche utilizzate da questo gestore della scalabilità automatica.
Conditions []metav1.Condition Conditions è l'insieme di condizioni necessarie a questo gestore della scalabilità automatica per scalare il target e indica se queste condizioni sono soddisfatte.

Passaggi successivi