In diesem Thema wird die Konfiguration von MachineHealthCheck für TKG-Dienst-Cluster beschrieben, die mithilfe der v1beta1-API bereitgestellt werden.

MachineHealthCheck für v1beta1-Cluster

Bei MachineHealthCheck handelt es sich um die API-Ressource eines Kubernetes-Clusters, die Bedingungen für die Standardisierung fehlerhafter Maschinen definiert. In Kubernetes stellt eine Maschine eine benutzerdefinierte Ressource dar, die kubelet ausführen kann. Auf der vSphere IaaS control plane wird eine Kubernetes-Maschinenressource durch eine vSphere-VM gestützt. Weitere Informationen finden Sie in der Upstream-Dokumentation.

Wenn Sie einen Cluster mithilfe des TKG-Dienst bereitstellen, werden vom System standardmäßige MachineHealthCheck-Objekte erstellt – eines für alle Steuerungsebenen und eines für jede Maschinenbereitstellung. Ab vSphere 8 Update 3 können Maschinenintegritätsprüfungen für v1beta1-Cluster konfiguriert werden. Zu den unterstützten Einstellungen gehören:

  • maxUnhealthy
  • nodeStartupTimeout
  • unhealthyConditions
  • unhealthyRange
In der Tabelle werden die unterstützten Vorgänge für die Maschinenintegritätsprüfungen beschrieben.
Tabelle 1. Maschinenintegritätsprüfungen
Bereich Wert Beschreibung
maxUnhealthy

string

Absolute Zahl oder ein Prozentsatz

Die Standardisierung wird nicht durchgeführt, wenn die Anzahl der fehlerhaften Maschinen den Wert überschreitet.
nodeStartupTimeout

string

Dauer im Format XhXmXs (Stunden, Minuten, Sekunden)

Jede zu erstellende Maschine, die beim Beitritt zum Cluster den angegebenen Zeitraum überschreitet, gilt als fehlgeschlagen und wird standardisiert.
unhealthyConditions

Array [] von UnhealthyConditions-Typen

Verfügbare Bedingungstypen:

[Ready, MemoryPressure,DiskPressure, PIDPressure, NetworkUnavailable]

Verfügbare Bedingungsstatuszustände:

[True, False, Unknown]

Liste der Bedingungen, die bestimmen, ob ein Steuerungsebenenknoten als fehlerhaft gilt.
unhealthyRange string

Eine weitere Standardisierung ist nur zulässig, wenn die Anzahl der von „Selektor“ als nicht fehlerfrei ausgewählten Maschinen innerhalb des Bereichs von unhealthyRange liegt.

Hat Vorrang vor maxUnhealthy. Beispiel: „[3-5]“ bedeutet, dass die Standardisierung nur zulässig ist, wenn (a) mindestens 3 fehlerhafte Maschinen und (b) höchstens 5 fehlerhafte Maschinen vorhanden sind.

Hinweis: MachineHealthCheck-Objekte werden für v1alpha3-Cluster bereitgestellt, können aber nicht konfiguriert werden. Details hierzu finden Sie unter Überprüfen der Integrität der TKG-Clustermaschine mithilfe von Kubectl.

MachineHealthCheck – Beispiel

Im folgenden Beispiel wird eine machineHealthCheck für eine bestimmte machineDeployment konfiguriert.
...
  topology:
    class: tanzukubernetescluster
    version: v1.28.8---vmware.1-fips.1-tkg.2
    controlPlane:
      machineHealthCheck:
        enable: true
        maxUnhealthy: 100%
        nodeStartupTimeout: 4h0m0s
        unhealthyConditions:
        - status: Unknown
          timeout: 5m0s
          type: Ready
       - status: "False"
          timeout: 12m0s
          type: Ready
      ...
    workers:
      machineDeployments:
      - class: node-pool
        failureDomain: np1
        machineHealthCheck:
          enable: true
          maxUnhealthy: 100%
          nodeStartupTimeout: 4h0m0s
          unhealthyConditions:
          - status: Unknown
            timeout: 5m0s
            type: Ready
          - status: "False"
            timeout: 12m0s
            type: Ready

Patchen von MachineHealthCheck mithilfe von Kubectl

Zum Aktualisieren der MachineHealthCheck für einen v1beta1-Cluster nach dessen Bereitstellung verwenden Sie die Methode patch.
Vorsicht: Diese Anweisungen enthalten eine allgemeine Anleitung zum Patchen eines vorhandenen Clusters. Die verwendeten Werte richten sich nach Ihrer Umgebung und dem bereitgestellten Cluster, den Sie patchen möchten. Verwenden Sie die Tanzu-CLI, um die MachineHealthCheck für einen vorhandenen Cluster zu patchen.
  1. Rufen Sie die machineDeployment aus der Definition der Clusterressource ab.
    kubectl get cluster CLUSTER_NAME -o yaml

    Im Abschnitt spec.topology.workers.machineDeployments sollte der jeweilige Wert für die entsprechende machineDeployment angezeigt werden.

  2. Löschen Sie die MachineHealthCheck für den Worker-Knoten.
    kubectl patch cluster <Cluster Name> -n <cluster namespace>  --type json -p='{"op": "replace", "path": "/spec/topology/workers/machineDeployments/<index>/machineHealthCheck", "value":{"enable":false}}'
  3. Löschen Sie die MachineHealthCheck für die Steuerungsebene.
    kubectl patch cluster <cluster-name> -n <cluster-namespace> --type json -p='{"op": "replace", "path": "/spec/topology/controlPlane/machineHealthCheck", "value":{"enable":false}}'
  4. Erstellen oder aktualisieren Sie die MachineHealthCheck für die Steuerungsebene mit den gewünschten Einstellungen.
    kubectl patch cluster <cluster-name> -n <cluster-namespace> --type json -p='[{"op": "replace", "path": "/spec/topology/controlPlane/machineHealthCheck", "value":{"enable":true,"nodeStartupTimeout":"1h58m","unhealthyConditions":[{"status":"Unknown","timeout":"5m10s","type":"Unknown"},{"status":"Unknown","timeout":"5m0s","type":"Ready"}],"maxUnhealthy":"100%"}}]'
  5. Erstellen oder aktualisieren Sie die MachineHealthCheck für den Worker-Knoten mit den gewünschten Einstellungen.
    kubectl patch cluster <cluster-name> -n <cluster-namespace> --type json -p='[{"op": "replace", "path": "/spec/topology/workers/machineDeployments/<index>/machineHealthCheck", "value":{"enable":true,"nodeStartupTimeout":"1h58m","unhealthyConditions":[{"status":"Unknown","timeout":"5m10s","type":"Unknown"},{"status":"Unknown","timeout":"5m0s","type":"Ready"}],"maxUnhealthy":"100%"}}]'

Konfigurieren von MachineHealthCheck mithilfe der Tanzu-CLI

Mithilfe der Tanzu-CLI können Sie MachineHealthCheck für einen v1beta1-Cluster erstellen.

Führen Sie beispielsweise folgenden Befehl aus, um die MachineHealthCheck-Einstellungen für die Steuerungsebene zu erstellen oder zu aktualisieren.
tanzu cluster mhc control-plane set <cluster-name> --node-startup-timeout 2h7m10s
Führen Sie folgenden Befehl aus, um sicherzustellen, dass die Einstellung aktualisiert und nicht abgeglichen wird.
tanzu cluster mhc control-plane get <cluster-name>
Führen Sie folgenden Befehl aus, um die MachineHealthCheck-Einstellungen für die Maschinenbereitstellung zu erstellen oder zu aktualisieren.
tanzu cluster mhc node set <cluster-name> --machine-deployment node-pool-1 --node-startup-timeout 1h59m0s
Führen Sie folgenden Befehl aus, um sicherzustellen, dass die Einstellung aktualisiert und nicht abgeglichen wird.
tanzu cluster mhc node get <cluster-name> -m <cluster-name>-node-pool-1-nr7r5

Neben „get“ und „set“ wird vom System auch der Löschvorgang unterstützt. Beispiel:

Für die Steuerungsebene können Sie beispielsweise folgenden Befehl verwenden:
tanzu cluster mhc control-plane delete <cluster-name>
Für den Knoten können Sie beispielsweise folgenden Befehl verwenden:
tanzu cluster mhc <cluster-name> --machine-deployment <machine deployment name>