Scalabilità dei cluster utente

Per scalare i carichi di lavoro su Cluster Anthos on AWS, puoi configurare i tuoi AWSNodePool per lo scale out automatico o creare ed eliminare manualmente i AWSNodePools per fare lo scale up o lo scale down.

Programma di scalabilità automatica del cluster

Cluster Anthos on 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 fa lo scale down alla dimensione minima designata. Questo può aumentare la disponibilità dei carichi di lavoro quando ti serve, 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 il provisioning eccessivo dei pool di nodi. Devi invece specificare una dimensione minima e massima per il pool di nodi e il cluster scala 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 una singola replica, il pod di quella replica potrebbe essere ripianificato su un nodo diverso se il suo nodo attuale viene eliminato. Prima di abilitare il gestore della scalabilità automatica dei cluster nel tuo AWSNodePool, progetta i tuoi carichi di lavoro per tollerare le potenziali interruzioni o assicurarti che i pod critici non vengano interrotti.

Come funziona il gestore della scalabilità automatica dei cluster

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

Puoi disabilitare il gestore della scalabilità automatica dei cluster impostando spec.minNodeCount su spec.maxNodeCount nei tuoi AWSNodePools.

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

Se i pod non sono pianificabili perché non ci sono abbastanza nodi 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 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 controllato dopo un periodo di timeout (10 minuti), il nodo viene forzato. Il periodo di tolleranza non è configurabile.

Se i tuoi pod hanno richiesto un numero di risorse insufficiente (ad esempio, se i valori predefiniti non sono sufficienti), il gestore della scalabilità automatica dei cluster non corregge la situazione. Puoi assicurarti che il gestore della scalabilità automatica dei cluster funzioni nel modo più preciso possibile creando richieste di risorse adeguate per tutti i carichi di lavoro.

Criteri operativi

Il gestore della scalabilità automatica dei cluster fa le seguenti ipotesi durante il ridimensionamento di un pool di nodi:

  • Tutti i pod replicati possono essere riavviati su un altro nodo, causando probabilmente un'interruzione rapida. Se i tuoi servizi non tollerano interruzioni, 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 diversi tipi di istanza, Cluster Autoscaler 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 sono monitorate. Ai nodi creati dal gestore della scalabilità automatica dei cluster vengono assegnate etichette specificate con etichette --node 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 dell'AWSNodePool.

Prima di iniziare

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

Abilitazione della scalabilità automatica del pool di nodi

  1. Dalla directory anthos-aws, utilizza anthos-gke per cambiare il contesto del servizio di gestione.

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

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

    L'esempio seguente mantiene le dimensioni minime di questo pool di nodi a 3 nodi, ma consente al gestore della scalabilità automatica dei 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 diventerà in stato Resizing. Quando AWSNodePool completa la scalabilità, si sposta nello stato Provisioned.

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

    L'output mostra che l'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 pool AWSNode

Puoi anche scalare il tuo cluster creando nuovi AWSNodePools. Quando crei un nuovo AWSNodePool, puoi anche fare lo scale up o lo scale down delle dimensioni dell'istanza.

  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 tuo cluster di gestione.

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

Passaggi successivi

Eseguire il deployment di un servizio supportato da Ingress.

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