Configura l'affinità del gruppo di host VM

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 replicas su 3 e fornisci il nome di un gruppo di host esistente in nodePools[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.hostGroups per ogni dominio. Nel file di configurazione del cluster utente, specifica due pool di nodi per i nodi worker, imposta replicas su 3 e imposta nodePools[i].topologyDomains per 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.controlPlaneIPBlock del file di configurazione del cluster utente. Non è necessario un indirizzo IP aggiuntivo in questo blocco.

  • Il campo masterNode.replicas è impostato su 3, 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 in worker-pool-1 vengano eseguiti su host in hostgroup-1. I nodi in worker-pool-1 hanno l'etichetta failuredomain: "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 in worker-pool-2 vengano eseguiti su host in hostgroup-2. I nodi in worker-pool-2 hanno l'etichetta failuredomain: "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.