Ce document fournit un exemple de configuration d'un cluster Google Distributed Cloud pour utiliser l'affinité hôte de VM.
L'affinité de groupe d'hôtes de VM est l'un des mécanismes fournis par Google Distributed Cloud pour assurer la haute disponibilité. L'affinité de groupe d'hôtes de VM vous permet de créer des groupes d'hôtes ESXi physiques. Vous configurez ensuite votre cluster pour associer des groupes de VM à des groupes d'hôtes.
Par exemple, vous pouvez configurer toutes les VM d'un pool de nœuds pour qu'elles s'exécutent sur un groupe d'hôtes particulier. Vous pouvez également configurer toutes les VM d'un deuxième pool de nœuds pour qu'elles s'exécutent sur un autre groupe d'hôtes. Vous pouvez ensuite traiter chaque pool de nœuds comme un domaine de défaillance. Pour différencier les domaines de défaillance, vous pouvez ajouter des étiquettes aux VM des différents pools de nœuds.
Sur les clusters avancés, l'affinité de groupe d'hôtes de VM est compatible avec la version 1.32.200 et la version 1.33 et ultérieures. Si votre cluster utilise des domaines de topologie, configurez les groupes d'hôtes dans le champ topologyDomains[i].compute.hostGroups du fichier de configuration de l'infrastructure vSphere au lieu du champ nodePools[i].vsphere.hostgroups du fichier de configuration du cluster d'utilisateur.
Avant de commencer
Pour cet exercice, vous devez disposer d'au moins six hôtes ESXi dans votre environnement vSphere.
Créer des groupes d'hôtes
Créez au moins deux groupes DRS d'hôtes dans votre environnement vSphere. Pour cet exercice, deux groupes d'hôtes comportant chacun trois hôtes seraient appropriés. Pour obtenir des instructions, consultez Créer un groupe DRS d'hôtes.
Créer un cluster d'utilisateur
Cette section fournit un exemple de création d'un cluster d'utilisateur qui utilise l'affinité de groupe d'hôtes de VM. Le cluster de cet exemple utilise Controlplane V2. Le cluster dispose d'un plan de contrôle à haute disponibilité, il y a donc trois nœuds de plan de contrôle. En plus des nœuds du plan de contrôle, il existe six nœuds de calcul : trois dans un pool de nœuds et trois dans un deuxième pool de nœuds. Tous les nœuds utilisent des adresses IP statiques.
Commencez par suivre les instructions de la section Créer un cluster d'utilisateur (ou Créer un cluster d'utilisateur à utiliser avec des domaines de topologie si votre cluster utilise des domaines de topologie).
Lorsque vous remplissez vos fichiers de configuration :
- Sans domaines de topologie : dans le fichier de configuration de votre cluster d'utilisateur, spécifiez deux pools de nœuds pour les nœuds de calcul. Pour chaque pool de nœuds, définissez
replicassur3et indiquez le nom d'un groupe d'hôtes existant dansnodePools[i].vsphere.hostgroups. - Avec des domaines de topologie : dans votre fichier de configuration de l'infrastructure vSphere, spécifiez deux domaines de topologie et indiquez le nom d'un groupe d'hôtes existant dans
topologyDomains[i].compute.hostGroupspour chaque domaine. Dans le fichier de configuration de votre cluster d'utilisateur, spécifiez deux pools de nœuds pour les nœuds de calcul, définissezreplicassur3et définisseznodePools[i].topologyDomainspour associer chaque pool de nœuds à un domaine de topologie.
Exemple de fichier de configuration
Les exemples suivants montrent comment configurer l'affinité de groupe d'hôtes de VM sans domaines de topologie et avec des domaines de topologie.
Sans domaines de topologie
Voici un exemple de fichier de bloc d'adresses IP et d'une partie d'un fichier de configuration de cluster d'utilisateur pour un cluster qui n'utilise pas de domaines de topologie.
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"
...
Voici les points importants à comprendre dans l'exemple précédent :
Les adresses IP statiques des nœuds de calcul sont spécifiées dans un fichier de bloc d'adresses IP. Le fichier de blocs d'adresses IP comporte sept adresses, même s'il n'y a que six nœuds de calcul. L'adresse IP supplémentaire est nécessaire lors de la mise à niveau, de la mise à jour et de la réparation automatique du cluster.
Les adresses IP statiques des trois nœuds de plan de contrôle sont spécifiées dans la section
network.controlPlaneIPBlockdu fichier de configuration du cluster d'utilisateur. Aucune adresse IP supplémentaire n'est nécessaire dans ce bloc.Le champ
masterNode.replicasest défini sur3. Il y aura donc trois nœuds de plan de contrôle.Un contrôleur de cluster crée un groupe DRS de VM qui comporte les trois nœuds du pool de nœuds
worker-pool-1. Un contrôleur créera également une règle d'affinité d'hôte de VM qui garantit que les nœuds deworker-pool-1s'exécuteront sur des hôtes dehostgroup-1. Les nœuds deworker-pool-1ont le libelléfailuredomain: "failuredomain-1".Un contrôleur de cluster crée un groupe DRS de VM qui comporte les trois nœuds du pool de nœuds
worker-pool-2. Un contrôleur créera également une règle d'affinité d'hôte de VM qui garantit que les nœuds deworker-pool-2s'exécutent sur des hôtes dehostgroup-2. Les nœuds deworker-pool-2ont le libelléfailuredomain: "failuredomain-2".
Continuez à créer votre cluster d'utilisateur comme décrit dans Créer un cluster d'utilisateur.
Avec des domaines de topologie
Voici un exemple de partie d'un fichier de configuration de l'infrastructure vSphere et d'un fichier de configuration de cluster d'utilisateur pour un cluster avancé qui utilise des domaines de topologie.
vsphere-infra-config.yaml
Chaque domaine de topologie du fichier de configuration de l'infrastructure vSphere spécifie un groupe d'hôtes dans topologyDomains[i].compute.hostGroups et un libellé de domaine de défaillance dans 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
Dans l'exemple suivant de fichier de configuration de cluster d'utilisateur, la section nodePools[i].vsphere est supprimée et chaque pool de nœuds fait référence à son domaine de topologie dans nodePools[i].topologyDomains.
Un contrôleur de cluster crée un groupe DRS de VM et une règle d'affinité hôte de VM pour worker-pool-1 (dans topology-domain-1) afin que ses nœuds s'exécutent sur des hôtes dans hostgroup-1 et reçoivent le libellé topology.kubernetes.io/zone: "zone-1".
De même, un contrôleur de cluster crée un groupe DRS de VM et une règle d'affinité hôte de VM pour worker-pool-2 (dans topology-domain-2) afin que ses nœuds s'exécutent sur des hôtes dans hostgroup-2 et reçoivent le libellé 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" ...
Passez à la section Créer un cluster d'utilisateur à utiliser avec les domaines de topologie.