Questo argomento spiega come creare, aggiornare ed eliminare pool di nodi in un cluster del carico di lavoro. I pool di nodi consentono a un singolo cluster del carico di lavoro di contenere e gestire diversi tipi di nodi per supportare le esigenze delle varie applicazioni.
Ad esempio, un cluster può utilizzare nodi con capacità di storage elevata per eseguire un datastore e nodi con capacità di storage inferiore per elaborare le richieste delle applicazioni.
NotaNon è possibile creare pool di nodi nei cluster a nodo singolo.
Per creare e utilizzare pool di nodi in cluster del carico di lavoro creati da vSphere with Tanzu, è necessario eseguire vSphere v7.0 U3 o versione successiva.
Se si utilizza vSphere with Tanzu, i cluster di vSphere with Tanzu devono utilizzare l'APIv1alpha2
per eseguire correttamente i comandinode-pool
. Per ulteriori informazioni, vedere la documentazione di vSphere with Tanzu.
I pool di nodi definiscono le proprietà per i set di nodi worker utilizzati da un cluster del carico di lavoro.
Alcune proprietà del pool di nodi dipendono dalle opzioni della macchina virtuale disponibili nell'infrastruttura sottostante, ma tutti i pool di nodi in tutte le infrastrutture cloud condividono le seguenti proprietà:
name
: identificatore univoco per il pool di nodi, utilizzato per operazioni come aggiornamenti ed eliminazioni.replicas
: numero di nodi nel pool che condividono tutti le stesse proprietà.labels
: coppie chiave/valore impostate come metadati nei nodi per associare i carichi di lavoro ai nodi nel pool. Per ulteriori informazioni ed etichette di esempio, vedere Etichette e selettori nella documentazione di Kubernetes.Per i cluster del carico di lavoro in vSphere, i cluster di gestione autonomi per impostazione predefinita seguono regole di anti-affinità per distribuire i worker del pool di nodi e i nodi del piano di controllo in host ESXi diversi. Per disattivare le regole di anti-affinità per il posizionamento dei nodi, vedere Disattivazione delle regole di anti-affinità.
Tutti i cluster del carico di lavoro vengono creati con un primo pool di nodi originale. Quando si creano pool di nodi aggiuntivi per un cluster, come descritto di seguito, il primo pool di nodi fornisce i valori predefiniti per le proprietà non impostate nelle definizioni del nuovo pool di nodi.
Per ispezionare i pool di nodi attualmente disponibili in un cluster, eseguire:
tanzu cluster node-pool list CLUSTER-NAME
Il comando restituisce un elenco di tutti i pool di nodi nel cluster e lo stato delle repliche in ogni pool di nodi.
Per creare un pool di nodi in un cluster:
Creare un file di configurazione per il pool di nodi. Per un file di configurazione di esempio, vedere Configurazione di esempio.
Per un elenco completo delle proprietà di configurazione, vedere Proprietà di configurazione.
Creare il pool di nodi definito dal file di configurazione:
tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
Opzioni:
--namespace
specifica lo spazio dei nomi del cluster. Il valore predefinito è default
.--base-machine-deployment
specifica l'oggetto MachineDeployment
di base da cui creare il nuovo pool di nodi.
MachineDeployment
come indicato nell'output di tanzu cluster get
in Details
.MachineDeployment
del nodo worker del cluster, rappresentato internamente come workerMDs[0]
.Di seguito viene illustrata una configurazione di esempio per l'infrastruttura sottostante.
name
,
replicas
e
labels
obbligatorie, i file di configurazione per i pool di nodi in vSphere possono includere un blocco
vsphere
per definire proprietà facoltative specifiche della configurazione delle macchine virtuali in vSphere.
Definizione del pool di nodi di esempio per il cluster vSphere:
name: tkg-wc-oidc-md-1
replicas: 4
labels:
key1: value1
key2: value2
vsphere:
memoryMiB: 8192
diskGiB: 64
numCPUs: 4
datacenter: dc0
datastore: iscsi-ds-0
storagePolicyName: name
folder: vmFolder
resourcePool: rp-1
vcIP: 10.0.0.1
template: templateName
cloneMode: clone-mode
network: network-name
Tutti i valori non impostati in vsphere
bloccano l'eredità dai valori del primo pool di nodi del cluster.
Per il valore vcIP
, i pool di nodi del cluster del carico di lavoro devono essere eseguiti nello stesso vCenter del piano di controllo del cluster.
Per i cluster distribuiti da un supervisore di vSphere with Tanzu, definire storageClass
, tkr
e vmClass
. Per ulteriori informazioni su queste proprietà, vedere TanzuKubernetesCluster v1alpha3 API - Con annotazioni nella documentazione di vSphere with Tanzu.
Per impostazione predefinita, i cluster del carico di lavoro in vSphere vengono distribuiti in base a regole di anti-affinità che distribuiscono i nodi del piano di controllo e i nodi worker in ogni pool di nodi in più host ESXi. Per disattivare o riattivare le regole anti-affinità, vedere Disattivazione della regola di anti-affinità (vSphere) di seguito.
name
,
replicas
e
labels
obbligatorie, i file di configurazione per i pool di nodi in AWS supportano le proprietà facoltative seguenti:
az
: Zona disponibilitànodeMachineType
: Tipo di istanzaQueste impostazioni possono essere omesse. In questo caso, ereditano i loro valori dal primo pool di nodi del cluster.
Definizione del pool di nodi di esempio per un cluster AWS:
name: tkg-aws-wc-np-1
replicas: 2
az: us-west-2b
nodeMachineType: t3.large
labels:
key1: value1
key2: value2
NotaI pool di nodi del cluster del carico di lavoro in AWS devono trovarsi nella stessa zona di disponibilità del cluster di gestione autonomo.
name
,
replicas
e
labels
obbligatorie precedenti, i file di configurazione per i pool di nodi in Microsoft Azure supportano le proprietà facoltative seguenti:
az
: Zona disponibilitànodeMachineType
: Tipo di istanzaSe le impostazioni vengono omesse, i loro valori vengono ereditati dal primo pool di nodi del cluster.
Definizione del pool di nodi di esempio per il cluster di Azure:
name: tkg-azure-wc-np-1
replicas: 2
az: 2
nodeMachineType: Standard_D2s_v3
labels:
key1: value1
key2: value2
Nella tabella seguente sono elencate tutte le proprietà che è possibile definire nel file di configurazione di un pool di nodi per i cluster del carico di lavoro.
NotaNon è possibile aggiungere o modificare le proprietà
labels
,az
,nodeMachineType
o vSphere di un pool di nodi esistente. Per modificare queste proprietà, è necessario creare un nuovo pool di nodi nel cluster con le proprietà desiderate, eseguire la migrazione dei carichi di lavoro nel nuovo pool di nodi ed eliminare l'originale.
Nome | Tipo | Oggetto cluster | Provider | Note |
---|---|---|---|---|
name |
string | Qualsiasi | Tutti | Nome del pool di nodi da creare o aggiornare. |
replicas |
integer | Qualsiasi | Tutti | Numero di nodi nel pool di nodi. |
az |
string | Qualsiasi | TKG in AWS o Azure | ZD in cui posizionare i nodi. |
nodeMachineType |
string | Qualsiasi | TKG in AWS o Azure | instanceType o vmSize per il nodo in AWS e Azure rispettivamente. |
labels |
map[string]string | Qualsiasi | Tutti | Etichette da impostare nel nodo utilizzando kubeletExtraArgs (‐‐node-labels ). |
vmClass |
string | Qualsiasi | Tutti | Nome di un oggetto vmClass di Kubernetes. Corrisponde al valore di vmClass definito nel cluster TKC. Questa classe imposta la CPU e la memoria disponibili per il nodo. Per visualizzare un elenco delle classi di macchina virtuale disponibili, eseguire kubectl describe virtualmachineclasses . |
storageClass |
string | Qualsiasi | Tutti | Nome di un elemento StorageClass Kubernetes da utilizzare per il pool di nodi. Questa classe si applica ai dischi che archiviano i file system root dei nodi. Per visualizzare un elenco delle classi di storage disponibili, eseguire kubectl describe storageclasses . |
volumes :
|
[]object | Qualsiasi | Tutti | Volumi da utilizzare per i nodi. |
tkr :
|
object | Basato su TKC | Tutti | Nome del TKR da utilizzare per il pool di nodi. Ad esempio, v1.26.8---vmware.2-tkg.2 . |
tkrResolver |
string | Basato sulla classe | Tutti | Obbligatorio per i cluster basati sulla classe. Valore dell'annotazione run.tanzu.vmware.com/resolve-os-image della risorsa Cluster . |
nodeDrainTimeout |
metav1.Duration | Qualsiasi | Tutti | Timeout dello svuotamento del nodo. |
vsphere |
object | Qualsiasi | Tutti | Vedere [Proprietà di configurazione (solo vSphere)](#vsphere-properties). |
workerClass |
string | Basato sulla classe | Tutti | Obbligatorio per i cluster basati sulla classe. workerClass dell'elemento ClusterClass del cluster che si desidera venga utilizzato dal pool di nodi. |
Per informazioni sulle variabili di configurazione di VSPHERE_*
, vedere vSphere nelle Informazioni di riferimento sulle variabili del file di configurazione.
Nome | Tipo | Tipo di cluster di gestione | Note |
---|---|---|---|
cloneMode |
string | Autonomo | Uguale a VSPHERE_CLONE_MODE . |
datacenter |
string | Autonomo | Uguale a VSPHERE_DATACENTER . |
datastore |
string | Autonomo | Uguale a VSPHERE_DATASTORE . |
storagePolicyName |
string | Autonomo | Uguale a VSPHERE_STORAGE_POLICY_NAME . |
taints |
[]corev1.Taint | Supervisore | Taint da applicare al nodo. |
folder |
string | Autonomo | Uguale a VSPHERE_FOLDER . |
network |
string | Autonomo | Uguale a VSPHERE_NETWORK . |
nameservers |
[]string | Autonomo | Uguale a VSPHERE_WORKER_NAMESERVERS . |
tkgIPFamily |
string | Autonomo | Uguale a TKG_IP_FAMILY . |
resourcePool |
string | Autonomo | Uguale a VSPHERE_RESOURCE_POOL . |
vcIP |
string | Autonomo | Uguale a VSPHERE_SERVER . |
template |
string | Autonomo | Uguale a VSPHERE_TEMPLATE . |
memoryMiB |
integer | Autonomo | Uguale a VSPHERE_WORKER_MEM_MIB . |
diskGiB |
integer | Autonomo | Uguale a VSPHERE_WORKER_DISK_GIB . |
numCPUs |
integer | Autonomo | Uguale a VSPHERE_WORKER_NUM_CPUS . |
Per assegnare un carico di lavoro a un pool di nodi:
nodeSelector
sul valore di labels
definito nel file di configurazione del pool di nodi. Per informazioni sulle risorse del carico di lavoro Kubernetes, vedere Carichi di lavoro nella documentazione di Kubernetes.kubectl apply -f
.Per riassegnare un carico di lavoro a un pool di nodi diverso:
nodeSelector
al nuovo valore.kubectl apply -f
.Se è necessario modificare solo il numero di nodi di un pool di nodi, utilizzare il comando della CLI di Tanzu indicato in Modifica del solo numero di nodi. Se si desidera aggiungere le etichette, eseguire la procedura descritta in Aggiunta di etichette e modifica del numero dei nodi.
Attenzionenon utilizzare queste procedure per modificare le etichette esistenti, la zona di disponibilità, il tipo di istanza del nodo (in AWS o Azure) o le proprietà della macchina virtuale (in vSphere) del pool di nodi. Queste modifiche possono infatti avere effetti negativi sui carichi di lavoro in esecuzione. Per modificare queste proprietà, creare un nuovo pool di nodi con le proprietà e riassegnare i carichi di lavoro nel nuovo pool di nodi prima di eliminare l'originale. Per istruzioni, vedere Assegnazione dei carichi di lavoro a un pool di nodi sopra.
Per modificare il numero di nodi in un pool di nodi, eseguire:
tanzu cluster scale CLUSTER-NAME -p NODE-POOL-NAME -w NODE-COUNT
In cui:
CLUSTER-NAME
è il nome del cluster del carico di lavoro.NODE-POOL-NAME
è il nome del pool di nodi.NODE-COUNT
è il numero di nodi che appartengono al pool di nodi, espresso con un valore integer.È possibile aggiungere etichette in un pool di nodi e modificarne contemporaneamente il numero di nodi tramite il file di configurazione del pool di nodi.
Aprire il file di configurazione per il pool di nodi che si desidera aggiornare.
Se si aumenta o si diminuisce il numero di nodi in questo pool di nodi, aggiornare il numero dopo replicas
.
Se si aggiungono etichette, inserirle con rientro sotto labels
. Ad esempio:
labels:
key1: value1
key2: value2
Salvare il file di configurazione del pool di nodi.
In un terminale, eseguire:
tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
Se CLUSTER-NAME
nel comando e name
nel file di configurazione corrispondono a un pool di nodi nel cluster, questo comando aggiorna il pool di nodi esistente anziché crearne uno nuovo.
Per eliminare un pool di nodi, eseguire:
tanzu cluster node-pool delete CLUSTER-NAME -n NODE-POOL-NAME
In cui CLUSTER-NAME
è il nome del cluster del carico di lavoro e NODE-POOL-NAME
è il nome del pool di nodi.
Facoltativamente, utilizzare --namespace
per specificare lo spazio dei nomi del cluster. Il valore predefinito è default
.
AttenzionePrima di eseguire questa operazione, riassegnare tutti i carichi di lavoro di questi nodi in altri nodi.
tanzu cluster node-pool delete
non esegue la migrazione dei carichi di lavoro dei nodi prima di eliminarli. Per istruzioni, vedere Assegnazione dei carichi di lavoro a un pool di nodi sopra.
Per impostazione predefinita, i cluster del carico di lavoro in vSphere vengono distribuiti in base a regole di anti-affinità che distribuiscono i nodi del piano di controllo e i nodi worker in ogni pool di nodi in più host ESXi. Per disattivare o riattivare le regole di anti-affinità durante la creazione del cluster, eseguire le operazioni seguenti:
Impostare il contesto di kubectl
sul cluster di gestione:
kubectl config use-context MGMT-CLUSTER-NAME-admin@MGMT-CLUSTER-NAME
In cui MGMT-CLUSTER-NAME
è il nome del cluster.
Eseguire kubectl get deployment
nel controller CAPV per raccogliere i valori args
per il container manager
, ad esempio:
kubectl get deployment -n capv-system capv-controller-manager -o=json | jq '.spec.template.spec.containers[] | select(.name=="manager") | .args'
[
"--leader-elect",
"--logtostderr",
"--v=4",
"--feature-gates=NodeAntiAffinity=true,NodeLabeling=true"
]
Con l'output copiato dal passaggio precedente, modificare i valori --feature-gates
e passare l'elenco degli argomenti a un comando kubectl patch
che modifica i valori nell'oggetto. Ad esempio, per impostare i gate delle funzionalità NodeAntiAffinity
e NodeLabeling
su false
disattivando le regole di anti-affinità del nodo:
kubectl patch deployment -n capv-system capv-controller-manager --type=json -p '[{"op":"replace", "path":"/spec/template/spec/containers/0/args", "value": [
"--leader-elect",
"--logtostderr",
"--v=4",
"--feature-gates=NodeAntiAffinity=false,NodeLabeling=false"
]}]'