Neste documento, mostramos um exemplo de como configurar um cluster do Google Distributed Cloud para usar a afinidade de host da VM.
A afinidade de grupo do host da VM é um dos mecanismos que o Google Distributed Cloud oferece para garantir alta disponibilidade. Com a afinidade de grupo do host de VM, você cria grupos de hosts físicos ESXi. Em seguida, configure o cluster para associar grupos de VMs a grupos de hosts.
Por exemplo, é possível configurar todas as VMs em um pool de nós para serem executadas em um determinado grupo de hosts. Também é possível configurar todas as VMs em um segundo pool de nós para serem executadas em um grupo de hosts diferente. Em seguida, trate cada pool de nós como um domínio de falha. Para diferenciar os domínios de falha, adicione rótulos às VMs nos vários pools de nós.
Em clusters avançados,
a afinidade de grupo de hosts de VM é compatível com a versão 1.32.200 e
a versão 1.33 e mais recentes. Se o cluster usar
domínios de topologia,
configure grupos de hosts no campo
topologyDomains[i].compute.hostGroups
do arquivo de configuração da infraestrutura do vSphere em vez do campo
nodePools[i].vsphere.hostgroups no arquivo de configuração do cluster de usuário.
Antes de começar
Para este exercício, você precisa ter pelo menos seis hosts ESXi no ambiente do vSphere.
Criar grupos de host
Crie dois ou mais grupos de DRS de host no seu ambiente do vSphere. Para este exercício, dois grupos de hosts com três hosts cada seriam apropriados. Para mais instruções, consulte Criar um grupo de DRS do host.
Criar um cluster de usuário
Nesta seção, você verá um exemplo de como criar um cluster de usuário que usa a afinidade de grupo do host da VM. O cluster neste exemplo usa o Controlplane V2. O cluster tem um plano de controle de alta disponibilidade, portanto, há três nós do plano de controle. Além dos nós do plano de controle, há seis nós de trabalho: três em um pool de nós e três em um segundo pool de nós. Todos os nós usam endereços IP estáticos.
Comece seguindo as instruções em Criar um cluster de usuário (ou Criar um cluster de usuário para uso com domínios de topologia se o cluster usar domínios de topologia).
Ao preencher os arquivos de configuração:
- Sem domínios de topologia: no arquivo de configuração do cluster de usuário, especifique
dois pools de nós para nós de trabalho. Para cada pool de nós, defina
replicascomo3e forneça o nome de um grupo de hosts emnodePools[i].vsphere.hostgroups. - Com domínios de topologia: no arquivo de configuração da infraestrutura do vSphere, especifique dois domínios de topologia e forneça o nome de um grupo de hosts existente em
topologyDomains[i].compute.hostGroupspara cada domínio. No arquivo de configuração do cluster de usuário, especifique dois pools de nós para nós de trabalho, definareplicascomo3e definanodePools[i].topologyDomainspara associar cada pool de nós a um domínio de topologia.
Exemplo: arquivo de configuração
Os exemplos a seguir mostram como configurar a afinidade de grupo de host de VM sem domínios de topologia e com domínios de topologia.
Sem domínios de topologia
Confira um exemplo de um arquivo de bloco de IP e uma parte de um arquivo de configuração de cluster de usuário para um cluster que não usa domínios de topologia.
usuario-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"
...
Estes são os pontos importantes que você precisa entender no exemplo anterior:
Os endereços IP estáticos dos nós de trabalho são especificados em um arquivo de bloco de IP. O arquivo de bloco de IP tem sete endereços, mesmo que haja apenas seis nós de trabalho. O endereço IP extra é necessário durante o upgrade, a atualização e o reparo automático do cluster.
Os endereços IP estáticos dos três nós do plano de controle são especificados na seção
network.controlPlaneIPBlockdo arquivo de configuração do cluster de usuário. Não é necessário ter um endereço IP extra neste bloco.O campo
masterNode.replicasestá definido como3, então haverá três nós do plano de controle.Um controlador de cluster criará um grupo de DRS de VM que tem os três nós no pool de nós
worker-pool-1. Um controlador também criará uma regra de afinidade de host de VM que garante que os nós emworker-pool-1sejam executados em hosts que estão emhostgroup-1. Os nós emworker-pool-1têm o rótulofailuredomain: "failuredomain-1"Um controlador de cluster criará um grupo de DRS de VM que tem os três nós no pool de nós
worker-pool-2. Um controlador também criará uma regra de afinidade de host de VM que garante que os nós emworker-pool-2sejam executados em hosts emhostgroup-2. Os nós emworker-pool-2têm o rótulofailuredomain: "failuredomain-2"
Continue a criação do cluster de usuário conforme descrito em Criar um cluster de usuário.
Com domínios de topologia
Confira um exemplo de uma parte de um arquivo de configuração de infraestrutura do vSphere e um arquivo de configuração de cluster de usuário para um cluster avançado que usa domínios de topologia.
vsphere-infra-config.yaml
Cada domínio de topologia no arquivo de configuração da infraestrutura do vSphere especifica um grupo de hosts em topologyDomains[i].compute.hostGroups e um rótulo de domínio de falha em 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
No exemplo a seguir de um arquivo de configuração do cluster de usuário, a seção
nodePools[i].vsphere é removida, e cada pool de nós faz referência ao domínio de
topologia em nodePools[i].topologyDomains.
Um controlador de cluster cria um grupo de DRS de VM e uma regra de afinidade de host de VM para
worker-pool-1 (em topology-domain-1) para que os nós sejam executados em hosts em
hostgroup-1 e recebam o rótulo topology.kubernetes.io/zone: "zone-1".
Da mesma forma, um controlador de cluster cria um grupo de DRS de VM e uma regra de afinidade de host de VM para worker-pool-2 (em topology-domain-2) para que os nós sejam executados em hosts em hostgroup-2 e recebam o rótulo 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" ...
Continue para criar um cluster de usuário para uso com domínios de topologia.