VM-Host-Gruppenaffinität konfigurieren

In diesem Dokument wird anhand eines Beispiels gezeigt, wie Sie einen Google Distributed Cloud-Cluster für die Verwendung von VM-Host-Affinität konfigurieren.

Die VM-Hostgruppenaffinität ist einer der Mechanismen, die Google Distributed Cloud zur Verfügung stellt, um für Hochverfügbarkeit zu sorgen. Mit der VM-Hostgruppenaffinität erstellen Sie Gruppen von physischen ESXi-Hosts. Anschließend konfigurieren Sie Ihren Cluster so, dass VM-Gruppen Hostgruppen zugeordnet werden.

Sie können beispielsweise alle VMs in einem Knotenpool so konfigurieren, dass sie in einer bestimmten Hostgruppe ausgeführt werden. Außerdem können Sie alle VMs in einem zweiten Knotenpool so konfigurieren, dass sie in einer anderen Hostgruppe ausgeführt werden. Sie können dann jeden Knotenpool als Fehlerbereich behandeln. Um die Fehlerdomains zu unterscheiden, können Sie den VMs in den verschiedenen Knotenpools Labels hinzufügen.

Bei erweiterten Clustern wird die VM-Hostgruppenaffinität in Version 1.32.200 und Version 1.33 und höher unterstützt. Wenn Ihr Cluster Topologiedomänen verwendet, konfigurieren Sie Hostgruppen im Feld topologyDomains[i].compute.hostGroups der Konfigurationsdatei der vSphere-Infrastruktur anstelle des Felds nodePools[i].vsphere.hostgroups in der Konfigurationsdatei des Nutzerclusters.

Hinweis

Für diese Übung benötigen Sie mindestens sechs ESXi-Hosts in Ihrer vSphere-Umgebung.

Hostgruppen erstellen

Erstellen Sie in Ihrer vSphere-Umgebung mindestens zwei Host-DRS-Gruppen. Für diese Übung sind zwei Hostgruppen mit jeweils drei Hosts geeignet. Eine Anleitung finden Sie unter Host-DRS-Gruppe erstellen.

Nutzercluster erstellen

In diesem Abschnitt wird ein Beispiel für das Erstellen eines Nutzerclusters mit VM-Host-Gruppenaffinität gegeben. Der Cluster in diesem Beispiel verwendet Controlplane V2. Der Cluster hat eine Steuerungsebene mit Hochverfügbarkeit, sodass es drei Knoten auf Steuerungsebene gibt. Zusätzlich zu den Knoten der Steuerungsebene gibt es sechs Worker-Knoten: drei in einem Knotenpool und drei in einem zweiten Knotenpool. Alle Knoten verwenden statische IP-Adressen.

Folgen Sie zuerst der Anleitung unter Nutzercluster erstellen (oder Nutzercluster zur Verwendung mit Topologiedomänen erstellen, wenn Ihr Cluster Topologiedomänen verwendet).

Beachten Sie beim Ausfüllen Ihrer Konfigurationsdateien Folgendes:

  • Ohne Topologiedomänen: Geben Sie in der Konfigurationsdatei des Nutzerclusters zwei Knotenpools für Worker-Knoten an. Legen Sie für jeden Knotenpool replicas auf 3 fest und geben Sie den Namen einer vorhandenen Hostgruppe in nodePools[i].vsphere.hostgroups an.
  • Mit Topologiedomänen: Geben Sie in der Konfigurationsdatei für Ihre vSphere-Infrastruktur zwei Topologiedomänen an und geben Sie für jede Domäne den Namen einer vorhandenen Hostgruppe in topologyDomains[i].compute.hostGroups an. Geben Sie in der Konfigurationsdatei des Nutzerclusters zwei Knotenpools für Worker-Knoten an, legen Sie replicas auf 3 fest und legen Sie nodePools[i].topologyDomains fest, um jeden Knotenpool einer Topologiedomäne zuzuordnen.

Beispiel: Konfigurationsdatei

Die folgenden Beispiele zeigen, wie Sie die Affinität von VM-Hosts ohne und mit Topologiedomänen konfigurieren.

Ohne Topologiedomains

Hier sehen Sie ein Beispiel für eine IP-Blockdatei und einen Teil einer Konfigurationsdatei für einen Nutzercluster für einen Cluster, der keine Topologiedomänen verwendet.

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

Im obigen Beispiel sind dies die wichtigsten Punkte:

  • Die statischen IP-Adressen für die Worker-Knoten werden in einer IP-Blockdatei angegeben. Die IP-Blockdatei enthält sieben Adressen, obwohl es nur sechs Worker-Knoten gibt. Die zusätzliche IP-Adresse wird während des Clusterupgrades, des Updates und der automatischen Reparatur benötigt.

  • Die statischen IP-Adressen für die drei Knoten der Steuerungsebene werden im Abschnitt network.controlPlaneIPBlock der Konfigurationsdatei des Nutzerclusters angegeben. Für diesen Block ist keine zusätzliche IP-Adresse erforderlich.

  • Das Feld masterNode.replicas ist auf 3 gesetzt. Es gibt also drei Steuerungsebenenknoten.

  • Ein Cluster-Controller erstellt eine VM-DRS-Gruppe mit den drei Knoten im Knotenpool worker-pool-1. Ein Controller erstellt auch eine VM-Host-Affinitätsregel, die dafür sorgt, dass Knoten in worker-pool-1 auf Hosts in hostgroup-1 ausgeführt werden. Die Knoten in worker-pool-1 haben das Label failuredomain: "failuredomain-1".

  • Ein Cluster-Controller erstellt eine VM-DRS-Gruppe mit den drei Knoten im Knotenpool worker-pool-2. Ein Controller erstellt auch eine VM-Host-Affinitätsregel, die dafür sorgt, dass Knoten in worker-pool-2 auf Hosts in hostgroup-2 ausgeführt werden. Die Knoten in worker-pool-2 haben das Label failuredomain: "failuredomain-2".

Fahren Sie mit dem Erstellen des Nutzerclusters fort, wie unter Nutzercluster erstellen beschrieben.

Mit Topologiedomains

Hier sehen Sie ein Beispiel für einen Teil einer Konfigurationsdatei für die vSphere-Infrastruktur und einer Konfigurationsdatei für einen Nutzercluster für einen erweiterten Cluster, der Topologiedomänen verwendet.

vsphere-infra-config.yaml

Jede Topologiedomäne in der Konfigurationsdatei für die vSphere-Infrastruktur gibt eine Hostgruppe in topologyDomains[i].compute.hostGroups und ein Label für die Fehlerdomäne in topologyDomains[i].topologyLabels an.

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

Im folgenden Beispiel für eine Konfigurationsdatei für einen Nutzercluster wird der Abschnitt nodePools[i].vsphere entfernt und jeder Knotenpool verweist in nodePools[i].topologyDomains auf seine Topologiedomäne.

Ein Clustercontroller erstellt eine VM-DRS-Gruppe und eine VM-Host-Affinitätsregel für worker-pool-1 (in topology-domain-1), sodass die Knoten auf Hosts in hostgroup-1 ausgeführt werden und das Label topology.kubernetes.io/zone: "zone-1" erhalten. Ebenso erstellt ein Cluster-Controller eine VM-DRS-Gruppe und eine VM-Host-Affinitätsregel für worker-pool-2 (in topology-domain-2), sodass die Knoten auf Hosts in hostgroup-2 ausgeführt werden und das Label topology.kubernetes.io/zone: "zone-2" erhalten.

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

Fahren Sie mit dem Erstellen eines Nutzerclusters zur Verwendung mit Topologiedomänen fort.