Verwalten von Knotenpools verschiedener VM-Typen

In diesem Thema wird erläutert, wie Sie Knotenpools in einem Arbeitslastcluster erstellen, aktualisieren und löschen. Knotenpools ermöglichen es einem einzelnen Arbeitslastcluster, verschiedene Knotentypen zu enthalten und zu verwalten, um die unterschiedlichen Anforderungen verschiedener Anwendungen zu unterstützen.

Beispielsweise kann ein Cluster Knoten mit hoher Speicherkapazität zum Ausführen eines Datenspeichers und schlankere Knoten zum Verarbeiten von Anwendungsanforderungen verwenden.

Hinweis

Um Knotenpools in von vSphere with Tanzu erstellten Arbeitslastclustern zu erstellen und zu verwenden, müssen Sie vSphere v7.0 U3 oder höher ausführen.

Wenn Sie vSphere with Tanzu verwenden, müssen Ihre vSphere with Tanzu-Cluster die API v1alpha2 verwenden, um die node-pool-Befehle erfolgreich auszuführen. Weitere Informationen finden Sie in der vSphere with Tanzu-Dokumentation.

Informationen zu Knotenpools

Knotenpools definieren Eigenschaften für die Sätze von Worker-Knoten, die von einem Arbeitslastcluster verwendet werden.

Einige Knotenpooleigenschaften hängen von den VM-Optionen ab, die in der zugrunde liegenden Infrastruktur verfügbar sind, aber alle Knotenpools in allen Cloudinfrastrukturen nutzen die folgenden Eigenschaften:

  • name: ein eindeutiger Bezeichner für den Knotenpool, der für Vorgänge wie Updates und Löschungen verwendet wird.
  • replicas: die Anzahl der Knoten im Pool, die alle dieselben Eigenschaften aufweisen.
  • labels: Schlüssel/Wert-Paare, die als Metadaten auf den Knoten festgelegt sind, um Arbeitslasten mit Knoten im Pool abzugleichen. Weitere Informationen und Beispielbezeichnungen finden Sie unter Bezeichnungen und Selektoren in der Kubernetes-Dokumentation.

Für Arbeitslastcluster unter vSphere befolgen eigenständige Verwaltungscluster standardmäßig Anti-Affinitätsregeln, um Worker- und Steuerungsebenenknoten im Knotenpool auf verschiedenen ESXi-Hosts bereitzustellen. Informationen zum Deaktivieren der Anti-Affinitätsregeln für die Knotenplatzierung finden Sie unter Deaktivieren von Anti-Affinitätsregeln.

Alle Arbeitslastcluster werden mit einem ersten, ursprünglichen Knotenpool erstellt. Wenn Sie wie unten beschrieben zusätzliche Knotenpools für einen Cluster erstellen, stellt der erste Knotenpool Standardwerte für Eigenschaften bereit, die in den neuen Knotenpooldefinitionen nicht festgelegt sind.

Auflisten von Knotenpools

Führen Sie folgenden Befehl aus, um die derzeit in einem Cluster verfügbaren Knotenpools zu überprüfen:

tanzu cluster node-pool list CLUSTER-NAME

Der Befehl gibt eine Liste aller Knotenpools im Cluster sowie der Status der Replikate in jedem Knotenpool zurück.

Erstellen eines Knotenpools

So erstellen Sie einen Knotenpool in einem Cluster:

  1. Erstellen Sie eine Konfigurationsdatei für den Knotenpool. Eine Beispielkonfigurationsdatei finden Sie in der Beispielkonfiguration.

    Eine vollständige Liste der Konfigurationseigenschaften finden Sie unter Konfigurationseigenschaften.

  2. Erstellen Sie den Knotenpool, der durch die Konfigurationsdatei definiert ist:

    tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
    

    Optionen:

    • --namespace gibt den Namespace des Clusters an. Der Standardwert ist default.
    • (Legacy-Cluster) --base-machine-deployment gibt das MachineDeployment-Basisobjekt an, aus dem der neue Knotenpool erstellt werden soll.
      • Legen Sie diesen Wert als MachineDeployment-Bezeichner fest, wie er in der Ausgabe von tanzu cluster get unter Details aufgeführt ist.
      • Der Standardwert ist das erste im Cluster-Array der MachineDeployment-Objekte des Worker-Knotens, intern als workerMDs[0] dargestellt.

Beispielkonfiguration

Im Folgenden finden Sie eine Beispielkonfiguration für Ihre zugrunde liegende Infrastruktur.

vSphere-Konfiguration
Zusätzlich zu den erforderlichen Eigenschaften name, replicas und labels können Konfigurationsdateien für Knotenpools unter vSphere einen vsphere-Block enthalten, der optionale Eigenschaften speziell für die Konfiguration von VMs unter vSphere definiert.

Beispiel für eine Knotenpooldefinition für vSphere-Cluster:

    name: tkg-wc-oidc-md-1
    replicas: 4
    labels:
      key1: value1
      key2: value2
    vsphere:
      memoryMiB: 8192
      diskGiB: 64
      numCPUs: 4
      datacenter: dc0
      datastore: iscsi-ds-0
      storagePolicyName: name
      folder: vmFolder
      resourcePool: rp-1
      vcIP: 10.0.0.1
      template: templateName
      cloneMode: clone-mode
      network: network-name

Werte, die im vsphere-Block nicht festgelegt sind, übernehmen die Werte aus dem ersten Knotenpool des Clusters.

Für den vcIP-Wert müssen Arbeitslastclusterknoten-Pools in demselben vCenter ausgeführt werden wie die Steuerungsebene des Clusters.

Definieren Sie für Cluster, die von einem vSphere with Tanzu Supervisor bereitgestellt wurden, storageClass, tkr und vmClass. Weitere Informationen zu diesen Eigenschaften finden Sie in der Dokumentation zu vSphere with Tanzu unter TanzuKubernetesCluster v1alpha3 API – Annotated.

Standardmäßig werden Arbeitslastcluster unter vSphere nach Anti-Affinitätsregeln bereitgestellt, nach denen die Knoten der Steuerungsebene und die Worker-Knoten in jedem Knotenpool auf mehrere ESXi-Hosts verteilt werden. Informationen zum Deaktivieren oder Reaktivieren der Anti-Affinitätsregeln finden Sie nachfolgend unter Deaktivieren von Anti-Affinitätsregeln (vSphere).

AWS-Konfiguration
Zusätzlich zu den erforderlichen Eigenschaften name, replicas und labels unterstützen Konfigurationsdateien für Knotenpools unter AWS die folgenden optionalen Eigenschaften:
  • az: Verfügbarkeitsbereich
  • nodeMachineType: Instanztyp

Diese Einstellungen können ausgelassen werden. In diesem Fall werden dafür die Werte aus dem ersten Knotenpool des Clusters übernommen.

Beispiel für eine Knotenpooldefinition für einen AWS-Cluster:

name: tkg-aws-wc-np-1
replicas: 2
az: us-west-2b
nodeMachineType: t3.large
labels:
  key1: value1
  key2: value2
Hinweis

Arbeitslastclusterknoten-Pools unter AWS müssen sich in demselben Verfügbarkeitsbereich wie der eigenständige Verwaltungscluster befinden.

Azure-Konfiguration
Zusätzlich zu den oben genannten erforderlichen Eigenschaften name, replicas und labels unterstützen Konfigurationsdateien für Knotenpools unter Microsoft Azure die folgenden optionalen Eigenschaften:
  • az: Verfügbarkeitsbereich
  • nodeMachineType: Instanztyp

Wenn die Einstellungen weggelassen werden, werden ihre Werte aus dem ersten Knotenpool des Clusters übernommen.

Beispiel für eine Knotenpooldefinition für Azure-Cluster:

name: tkg-azure-wc-np-1
replicas: 2
az: 2
nodeMachineType: Standard_D2s_v3
labels:
  key1: value1
  key2: value2

Konfigurationseigenschaften

In der folgenden Tabelle sind alle Eigenschaften aufgeführt, die Sie in einer Knotenpool-Konfigurationsdatei für Arbeitslastcluster definieren können.

Name Typ Clusterobjekt Anbieter Anmerkungen
name string Alle Alle Name des zu erstellenden oder zu aktualisierenden Knotenpools.
replicas integer Alle Alle Anzahl der Knoten im Knotenpool.
az string Alle TKG auf AWS oder Azure Verfügbarkeitsbereich, in dem die Knoten platziert werden sollen.
nodeMachineType string Alle TKG auf AWS oder Azure instanceType oder vmSize für den Knoten in AWS bzw. Azure.
labels map[string]string Alle Alle Bezeichnungen, die mithilfe von kubeletExtraArgs (‐‐node-labels) auf dem Knoten festgelegt werden sollen.
vmClass string Alle Alle Name einer Kubernetes-vmClass. Entspricht der im TKC-Cluster definierten vmClass. Diese Klasse legt die verfügbare CPU und den verfügbaren Arbeitsspeicher für den Knoten fest. Um die verfügbaren VM-Klassen aufzulisten, führen Sie kubectl describe virtualmachineclasses aus.
storageClass string Alle Alle Name einer Kubernetes-StorageClass, die für den Knotenpool verwendet werden soll. Diese Klasse gilt für die Festplatten, auf denen die Root-Dateisysteme der Knoten gespeichert sind. Um die verfügbaren Speicherklassen aufzulisten, führen Sie kubectl describe storageclasses aus.
volumes:
  • name, Zeichenfolge
  • mountPath, Zeichenfolge
  • capacity, corev1.ResourceList
  • storageClass, Zeichenfolge
[]object Alle Alle Datenträger, die für die Knoten verwendet werden sollen.
tkr:
  • reference, Zeichenfolge
Objekt TKC-basiert Alle Name des TKr, das für den Knotenpool verwendet werden soll. Beispiel: v1.24.10—vmware.2-tkg.2.
tkrResolver string Klassenbasiert Alle Erforderlich für klassenbasierte Cluster. Wert der run.tanzu.vmware.com/resolve-os-image-Anmerkung aus der Cluster-Ressource.
nodeDrainTimeout metav1.Duration Alle Alle Zeitüberschreitung bei Knotenentleerung.
vsphere Objekt Alle Alle Weitere Informationen finden Sie unter Konfigurationseigenschaften (nur vSphere).
workerClass string Klassenbasiert Alle Erforderlich für klassenbasierte Cluster. Die workerClass aus der ClusterClass des Clusters, die der Knotenpool verwenden soll.

Konfigurationseigenschaften (nur vSphere)

Informationen zu den VSPHERE_*-Konfigurationsvariablen finden Sie unter vSphere in der Referenz für die Variablen der Konfigurationsdatei.

Name Typ Typ des Verwaltungsclusters Anmerkungen
cloneMode string Eigenständig Wie VSPHERE_CLONE_MODE.
datacenter string Eigenständig Wie VSPHERE_DATACENTER.
datastore string Eigenständig Wie VSPHERE_DATASTORE.
storagePolicyName string Eigenständig Wie VSPHERE_STORAGE_POLICY_NAME.
taints []corev1.Taint Supervisor Auf den Knoten anzuwendende Taints.
folder string Eigenständig Wie VSPHERE_FOLDER.
network string Eigenständig Wie VSPHERE_NETWORK.
nameservers []string Eigenständig Wie VSPHERE_WORKER_NAMESERVERS.
tkgIPFamily string Eigenständig Wie TKG_IP_FAMILY.
resourcePool string Eigenständig Wie VSPHERE_RESOURCE_POOL.
vcIP string Eigenständig Wie VSPHERE_SERVER.
template string Eigenständig Wie VSPHERE_TEMPLATE.
memoryMiB integer Eigenständig Wie VSPHERE_WORKER_MEM_MIB.
diskGiB integer Eigenständig Wie VSPHERE_WORKER_DISK_GIB.
numCPUs integer Eigenständig Wie VSPHERE_WORKER_NUM_CPUS.

Zuweisen von Arbeitslasten zu einem Knotenpool

So weisen Sie einem Knotenpool eine Arbeitslast zu:

  1. Legen Sie in den Kubernetes-Arbeitslastressourcen, die Ihre Pods verwalten, nodeSelector auf den Wert von labels fest, den Sie in Ihrer Knotenpool-Konfigurationsdatei definiert haben. Informationen zu Kubernetes-Arbeitslastressourcen finden Sie unter Arbeitslasten in der Kubernetes-Dokumentation.
  2. Wenden Sie Ihre Konfiguration an, indem Sie den Befehl kubectl apply -f ausführen.

So weisen Sie eine Arbeitslast einem anderen Knotenpool zu:

  1. Aktualisieren Sie in den Kubernetes-Arbeitslastressourcen, die Ihre Pods verwalten, den Wert von nodeSelector auf den neuen Wert.
  2. Wenden Sie Ihre Konfigurationsaktualisierung an, indem Sie den Befehl kubectl apply -f ausführen.

Aktualisieren von Knotenpools

Wenn Sie nur die Anzahl der Knoten in einem Knotenpool ändern müssen, verwenden Sie den Tanzu CLI-Befehl in Skalieren nur von Knoten. Wenn Sie Bezeichnungen hinzufügen möchten, befolgen Sie die Prozedur unter Hinzufügen von Bezeichnungen und Skalieren von Knoten.

Vorsicht

Ändern Sie bei diesen Vorgängen nicht vorhandene Bezeichnungen, den Verfügbarkeitsbereich, den Knoteninstanztyp (auf AWS oder Azure) oder die Eigenschaften der virtuellen Maschine (auf vSphere) des Knotenpools. Dies kann schwerwiegende negative Auswirkungen auf laufende Arbeitslasten haben. Um diese Eigenschaften zu ändern, erstellen Sie einen neuen Knotenpool mit diesen Eigenschaften und weisen Sie die Arbeitslasten dem neuen Knotenpool erneut zu, bevor Sie das Original löschen. Anweisungen finden Sie oben unter Zuweisen von Arbeitslasten zu einem Knotenpool.

Skalieren nur von Knoten

Führen Sie folgenden Befehl aus, um die Anzahl der Knoten in einem Knotenpool zu ändern:

tanzu cluster scale CLUSTER-NAME -p NODE-POOL-NAME -w NODE-COUNT

Dabei gilt:

  • CLUSTER-NAME ist der Name des Arbeitslastclusters.
  • NODE-POOL-NAME ist der Name des Knotenpools.
  • NODE-COUNT ist die Anzahl der Knoten als Ganzzahl, die zu diesem Knotenpool gehören.

Hinzufügen von Bezeichnungen und Skalieren von Knoten

Über die Konfigurationsdatei des Knotenpools können Sie einem Knotenpool Bezeichnungen hinzufügen und gleichzeitig seine Knoten skalieren.

  1. Öffnen Sie die Konfigurationsdatei für den Knotenpool, den Sie aktualisieren möchten.

  2. Wenn Sie die Anzahl der Knoten in diesem Knotenpool erhöhen oder verringern, aktualisieren Sie die Zahl nach replicas.

  3. Wenn Sie Bezeichnungen hinzufügen, rücken Sie sie unter labels ein. Beispiel:

    labels:
      key1: value1
      key2: value2
    
  4. Speichern Sie die Konfigurationsdatei für den Knotenpool.

  5. Führen Sie in einem Terminal Folgendes aus:

    tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
    

    Wenn der CLUSTER-NAME im Befehl und name in der Konfigurationsdatei mit einem Knotenpool im Cluster übereinstimmen, aktualisiert dieser Befehl den vorhandenen Knotenpool, anstatt einen neuen zu erstellen.

Löschen von Knotenpools

Führen Sie folgenden Befehl aus, um einen Knotenpool zu löschen:

tanzu cluster node-pool delete CLUSTER-NAME -n NODE-POOL-NAME

Dabei ist CLUSTER-NAME der Name des Arbeitslastclusters und NODE-POOL-NAME der Name des Knotenpools.

Verwenden Sie optional --namespace, um den Namespace des Clusters anzugeben. Der Standardwert ist default.

Vorsicht

Weisen Sie alle Arbeitslasten auf diesen Knoten anderen Knotenpools neu zu, bevor Sie diesen Vorgang durchführen. tanzu cluster node-pool delete migriert Arbeitslasten nicht von Knoten, bevor sie gelöscht werden. Anweisungen finden Sie oben unter Zuweisen von Arbeitslasten zu einem Knotenpool.

Deaktivieren von Anti-Affinitätsregeln (vSphere)

Standardmäßig werden Arbeitslastcluster unter vSphere nach Anti-Affinitätsregeln bereitgestellt, nach denen die Knoten der Steuerungsebene und die Worker-Knoten in jedem Knotenpool auf mehrere ESXi-Hosts verteilt werden. Gehen Sie wie folgt vor, um die Anti-Affinitätsregeln beim Erstellen von Clustern zu deaktivieren oder erneut zu aktivieren:

  1. Legen Sie den Kontext kubectl auf den Verwaltungscluster fest:

    kubectl config use-context MGMT-CLUSTER-NAME-admin@MGMT-CLUSTER-NAME
    

    Dabei gilt: MGMT-CLUSTER-NAME ist der Name des Clusters.

  2. Führen Sie kubectl get deployment auf dem CAPV-Controller aus, um die args-Werte für seinen manager-Container zu erfassen. Beispiel:

    kubectl get deployment -n capv-system capv-controller-manager -o=json | jq '.spec.template.spec.containers[] | select(.name=="manager") | .args'
    [
      "--leader-elect",
      "--logtostderr",
      "--v=4",
      "--feature-gates=NodeAntiAffinity=true,NodeLabeling=true"
    ]
    
  3. Kopieren Sie das Ergebnis aus dem vorherigen Schritt, ändern Sie die --feature-gates-Werte und übergeben Sie die Liste der Argumente an einen kubectl patch-Befehl, der ihre Werte im Objekt überarbeitet. Beispielsweise können Sie die Gates der Funktionen NodeAntiAffinity und NodeLabeling wie folgt auf false zu setzen, wodurch die Anti-Affinitätsregeln für den Knoten deaktiviert werden:

    kubectl patch deployment -n capv-system capv-controller-manager --type=json -p '[{"op":"replace", "path":"/spec/template/spec/containers/0/args", "value": [
    "--leader-elect",
    "--logtostderr",
    "--v=4",
    "--feature-gates=NodeAntiAffinity=false,NodeLabeling=false"
    ]}]'
    
check-circle-line exclamation-circle-line close-line
Scroll to top icon