Scalabilità dei cluster utente

Per scalare i tuoi carichi di lavoro su GKE su AWS, puoi configurare i tuoi AWSNodePool in modo che vengano scalati automaticamente o creare ed eliminare manualmente gli AWSNodePool per aumentare o ridurre la scalabilità.

Programma di scalabilità automatica del cluster

GKE su AWS implementa lo scalatore automatico del cluster di Kubernetes. Quando la domanda sui nodi è elevata, il gestore della scalabilità automatica dei cluster aggiunge nodi al pool di nodi. Quando la domanda è bassa, il gestore della scalabilità automatica dei cluster esegue lo scale down fino a una dimensione minima che hai designato. In questo modo puoi aumentare la disponibilità dei carichi di lavoro quando ne hai bisogno, tenendo sotto controllo i costi.

Panoramica

Il gestore della scalabilità automatica dei cluster ridimensiona automaticamente il numero di nodi in un determinato pool di nodi, in base alle richieste dei tuoi carichi di lavoro. Non è necessario aggiungere o rimuovere manualmente i nodi o eseguire un provisioning eccessivo dei node pool. Invece, specifichi una dimensione minima e massima per il pool di nodi e il cluster viene scalato automaticamente.

Se le risorse vengono eliminate o spostate durante la scalabilità automatica del cluster, i carichi di lavoro potrebbero subire interruzioni temporanee. Ad esempio, se il tuo workload è costituito da una singola replica, il pod di questa replica potrebbe essere riprogrammato su un nodo diverso se il nodo attuale viene eliminato. Prima di abilitare Cluster Autoscaler in AWSNodePool, progetta i tuoi workload in modo che tollerino potenziali interruzioni o assicurati che i pod critici non vengano interrotti.

Come funziona il gestore della scalabilità automatica dei cluster

Il gestore della scalabilità automatica dei cluster funziona per pool di nodi. Quando crei un pool di nodi, specifica una dimensione minima e massima per il pool di nodi nella risorsa Kubernetes AWSNodePool.

Puoi disattivare il gestore della scalabilità automatica dei cluster impostando spec.minNodeCount su spec.maxNodeCount in AWSNodePools.

Il gestore della scalabilità automatica dei cluster aumenta o diminuisce automaticamente le dimensioni del pool di nodi in base alle richieste di risorse (anziché all'utilizzo effettivo delle risorse) dei pod in esecuzione sui nodi del pool di nodi. Controlla periodicamente lo stato di pod e nodi e interviene:

Se i pod non sono pianificabili perché non ci sono nodi sufficienti nel pool di nodi, il gestore della scalabilità automatica del cluster aggiunge nodi fino alle dimensioni massime del pool di nodi. Se i nodi sono sottoutilizzati e tutti i pod potrebbero essere pianificati anche con un numero inferiore di nodi nel pool di nodi, il gestore della scalabilità automatica dei cluster rimuove i nodi fino alla dimensione minima del pool di nodi. Se non è possibile eseguire il svuotamento controllato del nodo dopo un periodo di timeout (10 minuti), il nodo viene terminato forzatamente. Il periodo di tolleranza non è configurabile.

Se i pod hanno richiesto risorse insufficienti (ad esempio, se i valori predefiniti sono insufficienti), il gestore della scalabilità automatica del cluster non corregge la situazione. Puoi contribuire a garantire che il gestore della scalabilità automatica dei cluster funzioni nel modo più accurato possibile creando richieste di risorse adeguate per tutti i tuoi carichi di lavoro.

Criteri operativi

Il gestore della scalabilità automatica dei cluster fa le seguenti ipotesi quando ridimensiona un pool di nodi:

  • Tutti i pod replicati possono essere riavviati su un altro nodo, causando una breve interruzione. Se i tuoi servizi non tollerano interruzioni, ti sconsigliamo di utilizzare Cluster Autoscaler.

  • Tutti i nodi di un singolo pool di nodi hanno lo stesso insieme di etichette.

  • Se hai AWSNodePool con tipi di istanza diversi, Cluster Autoscaler prende in considerazione il costo relativo dell'avvio di nuovi nodi e tenta di espandere il pool di nodi meno costoso.

  • Le etichette aggiunte manualmente dopo la creazione iniziale del cluster o del pool di nodi non vengono monitorate. Ai nodi creati da Cluster Autoscaler vengono assegnate le etichette specificate con --node-labels al momento della creazione del pool di nodi.

Ridimensiona un node pool

Un AWSNodePool include i campi minNodeCount e maxNodeCount. Questi campi dichiarano un numero minimo e massimo di nodi worker nel pool. Puoi modificare questi valori prima o dopo la creazione di AWSNodePool.

Prima di iniziare

Esegui il provisioning di un cluster seguendo le istruzioni riportate in Creazione di un cluster utente. Avere a disposizione il file YAML (ad esempio cluster-0.yaml) che crea il cluster.

Abilitazione della scalabilità automatica del pool di nodi

  1. Dalla directory anthos-aws, utilizza anthos-gke per passare al servizio di gestione.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Per abilitare il gestore della scalabilità automatica dei cluster, modifica il manifest per il tuo AWSNodePool. Modifica il file cluster-0.yaml e trova la sezione AWSNodePool. Modifica i valori di spec.minNodeCount e spec.maxNodeCount.

    L'esempio riportato di seguito mantiene la dimensione minima di questo pool di nodi a 3 nodi, ma consente al gestore della scalabilità automatica del cluster di aumentare le dimensioni fino a 10 nodi.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: cluster-0-pool-0
    spec:
      clusterName: cluster-0
      version: 1.25.5-gke.2100
      minNodeCount: 3
      maxNodeCount: 10
      ...
    
  3. Dopodiché, applica il file YAML per ridimensionare il pool di nodi.

    env HTTPS_PROXY=http://localhost:8118 \
        kubectl apply -f cluster-0.yaml
    
  4. La risorsa AWSNodePool passerà allo stato Resizing. Al termine dello scaling, AWSNodePool passa allo stato Provisioned.

    env HTTPS_PROXY=http://localhost:8118 \
        kubectl get AWSNodePools
    

    L'output mostra che AWSNodePool è Resizing. Il completamento delle operazioni di ridimensionamento richiede diversi minuti.

    NAME               CLUSTER     STATE     AGE   VERSION
    cluster-0-pool-0   cluster-0   Resizing  3h    1.25.5-gke.2100
    

Creazione manuale di un nuovo AWSNodePool

Puoi anche scalare il cluster creando nuovi AWSNodePool. Quando crei un nuovo AWSNodePool, puoi anche aumentare o diminuire le dimensioni delle istanze.

  1. Puoi recuperare il manifest di configurazione di un AWSNodePool esistente con kubectl get.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yaml
    
  2. Modifica new_nodepool.yaml e rimuovi le sezioni non presenti nell'esempio seguente. Salva il file.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional 
    
  3. Per creare un nuovo AWSNodePool, applica il manifest al cluster di gestione.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f new_nodepool.yaml
    

Passaggi successivi

Esegui il deployment di un servizio supportato da Ingress.

Per visualizzare altre opzioni, leggi la documentazione di riferimento su AWSNodePool.