Scalabilità dei cluster utente

Per scalare i tuoi workload su GKE su AWS, puoi configurare i pool di nodi AWS per eseguire il ridimensionamento automatico oppure creare ed eliminare manualmente i pool di nodi AWS per eseguire il ridimensionamento verso l'alto o verso il basso.

Programma di scalabilità automatica del cluster

GKE su AWS implementa Cluster Autoscaler 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 riduce le dimensioni a un valore minimo da te 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 pool di nodi. Specifica invece una dimensione minima e massima per il pool di nodi e il cluster si ridimensiona automaticamente.

Se le risorse vengono eliminate o spostate durante la scalabilità automatica del cluster, i carichi di lavoro potrebbero subire interruzioni transitorie. Ad esempio, se il tuo carico di lavoro è costituito da una singola replica, il pod di quella replica potrebbe essere riprogrammato su un altro nodo se il nodo corrente viene eliminato. Prima di abilitare la scalabilità automatica dei cluster nel tuo AWSNodePool, progetta i tuoi workload in modo da tollerare 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 in base al 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 dei pod e dei 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 alla dimensione massima del pool di nodi. Se i nodi sono sottoutilizzati e tutti i pod possono essere pianificati anche con meno 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 svuotare il nodo in modo corretto dopo un periodo di timeout (10 minuti), il nodo viene terminato forzatamente. Il periodo di tolleranza non è configurabile.

Se i pod hanno richiesto risorse troppo poche (ad esempio se quelle predefinite 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ù preciso 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 supposizioni quando ridimensiona un pool di nodi:

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

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

  • Se hai AWSNodePools con tipi di istanze diversi, Cluster Autoscaler prende in considerazione il costo relativo del lancio 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.

Ridimensionare 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.

Attivazione della scalabilità automatica del pool di nodi

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

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

  2. Per attivare il gestore della scalabilità automatica dei cluster, modifica il manifest per il tuo AWSNodePool. Modifica il file cluster-0.yaml e individua 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 aumentarla 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. Quindi, 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à a uno stato Resizing. Al termine dell'aumento di scalabilità, AWSNodePool passa allo stato Provisioned.

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

    L'output mostra che AWSNodePool è Resizing. Le operazioni di ridimensionamento richiedono 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 AWSNodePools. 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 nel seguente esempio. 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 basato su Ingress.

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