Configura la afinidad de VM-Host Group

En este documento, se muestra un ejemplo de cómo configurar un clúster de Google Distributed Cloud para que use la afinidad de host de VM.

La afinidad del grupo de host de VM es uno de los mecanismos que proporciona Google Distributed Cloud para garantizar la alta disponibilidad. Con la afinidad de grupos de VM-host, creas grupos de hosts ESXi físicos. Luego, configura tu clúster para asociar los grupos de VMs con los grupos de hosts.

Por ejemplo, puedes configurar todas las VMs de un grupo de nodos para que se ejecuten en un grupo de hosts particular. También puedes configurar todas las VMs de un segundo grupo de nodos para que se ejecuten en un grupo de host diferente. Luego, puedes tratar cada grupo de nodos como un dominio con fallas. Para diferenciar los dominios de fallas, puedes agregar etiquetas a las VMs de los diferentes grupos de nodos.

En los clústeres avanzados, la afinidad de grupos de hosts de VM es compatible con la versión 1.32.200 y la versión 1.33 y posteriores. Si tu clúster usa dominios de topología, configura grupos de hosts en el campo topologyDomains[i].compute.hostGroups del archivo de configuración de la infraestructura de vSphere en lugar del campo nodePools[i].vsphere.hostgroups en el archivo de configuración del clúster de usuario.

Antes de comenzar

Para este ejercicio, debes tener al menos seis hosts ESXi en tu entorno de vSphere.

Cómo crear grupos de hosts

Crea dos o más grupos de DRS de host en tu entorno de vSphere. Para este ejercicio, lo más adecuado sería usar dos grupos de hosts con tres hosts cada uno. Para obtener instrucciones, consulta Cómo crear un grupo de DRS de host.

Crea un clúster de usuario

En esta sección, se muestra un ejemplo de cómo crear un clúster de usuarios que usa la afinidad del grupo de hosts de VM. El clúster de este ejemplo usa Controlplane V2. El clúster tiene un plano de control de alta disponibilidad, por lo que hay tres nodos de plano de control. Además de los nodos del plano de control, hay seis nodos trabajadores: tres en un grupo de nodos y tres en un segundo grupo de nodos. Todos los nodos usan direcciones IP estáticas.

Comienza por seguir las instrucciones en Crea un clúster de usuario (o Crea un clúster de usuario para usar con dominios de topología si tu clúster usa dominios de topología).

Cuando completes los archivos de configuración, haz lo siguiente:

  • Sin dominios de topología: En el archivo de configuración del clúster de usuario, especifica dos grupos de nodos para los nodos trabajadores. Para cada grupo de nodos, establece replicas en 3 y proporciona el nombre de un grupo de host existente en nodePools[i].vsphere.hostgroups.
  • Con dominios de topología: En el archivo de configuración de la infraestructura de vSphere, especifica dos dominios de topología y proporciona el nombre de un grupo de hosts existente en topologyDomains[i].compute.hostGroups para cada dominio. En el archivo de configuración del clúster de usuario, especifica dos grupos de nodos para los nodos trabajadores, configura replicas como 3 y configura nodePools[i].topologyDomains para asociar cada grupo de nodos con un dominio de topología.

Archivo de configuración de ejemplo

En los siguientes ejemplos, se muestra cómo configurar la afinidad de grupo de hosts de VM sin dominios de topología y con dominios de topología.

Sin dominios de topología

Este es un ejemplo de un archivo de bloque de IP y una parte de un archivo de configuración de clúster de usuario para un clúster que no usa dominios de topología.

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"
...

Estos son los puntos importantes que debes comprender en el ejemplo anterior:

  • Las direcciones IP estáticas de los nodos trabajadores se especifican en un archivo de bloque de IP. El archivo de bloque de IP tiene siete direcciones, aunque solo hay seis nodos de trabajo. La dirección IP adicional es necesaria durante las actualizaciones y la reparación automática del clúster.

  • Las direcciones IP estáticas de los tres nodos del plano de control se especifican en la sección network.controlPlaneIPBlock del archivo de configuración del clúster de usuarios. No es necesario tener una dirección IP adicional en este bloque.

  • El campo masterNode.replicas está configurado como 3, por lo que habrá tres nodos de plano de control.

  • Un controlador de clúster creará un grupo de DRS de VM que tenga los tres nodos del grupo de nodos worker-pool-1. Un controlador también creará una regla de afinidad de VM a host que garantice que los nodos de worker-pool-1 se ejecuten en hosts que se encuentren en hostgroup-1. Los nodos de worker-pool-1 tienen la etiqueta failuredomain: "failuredomain-1".

  • Un controlador de clúster creará un grupo de DRS de VM que tenga los tres nodos del grupo de nodos worker-pool-2. Un controlador también creará una regla de afinidad de VM a host que garantice que los nodos en worker-pool-2 se ejecuten en hosts que se encuentran en hostgroup-2. Los nodos de worker-pool-2 tienen la etiqueta failuredomain: "failuredomain-2".

Continúa creando tu clúster de usuario, como se describe en Crea un clúster de usuario.

Con dominios de topología

Este es un ejemplo de una parte de un archivo de configuración de infraestructura de vSphere y un archivo de configuración de clúster de usuario para un clúster avanzado que usa dominios de topología.

vsphere-infra-config.yaml

Cada dominio de topología en el archivo de configuración de la infraestructura de vSphere especifica un grupo de hosts en topologyDomains[i].compute.hostGroups y una etiqueta de dominio de falla en 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

En el siguiente ejemplo de un archivo de configuración de clúster de usuario, se quita la sección nodePools[i].vsphere y cada grupo de nodos hace referencia a su dominio de topología en nodePools[i].topologyDomains.

Un controlador de clúster crea un grupo de DRS de VM y una regla de afinidad de host de VM para worker-pool-1 (en topology-domain-1) de modo que sus nodos se ejecuten en hosts en hostgroup-1 y reciban la etiqueta topology.kubernetes.io/zone: "zone-1". Del mismo modo, un controlador de clúster crea un grupo de DRS de VM y una regla de afinidad de VM a host para worker-pool-2 (en topology-domain-2) de modo que sus nodos se ejecuten en hosts en hostgroup-2 y reciban la etiqueta 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"
...

Continúa para crear un clúster de usuario para usar con dominios de topología.