Scalabilità delle richieste e dei limiti delle risorse container


Questa pagina spiega come analizzare e modificare le richieste di CPU e le richieste di memoria di un container in un cluster Google Kubernetes Engine (GKE) utilizzando la scalabilità automatica pod verticale.

Puoi scalare manualmente le risorse del container tramite la console Google Cloud, analizzarle utilizzando un oggetto VerticalPodAutoscaler o configurare la scalabilità automatica utilizzando la scalabilità automatica pod verticale.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Analizza le richieste di risorse

Il gestore della scalabilità automatica pod verticale analizza automaticamente i container e fornisce richieste di risorse suggerite. Puoi visualizzare queste richieste di risorse utilizzando la console Google Cloud, Cloud Monitoring o Google Cloud CLI.

Console

Per visualizzare le richieste di risorse suggerite nella console Google Cloud, devi disporre di un carico di lavoro esistente di cui è stato eseguito il deployment da almeno 24 ore. Alcuni suggerimenti potrebbero non essere disponibili o pertinenti per determinati carichi di lavoro, ad esempio quelli creati nelle ultime 24 ore, pod autonomi e app scritte in Java.

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del carico di lavoro da scalare.

  3. Fai clic su Azioni > Scala > Modifica richieste di risorse.

    La sezione Analizza dati sull'utilizzo delle risorse mostra i dati storici sull'utilizzo analizzati dal controller del gestore della scalabilità automatica pod verticale per creare le richieste di risorse suggerite nella sezione Regola richieste e limiti di risorse.

Cloud Monitoring

Per visualizzare le richieste di risorse suggerite in Cloud Monitoring, devi aver eseguito il deployment di un carico di lavoro esistente.

  1. Vai alla pagina Metrics Explorer nella console Google Cloud.

    Vai a Metrics Explorer

  2. Fai clic su Configurazione.

  3. Espandi il menu Seleziona una metrica.

  4. Nel menu Risorsa, seleziona Scalabilità Kubernetes.

  5. Nel menu Categoria di metrica, seleziona Gestore della scalabilità automatica.

  6. Nel menu Metrica, seleziona Consigliato per byte di richiesta replica e Consigliato per core di richiesta di replica.

  7. Fai clic su Applica.

Interfaccia a riga di comando gcloud

Per visualizzare le richieste di risorse suggerite, devi creare un oggetto VerticalPodAutoscaler e un oggetto Deployment.

  1. Per i cluster standard, abilita la scalabilità automatica pod verticale per il tuo cluster. Per i cluster Autopilot, la scalabilità automatica pod verticale è abilitata per impostazione predefinita.

    gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
    

    Sostituisci CLUSTER_NAME con il nome del cluster.

  2. Salva il seguente manifest come my-rec-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-rec-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-rec-deployment
      template:
        metadata:
          labels:
            app: my-rec-deployment
        spec:
          containers:
          - name: my-rec-container
            image: nginx
    

    Questo manifest descrive un oggetto Deployment che non ha richieste di CPU o memoria. Il valore containers.name di my-rec-deployment specifica che tutti i pod nel deployment appartengono a VerticalPodAutoscaler.

  3. Applica il manifest al cluster:

    kubectl create -f my-rec-deployment.yaml
    
  4. Salva il seguente manifest come my-rec-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-rec-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-rec-deployment
      updatePolicy:
        updateMode: "Off"
    

    Questo file manifest descrive un VerticalPodAutoscaler. Il valore updateMode di Off indica che, quando vengono creati i pod, il controller del gestore della scalabilità automatica del pod verticale analizza le esigenze di CPU e memoria dei container e registra i suggerimenti nel campo status della risorsa. Il controller del gestore della scalabilità automatica pod verticale non aggiorna automaticamente le richieste di risorse per i container in esecuzione.

  5. Applica il manifest al cluster:

    kubectl create -f my-rec-vpa.yaml
    
  6. Dopo un po' di tempo, visualizza il VerticalPodAutoscaler:

    kubectl get vpa my-rec-vpa --output yaml
    

    L'output è simile al seguente:

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-rec-container
          lowerBound:
            cpu: 25m
            memory: 262144k
          target:
            cpu: 25m
            memory: 262144k
          upperBound:
            cpu: 7931m
            memory: 8291500k
    ...
    

    Questo output mostra suggerimenti per le richieste di CPU e memoria.

Imposta manualmente le richieste di risorse pod

Puoi impostare manualmente le richieste di risorse pod utilizzando Google Cloud CLI o la console Google Cloud.

Console

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del carico di lavoro da scalare.

  3. Fai clic su Azioni > Scala > Modifica richieste di risorse.

    1. La sezione Modifica richieste e limiti di risorse mostra le richieste di CPU e memoria attuali per ogni container, nonché le richieste di CPU e memoria suggerite.
  4. Fai clic su Applica suggerimenti più recenti per visualizzare le richieste suggerite per ciascun contenitore.

  5. Fai clic su Salva modifiche.

  6. Fai clic su Conferma.

gcloud

Per impostare le richieste di risorse per un pod, imposta i valori request.cpu e memory.cpu nel manifest del deployment.In questo esempio, modificherai manualmente il deployment creato in Analizzare le richieste di risorse con le richieste di risorse suggerite.

  1. Salva il seguente manifest di esempio come my-adjusted-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-rec-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-rec-deployment
      template:
        metadata:
          labels:
            app: my-rec-deployment
        spec:
          containers:
          - name: my-rec-container
            image: nginx
            resources:
              requests:
                cpu: 25m
                memory: 256Mi
    

    Questo manifest descrive un deployment che ha due pod. Ogni pod ha un container che richiede 25 milliCPU e 256 MiB di memoria.

  2. Applica il manifest al cluster:

    kubectl apply -f my-adjusted-deployment.yaml
    

Puoi anche applicare le modifiche manualmente seguendo questa procedura:

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del carico di lavoro da scalare.

  3. Fai clic su Azioni > Scala > Modifica richieste di risorse.

  4. Configura le richieste di container.

  5. Fai clic su Ottieni YAML equivalente.

  6. Fai clic su Scarica carico di lavoro oppure copia e incolla il manifest in un file denominato resource-adjusted.yaml.

  7. Applica il manifest al tuo cluster:

    kubectl create -f resource-adjusted.yaml
    

Imposta automaticamente le richieste di risorse pod

La scalabilità automatica pod verticale utilizza l'oggetto VerticalPodAutoscaler per impostare automaticamente le richieste di risorse sui pod quando updateMode è Auto. Puoi configurare un elemento VerticalPodAutoscaler utilizzando gcloud CLI o la console Google Cloud.

Console

Per impostare automaticamente le richieste di risorse, devi avere un cluster in cui è abilitata la funzionalità di scalabilità automatica pod verticale. Nei cluster Autopilot la funzionalità di scalabilità automatica pod verticale è abilitata per impostazione predefinita.

Abilita scalabilità automatica pod verticale

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. Nella sezione Automazione, fai clic su Modifica per l'opzione Scalabilità automatica pod verticale.

  4. Seleziona la casella di controllo Abilita scalabilità automatica pod verticale.

  5. Fai clic su Salva modifiche.

Configura scalabilità automatica pod verticale

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment per cui vuoi configurare la scalabilità automatica pod verticale.

  3. Fai clic su Azioni > Scalabilità automatica > Scalabilità automatica pod verticale.

  4. Scegli una modalità di scalabilità automatica:

    • Modalità automatica: la scalabilità automatica pod verticale aggiorna le richieste di CPU e memoria durante la vita di un pod.
    • Modalità iniziale: la scalabilità automatica pod verticale assegna richieste di risorse solo al momento della creazione del pod e non le modifica mai.
  5. (Facoltativo) Imposta i criteri del contenitore. Questa opzione consente di assicurarsi che il suggerimento non venga mai impostato al di sopra o al di sotto di una richiesta di risorsa specificata.

    1. Fai clic su Aggiungi criterio.
    2. Seleziona Automatica per Modifica modalità contenitore.
    3. In Risorse controllate, seleziona le risorse su cui vuoi scalare automaticamente il container.
    4. Fai clic su Aggiungi regola per impostare uno o più intervalli minimo o massimo per le richieste di risorse del container:
      • Memoria minima consentita: la quantità minima di memoria che il container deve sempre avere, in MiB.
      • CPU minima consentita: la quantità minima di CPU che il container deve sempre avere, in mCPU.
      • Memoria massima consentita: la quantità massima di memoria che il container deve sempre avere, in MiB.
      • CPU massima consentita: la quantità massima di CPU che il container deve sempre avere, in mCPU.
  6. Fai clic su Fine.

  7. Fai clic su Salva.

gcloud

Per impostare automaticamente le richieste di risorse, devi utilizzare un cluster in cui è abilitata la funzionalità di scalabilità automatica pod verticale. Nei cluster Autopilot la funzionalità è abilitata per impostazione predefinita.

  1. Per i cluster standard, abilita la scalabilità automatica pod verticale per il tuo cluster:

    gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
    

    Sostituisci CLUSTER_NAME con il nome del cluster.

  2. Salva il seguente manifest come my-auto-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-auto-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-auto-deployment
      template:
        metadata:
          labels:
            app: my-auto-deployment
        spec:
          containers:
          - name: my-container
            image: registry.k8s.io/ubuntu-slim:0.1
            resources:
              requests:
                cpu: 100m
                memory: 50Mi
            command: ["/bin/sh"]
            args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
    

    Questo manifest descrive un deployment che ha due pod. Ogni pod ha un container che richiede 100 milliCPU e 50 MiB di memoria.

  3. Applica il manifest al cluster:

    kubectl create -f my-auto-deployment.yaml
    
  4. Elenca i pod in esecuzione:

    kubectl get pods
    

    L'output mostra i nomi dei pod in my-deployment:

    NAME                            READY     STATUS             RESTARTS   AGE
    my-auto-deployment-cbcdd49fb-d6bf9   1/1       Running            0          8s
    my-auto-deployment-cbcdd49fb-th288   1/1       Running            0          8s
    
  5. Salva il seguente manifest come my-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-auto-deployment
      updatePolicy:
        updateMode: "Auto"
    

    Questo manifest descrive un elemento VerticalPodAutoscaler con le seguenti proprietà:

    • targetRef.name: specifica che tutti i pod controllati da un deployment denominato my-deployment appartengono a questo VerticalPodAutoscaler.
    • updateMode: Auto: specifica che il controller Vertical Pod Autoscaler può eliminare un pod, regolare le richieste di CPU e memoria e quindi avviare un nuovo pod.

    Puoi anche configurare la scalabilità automatica pod verticale per assegnare richieste di risorse solo al momento della creazione del pod utilizzando updateMode: "Initial".

  6. Applica il manifest al cluster:

    kubectl create -f my-vpa.yaml
    
  7. Attendi qualche minuto e visualizza di nuovo i pod in esecuzione:

    kubectl get pods
    

    L'output mostra che i nomi dei pod sono cambiati:

    NAME                                 READY     STATUS             RESTARTS   AGE
    my-auto-deployment-89dc45f48-5bzqp   1/1       Running            0          8s
    my-auto-deployment-89dc45f48-scm66   1/1       Running            0          8s
    

    Se i nomi dei pod non sono cambiati, attendi ancora un po', quindi visualizza di nuovo i pod in esecuzione.

Visualizza le informazioni su un gestore della scalabilità automatica pod verticale

Per visualizzare i dettagli su un gestore della scalabilità automatica pod verticale:

  1. Ottieni informazioni dettagliate su uno dei tuoi pod in esecuzione:

    kubectl get pod POD_NAME --output yaml
    

    Sostituisci POD_NAME con il nome di uno dei pod recuperati nel passaggio precedente.

    L'output è simile al seguente:

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request'
    ...
    spec:
      containers:
      ...
        resources:
          requests:
            cpu: 510m
            memory: 262144k
        ...
    

    Questo output mostra che il controller Vertical Pod Autoscaler ha una richiesta di memoria di 262.144.144 mila e una richiesta di CPU di 510 milliCPU.

  2. Leggi informazioni dettagliate su VerticalPodAutoscaler:

    kubectl get vpa my-vpa --output yaml
    

    L'output è simile al seguente:

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-container
          lowerBound:
            cpu: 536m
            memory: 262144k
          target:
            cpu: 587m
            memory: 262144k
          upperBound:
            cpu: 27854m
            memory: "545693548"
    

    Questo output mostra suggerimenti per le richieste di CPU e memoria e include le seguenti proprietà:

    • target: specifica che, per un'esecuzione ottimale,il container deve richiedere 587 milliCPU e 26.2144 kilobyte di memoria.
    • lowerBound e upperBound: la scalabilità automatica pod verticale utilizza queste proprietà per decidere se eliminare un pod e sostituirlo con un nuovo pod. Se un pod ha richieste inferiori al limite inferiore o superiori al limite superiore, il gestore della scalabilità automatica pod verticale elimina il pod e lo sostituisce con un pod che soddisfa l'attributo target.

Disattivare contenitori specifici

Puoi disattivare la scalabilità automatica pod verticale per container specifici utilizzando gcloud CLI o la console Google Cloud.

Console

Per disattivare la scalabilità automatica pod verticale per container specifici, devi avere un cluster con la funzionalità di scalabilità automatica pod verticale abilitata. Nei cluster Autopilot la funzionalità di scalabilità automatica pod verticale è abilitata.

Abilita scalabilità automatica pod verticale

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. Nella sezione Automazione, fai clic su Modifica per l'opzione Scalabilità automatica pod verticale.

  4. Seleziona la casella di controllo Abilita scalabilità automatica pod verticale.

  5. Fai clic su Salva modifiche.

Configura scalabilità automatica pod verticale

  1. Vai alla pagina Carichi di lavoro nella console Google Cloud.

    Vai a Carichi di lavoro

  2. Nell'elenco dei carichi di lavoro, fai clic sul nome del deployment per cui vuoi configurare la scalabilità automatica pod verticale.

  3. Fai clic su Azioni > Scalabilità automatica > Scalabilità automatica pod verticale.

  4. Scegli una modalità di scalabilità automatica:

    • Modalità automatica: la scalabilità automatica pod verticale aggiorna le richieste di CPU e memoria durante la vita di un pod.
    • Modalità iniziale: la scalabilità automatica pod verticale assegna richieste di risorse solo al momento della creazione del pod e non le modifica mai.
  5. Fai clic su Aggiungi criterio.

  6. Seleziona il contenitore da disattivare.

  7. In Modalità di modifica del contenitore, seleziona Off.

  8. Fai clic su Fine.

  9. Fai clic su Salva.

gcloud

Per disattivare la scalabilità automatica pod verticale per container specifici, segui questi passaggi:

  1. Salva il seguente manifest come my-opt-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-opt-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-opt-deployment
      updatePolicy:
        updateMode: "Auto"
      resourcePolicy:
        containerPolicies:
        - containerName: my-opt-sidecar
          mode: "Off"
    

    Questo file manifest descrive un VerticalPodAutoscaler. Il valore mode: "Off" disattiva i suggerimenti per il container my-opt-sidecar.

  2. Applica il manifest al cluster:

    kubectl apply -f my-opt-vpa.yaml
    
  3. Salva il seguente manifest come my-opt-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-opt-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-opt-deployment
      template:
        metadata:
          labels:
            app: my-opt-deployment
        spec:
          containers:
          - name: my-opt-container
            image: nginx
          - name: my-opt-sidecar
            image: busybox
            command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
    
  4. Applica il manifest al cluster:

    kubectl apply -f my-opt-deployment.yaml
    
  5. Dopo un po' di tempo, visualizza il gestore della scalabilità automatica pod verticale:

    kubectl get vpa my-opt-vpa --output yaml
    

    L'output mostra suggerimenti per le richieste di CPU e memoria:

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-opt-container
    ...
    

    In questo output sono disponibili solo suggerimenti per un container. Non ci sono consigli per my-opt-sidecar.

    Il gestore della scalabilità automatica pod verticale non aggiorna mai le risorse sui container disattivati. Se attendi qualche minuto, il pod viene ricreato, ma solo un container ha richieste di risorse aggiornate.

Passaggi successivi