Scalabilità dei cluster utente

Per scalare i workload su GKE su AWS, puoi configurare i tuoi AWSNodePools in modo che vengano scalati automaticamente o creare ed eliminare manualmente gli AWSNodePools per fare lo scale up o fare lo scale down.

Gestore della scalabilità automatica del cluster

GKE su AWS implementa il gestore della scalabilità automatica dei cluster 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 workload 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 workload. Non è necessario aggiungere o rimuovere manualmente i nodi o eseguire un provisioning eccessivo dei pool di nodi. Invece, devi specificare una dimensione minima e una 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 workload potrebbero subire interruzioni temporanee. Ad esempio, se il workload è costituito da una singola 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 in AWSNodePool, progetta i 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, devi specificare una dimensione minima e una massima per il pool di nodi nella AWSNodePool risorsa Kubernetes.

Puoi disabilitare il gestore della scalabilità automatica dei cluster impostando spec.minNodeCount uguale a spec.maxNodeCount su 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 dei cluster aggiunge nodi, fino alla dimensione massima del pool di nodi. Se i nodi sono sottoutilizzati e tutti i pod potrebbero 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 il nodo non può essere svuotato normalmente dopo un periodo di timeout (10 minuti), viene terminato forzatamente. Il periodo di tolleranza non è configurabile.

Se i pod hanno richiesto troppe poche risorse (ad esempio, se i valori predefiniti non sono sufficienti), il gestore della scalabilità automatica dei 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 workload.

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 possibilmente una breve interruzione. Se i tuoi servizi non tollerano le interruzioni, ti sconsigliamo di utilizzare il gestore della scalabilità automatica dei cluster.

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

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

Ridimensiona un pool di nodi

Un AWSNodePool include minNodeCount e maxNodeCount campi. 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 Creare un cluster utente. Tieni a portata di mano il file YAML (ad esempio, cluster-0.yaml) che crea il cluster.

Abilitare la scalabilità automatica del pool di nodi

  1. Dalla directory anthos-aws, utilizza anthos-gke per passare al contesto del 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 AWSNodePool. Modifica il file cluster-0.yaml e individua la sezione AWSNodePool. Modifica i valori di spec.minNodeCount e spec.maxNodeCount.

    L'esempio seguente mantiene la dimensione minima di questo pool di nodi a 3 nodi, ma consente al gestore della scalabilità automatica dei cluster di aumentare la sua dimensione 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. 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 della scalabilità di AWSNodePool, la risorsa 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
    

Creare manualmente un nuovo AWSNodePool

Puoi anche scalare il cluster creando nuovi AWSNodePools. Quando crei un nuovo AWSNodePool, puoi anche eseguire 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 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, consulta la documentazione di riferimento su AWSNodePool.