Questo documento fornisce un esempio di come configurare un cluster Google Distributed Cloud per utilizzare l'affinità host VM.
L'affinità del gruppo di host VM è uno dei meccanismi forniti da Google Distributed Cloud per garantire l'alta affidabilità. Con l'affinità del gruppo di host VM, crei gruppi di host ESXi fisici. Poi configuri il cluster in modo da associare i gruppi di VM ai gruppi di host.
Ad esempio, puoi configurare tutte le VM in un pool di nodi per l'esecuzione su un particolare gruppo di host. e puoi configurare tutte le VM in un secondo pool di nodi per l'esecuzione su un gruppo di host diverso. A questo punto, puoi trattare ogni pool di nodi come un dominio in errore. Per distinguere i domini di errore, puoi aggiungere etichette alle VM nei vari pool di nodi.
Nei cluster avanzati,
l'affinità del gruppo di host VM è supportata nella versione 1.32.200 e
nella versione 1.33 e successive. Se il tuo cluster utilizza
domini di topologia,
configura i gruppi di host nel campo
topologyDomains[i].compute.hostGroups
del file di configurazione dell'infrastruttura vSphere anziché nel campo
nodePools[i].vsphere.hostgroups del file di configurazione del cluster utente.
Prima di iniziare
Per questo esercizio, devi avere almeno sei host ESXi nel tuo ambiente vSphere.
Creare gruppi di host
Crea due o più gruppi DRS host nel tuo ambiente vSphere. Per questo esercizio, sono appropriati due gruppi di host con tre host ciascuno. Per istruzioni, vedi Crea un gruppo DRS host.
Creazione di un cluster utente
Questa sezione fornisce un esempio di come creare un cluster utente che utilizza l'affinità del gruppo di host VM. Il cluster in questo esempio utilizza Controlplane V2. Il cluster ha un control plane ad alta disponibilità, quindi ci sono tre nodi del control plane. Oltre ai nodi del control plane, ci sono sei nodi worker: tre in unpool di nodil e tre in un secondopool di nodil. Tutti i nodi utilizzano indirizzi IP statici.
Inizia seguendo le istruzioni riportate in Creare un cluster utente (o Creare un cluster utente da utilizzare con i domini di topologia se il cluster utilizza domini di topologia).
Durante la compilazione dei file di configurazione:
- Senza domini di topologia: nel file di configurazione del cluster utente, specifica
due pool di nodi per i nodi worker. Per ogni pool di nodi, imposta
replicassu3e fornisci il nome di un gruppo di host esistente innodePools[i].vsphere.hostgroups. - Con domini di topologia: nel file di configurazione dell'infrastruttura vSphere,
specifica due domini di topologia e fornisci il nome di un gruppo di host esistente in
topologyDomains[i].compute.hostGroupsper ogni dominio. Nel file di configurazione del cluster utente, specifica due pool di nodi per i nodi worker, impostareplicassu3e impostanodePools[i].topologyDomainsper associare ogni pool di nodi a un dominio di topologia.
File di configurazione di esempio
Gli esempi seguenti mostrano come configurare l'affinità di gruppo host VM senza domini di topologia e con domini di topologia.
Senza domini di topologia
Ecco un esempio di un file di blocco IP e di una parte di un file di configurazione del cluster utente per un cluster che non utilizza domini di topologia.
user-ipblock.yaml
blocks:
- netmask: 255.255.255.0
gateway: 172.16.21.1
ips:
- ip: 172.16.21.2
- ip: 172.16.21.3
- ip: 172.16.21.4
- ip: 172.16.21.5
- ip: 172.16.21.6
- ip: 172.16.21.7
- ip: 172.16.21.8
user-cluster-yaml
apiVersion: v1
kind: UserCluster
...
network:
hostConfig:
dnsServers:
- "203.0.113.2"
- "198.51.100.2"
ntpServers:
- "216.239.35.4"
ipMode:
type: "static"
ipBlockFilePath: "user-ipblock.yaml"
controlPlaneIPBlock:
netmask: "255.255.255.0"
gateway: "172.16.21.1"
ips:
- ip: "172.16.21.9"
hostname: "cp-vm-1"
- ip: "172.16.21.10"
hostname: "cp-vm-2"
- ip: "172.16.21.11"
hostname: "cp-vm-3"
loadBalancer:
vips:
controlPlaneVIP: "172.16.21.40"
ingressVIP: "172.16.21.30"
kind: MetalLB
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "172.16.21.30-172.16.21.39"
...
enableAdvancedCluster: true
enableControlplaneV2: true
masterNode:
cpus: 4
memoryMB: 8192
replicas: 3
nodePools:
- name: "worker-pool-1"
enableLoadBalancer: true
replicas: 3
vsphere:
hostgroups:
- "hostgroup-1"
labels:
failuredomain: "failuredomain-1"
- name: "worker-pool-2"
replicas: 3
vsphere:
hostgroups:
- "hostgroup-2"
labels:
failuredomain: "failuredomain-2"
...
Questi sono i punti importanti da comprendere nell'esempio precedente:
Gli indirizzi IP statici per i nodi worker sono specificati in un file di blocco IP. Il file di blocco IP contiene sette indirizzi anche se ci sono solo sei nodi di lavoro. L'indirizzo IP aggiuntivo è necessario durante l'upgrade, l'aggiornamento e la riparazione automatica del cluster.
Gli indirizzi IP statici per i tre nodi del control plane sono specificati nella sezione
network.controlPlaneIPBlockdel file di configurazione del cluster utente. Non è necessario un indirizzo IP aggiuntivo in questo blocco.Il campo
masterNode.replicasè impostato su3, quindi ci saranno tre nodi del control plane.Un controller del cluster creerà un gruppo DRS VM con i tre nodi nel pool di nodil
worker-pool-1. Un controller creerà anche una regola di affinità host VM che garantisce che i nodi inworker-pool-1vengano eseguiti su host inhostgroup-1. I nodi inworker-pool-1hanno l'etichettafailuredomain: "failuredomain-1"Un controller del cluster creerà un gruppo DRS VM con i tre nodi nel pool di nodil
worker-pool-2. Un controller creerà anche una regola di affinità host VM che garantisce che i nodi inworker-pool-2vengano eseguiti su host inhostgroup-2. I nodi inworker-pool-2hanno l'etichettafailuredomain: "failuredomain-2"
Continua a creare il cluster utente come descritto in Creare un cluster utente.
Con i domini di topologia
Di seguito è riportato un esempio di una parte di un file di configurazione dell'infrastruttura vSphere e di un file di configurazione del cluster utente per un cluster avanzato che utilizza domini di topologia.
vsphere-infra-config.yaml
Ogni dominio della topologia nel file di configurazione dell'infrastruttura vSphere
specifica un gruppo di host in topologyDomains[i].compute.hostGroups e un'etichetta
del dominio di errore in topologyDomains[i].topologyLabels.
apiVersion: vmware.cluster.gke.io/v1alpha1
kind: VSphereInfraConfig
metadata:
name: default
...
topologyDomains:
- name: "topology-domain-1"
topologyLabels:
"topology.kubernetes.io/zone": "zone-1"
compute:
vcenter: "vc01.example"
datacenter: "dc-1"
cluster: "cls-1"
resourcePool: "rp-1"
hostGroups:
- "hostgroup-1"
storage:
datastore: "vsanDatastore"
network:
vsphereNetwork: "vm-network-1"
gateway: "172.16.21.1"
dnsServers:
- "203.0.113.2"
- "198.51.100.2"
ntpServers:
- "216.239.35.4"
- name: "topology-domain-2"
topologyLabels:
"topology.kubernetes.io/zone": "zone-2"
compute:
vcenter: "vc01.example"
datacenter: "dc-1"
cluster: "cls-1"
resourcePool: "rp-1"
hostGroups:
- "hostgroup-2"
storage:
datastore: "vsanDatastore"
network:
vsphereNetwork: "vm-network-1"
gateway: "172.16.21.1"
dnsServers:
- "203.0.113.2"
- "198.51.100.2"
ntpServers:
- "216.239.35.4"
user-cluster.yaml
Nell'esempio seguente di un file di configurazione del cluster utente, la sezione nodePools[i].vsphere viene rimossa e ogni pool di nodi fa riferimento al proprio dominio di topologia in nodePools[i].topologyDomains.
Un controller del cluster crea un gruppo DRS VM e una regola di affinità host VM per
worker-pool-1 (in topology-domain-1) in modo che i relativi nodi vengano eseguiti su host in
hostgroup-1 e ricevano l'etichetta topology.kubernetes.io/zone: "zone-1".
Allo stesso modo, un controller del cluster crea un gruppo DRS VM e una regola di affinità host VM
per worker-pool-2 (in topology-domain-2) in modo che i relativi nodi vengano eseguiti su
host in hostgroup-2 e ricevano l'etichetta topology.kubernetes.io/zone: "zone-2".
apiVersion: v1 kind: UserCluster ... enableAdvancedCluster: true enableControlplaneV2: true masterNode: cpus: 4 memoryMB: 8192 replicas: 3 topologyDomains: - "topology-domain-1" nodePools: - name: "worker-pool-1" replicas: 3 osImageType: "ubuntu_cgv2" topologyDomains: - "topology-domain-1" - name: "worker-pool-2" replicas: 3 osImageType: "ubuntu_cgv2" topologyDomains: - "topology-domain-2" ...
Continua a creare un cluster utente da utilizzare con i domini di topologia.