Ridimensionare e configurare pool di nodi in Azure Red Hat OpenShift con piani di controllo ospitati (anteprima)

Dopo aver creato pool di nodi nel cluster Azure Red Hat OpenShift con piani di controllo ospitati, è possibile ridimensionarli per regolare la capacità, controllare il posizionamento del carico di lavoro con etichette e taints, configurare il comportamento di svuotamento dei nodi ed eliminare pool di nodi non più necessari.

Prerequisiti

  • Un cluster Azure Red Hat OpenShift esistente con piani di controllo ospitati e almeno un pool di nodi.
  • interfaccia della riga di comando di Azure versione 2.67.0 o successiva. Usare az --version per trovare la versione installata. Se è necessario installare o aggiornare, vedere Installare interfaccia della riga di comando di Azure.
  • L'estensione CLI di ARO HCP è installata. Se è necessario installarlo, eseguire az extension add --name aro.

Impostare le variabili di ambiente

Se non sono già state impostate le variabili di ambiente seguenti, impostarle nella shell prima di procedere. Sostituire i valori segnaposto con i propri.

CUSTOMER_RG_NAME="<resource-group-name>"
CLUSTER_NAME="<cluster-name>"
NP_NAME="<node-pool-name>"

Ridimensionare un pool di nodi

Ridimensionare un pool di nodi esistente per regolare la capacità per modificare le esigenze del carico di lavoro. Impostare un numero di repliche specifico per il ridimensionamento manuale o configurare la scalabilità automatica per regolare automaticamente il numero di nodi all'interno di un intervallo definito.

Note

È necessario configurare replicas o autoScaling per un pool di nodi, ma non entrambi.

  1. Aggiornare il numero di repliche del pool di nodi o la configurazione della scalabilità automatica.

    Nell'esempio seguente viene ridimensionato un pool di nodi con numero di repliche fisse a quattro repliche. Se il pool di nodi usa attualmente la scalabilità automatica, aggiungere --remove properties.autoScaling per disabilitarlo:

    az aro hcp cluster nodepool update \
      --resource-group "${CUSTOMER_RG_NAME}" \
      --cluster-name "${CLUSTER_NAME}" \
      --name "${NP_NAME}" \
      --replicas 4 \
      --remove properties.autoScaling
    

    Per passare da un numero di repliche fisso alla scalabilità automatica, aggiungere --remove properties.replicas e fornire l'intervallo di scalabilità automatica:

    az aro hcp cluster nodepool update \
      --resource-group "${CUSTOMER_RG_NAME}" \
      --cluster-name "${CLUSTER_NAME}" \
      --name "${NP_NAME}" \
      --min-replicas 2 \
      --max-replicas 8 \
      --remove properties.replicas
    
  2. Verificare le modifiche apportate al pool di nodi.

    oc get nodes
    

Controllare il posizionamento del carico di lavoro

Applicare etichette e taints a un pool di nodi per controllare quali carichi di lavoro pianificare nei nodi. Usare le etichette per specificare come destinazione i nodi usando selettori di nodo e regole di affinità. Usa i taint per respingere i pod che non hanno una toleration corrispondente, in modo da poter dedicare i pool di nodi a carichi di lavoro specifici.

Importante

Gli aggiornamenti delle etichette e dei taint si applicano solo ai nodi creati successivamente nel pool di nodi. L'aggiornamento delle etichette o dei taint non attiva una sostituzione progressiva dei nodi esistenti. Per applicare etichette o taints a tutti i nodi, eliminare il pool di nodi e crearne uno nuovo con la configurazione desiderata.

  1. Aggiungi o aggiorna etichette e taint sul pool di nodi.

    L'esempio seguente aggiunge un'etichetta e un taint a un pool di nodi:

    az aro hcp cluster nodepool update \
      --resource-group "${CUSTOMER_RG_NAME}" \
      --cluster-name "${CLUSTER_NAME}" \
      --name "${NP_NAME}" \
      --labels "[{key:workload-type,value:gpu}]" \
      --taints "[{key:dedicated,value:gpu-workloads,effect:NoSchedule}]"
    

    La effect proprietà determina il modo in cui il taint influenza la pianificazione dei pod:

    Effect Description
    NoSchedule Lo scheduler non pianifica i pod senza una tollerazione corrispondente sul nodo. I pod esistenti non vengono rimossi.
    PreferNoSchedule Lo scheduler evita di posizionare sul nodo i pod senza una tolleranza corrispondente, ma non lo vieta.
    NoExecute Lo scheduler non pianifica i pod senza una tollerazione corrispondente sul nodo, e i pod esistenti senza una tollerazione corrispondente vengono espulsi.
  2. Verificare che le etichette siano applicate al pool di nodi.

    az aro hcp cluster nodepool show \
      --resource-group "${CUSTOMER_RG_NAME}" \
      --cluster-name "${CLUSTER_NAME}" \
      --name "${NP_NAME}" \
      --query "properties.labels"
    

    L'output di esempio seguente mostra l'etichetta applicata al pool di nodi:

    [
      {
        "key": "workload-type",
        "value": "gpu"
      }
    ]
    

Configurare il comportamento di svuotamento dei nodi

Impostare il periodo di tolleranza di svuotamento del nodo per controllare per quanto tempo il processo di aggiornamento rispetta i carichi di lavoro protetti da PDB (Pod Disruption Budget) quando sostituisce i nodi nel pool. Dopo la scadenza del periodo di tolleranza, il processo rimuove forzatamente tutti i carichi di lavoro rimanenti.

La proprietà di timeout del drenaggio del nodo di un pool di nodi ha la precedenza sull'impostazione predefinita a livello di cluster per quel pool. L'intervallo di valori è compreso tra 0 e 10.080 minuti (1 settimana). Un valore di 0 significa che il nodo si svuota senza alcun limite di tempo fino al completamento.

L'esempio seguente imposta un timeout di svuotamento di 30 minuti:

az aro hcp cluster nodepool update \
  --resource-group "${CUSTOMER_RG_NAME}" \
  --cluster-name "${CLUSTER_NAME}" \
  --name "${NP_NAME}" \
  --node-drain-timeout 30

Eliminare un pool di nodi

  1. Eliminare un pool di nodi quando non è più necessario o quando è necessario ricrearlo con proprietà non modificabili diverse.

    az aro hcp cluster nodepool delete \
      --resource-group "${CUSTOMER_RG_NAME}" \
      --cluster-name "${CLUSTER_NAME}" \
      --name "${NP_NAME}" \
      -y
    
  2. Verificare che i nodi vengano eliminati.

    oc get nodes