Scalabilità dei cluster utente

Per scalare i carichi di lavoro su GKE su AWS, puoi configurare i pool AWSNode per lo scale out automatico oppure creare ed eliminare manualmente i pool AWSNode per lo scale up o lo scale down.

Programma di scalabilità automatica del cluster

GKE su AWS implementa il gestore della scalabilità automatica dei cluster di Kubernetes. Quando la domanda sui tuoi nodi è elevata, il gestore della scalabilità automatica dei cluster aggiunge nodi al pool di nodi. Quando la domanda è ridotta, il gestore della scalabilità automatica dei cluster esegue lo scale down alle dimensioni minime indicate. Ciò può aumentare la disponibilità dei carichi di lavoro quando ne hai bisogno, controllando al contempo 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 esigenze dei tuoi carichi di lavoro. Non è necessario aggiungere o rimuovere manualmente i nodi o eseguire l'overprovisioning dei pool di nodi. ma specifichi una dimensione minima e una massima per il pool di nodi, in modo che il cluster venga 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 carico di lavoro è costituito da un'unica replica, il pod della replica potrebbe essere ripianificato su un nodo diverso se il nodo attuale viene eliminato. Prima di abilitare il gestore della scalabilità automatica dei cluster nel tuo pool AWSNodePool, progetta i tuoi carichi di lavoro in modo da tollerare potenziali interruzioni o assicurati che i pod critici non vengano interrotti.

Come funziona il gestore della scalabilità automatica del cluster

Il gestore della scalabilità automatica del cluster funziona in base al pool di nodi. Quando crei un pool di nodi, specifichi una dimensione minima e una massima per il pool di nodi nella risorsa Kubernetes AWSNodePool.

Puoi disabilitare il gestore della scalabilità automatica del cluster impostando spec.minNodeCount su spec.maxNodeCount nei pool AWSNode.

Il gestore della scalabilità automatica del 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é nel pool di nodi non sono presenti un numero sufficiente di nodi, il gestore della scalabilità automatica del cluster aggiunge nodi fino alla dimensione massima del pool. 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 al limite delle dimensioni minime del pool di nodi. Se non è possibile eseguire lo svuotamento controllato dopo un periodo di timeout (10 minuti), il nodo viene arrestato forzatamente. Il periodo di tolleranza non è configurabile.

Se i tuoi pod hanno richiesto un numero insufficiente di risorse (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 del 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 del cluster formula le ipotesi seguenti durante il ridimensionamento di un pool di nodi:

  • Tutti i pod replicati possono essere riavviati su altri nodi, causando probabilmente una breve interruzione. Se i tuoi servizi non tollerano le interruzioni, non ti consigliamo di utilizzare il gestore della scalabilità automatica dei cluster.

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

  • Se hai AWSNodePool con tipi di istanza diversi, il gestore della scalabilità automatica del cluster considera 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 dal gestore della scalabilità automatica del cluster vengono assegnate etichette specificate con --node-labels al momento della creazione del pool di nodi.

Ridimensiona un pool di nodi

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 utilizzando le istruzioni in Creazione di un cluster utente. Assicurati di 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 cambiare contesto al servizio di gestione.

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

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

    L'esempio seguente mantiene le dimensioni minime di questo pool di nodi su 3 nodi, ma consente al gestore della scalabilità automatica del cluster di aumentarne 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. Quindi, applica il codice 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. Quando AWSNodePool completa la scalabilità, 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 alcuni 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 scalare il cluster anche creando nuovi AWSNodePools. Quando crei un nuovo AWSNodePool, puoi anche fare lo scale up o lo scale down delle 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 che non sono 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 ulteriori opzioni, leggi la documentazione di riferimento su AWSNodePool.