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.
HinweisSie können keine Knotenpools in einem Einzelknotencluster erstellen.
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 APIv1alpha2
verwenden, um dienode-pool
-Befehle erfolgreich auszuführen. Weitere Informationen finden Sie in der vSphere with Tanzu-Dokumentation.
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.
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.
So erstellen Sie einen Knotenpool in einem Cluster:
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.
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
.--base-machine-deployment
gibt das MachineDeployment
-Basisobjekt an, aus dem der neue Knotenpool erstellt werden soll.
MachineDeployment
-Bezeichner fest, wie er in der Ausgabe von tanzu cluster get
unter Details
aufgeführt ist.MachineDeployment
-Objekte des Worker-Knotens, intern als workerMDs[0]
dargestellt.Im Folgenden finden Sie eine Beispielkonfiguration für Ihre zugrunde liegende Infrastruktur.
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).
name
,
replicas
und
labels
unterstützen Konfigurationsdateien für Knotenpools unter AWS die folgenden optionalen Eigenschaften:
az
: VerfügbarkeitsbereichnodeMachineType
: InstanztypDiese 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
HinweisArbeitslastclusterknoten-Pools unter AWS müssen sich in demselben Verfügbarkeitsbereich wie der eigenständige Verwaltungscluster befinden.
name
,
replicas
und
labels
unterstützen Konfigurationsdateien für Knotenpools unter Microsoft Azure die folgenden optionalen Eigenschaften:
az
: VerfügbarkeitsbereichnodeMachineType
: InstanztypWenn 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
In der folgenden Tabelle sind alle Eigenschaften aufgeführt, die Sie in einer Knotenpool-Konfigurationsdatei für Arbeitslastcluster definieren können.
HinweisSie können die Eigenschaften
labels
,az
undnodeMachineType
oder die vSphere-Eigenschaften eines vorhandenen Knotenpools nicht hinzufügen oder ändern. Wenn Sie diese Eigenschaften ändern möchten, müssen Sie im Cluster einen neuen Knotenpool mit den gewünschten Eigenschaften erstellen, die Arbeitslasten zum neuen Knotenpool migrieren und den ursprünglichen Knotenpool löschen.
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 :
|
[]object | Alle | Alle | Datenträger, die für die Knoten verwendet werden sollen. |
tkr :
|
Objekt | TKC-basiert | Alle | Name des TKr, das für den Knotenpool verwendet werden soll. Beispiel: v1.27.5---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)](#vsphere-properties). |
workerClass |
string | Klassenbasiert | Alle | Erforderlich für klassenbasierte Cluster. Die workerClass aus der ClusterClass des Clusters, die der Knotenpool verwenden soll. |
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 . |
So weisen Sie einem Knotenpool eine Arbeitslast zu:
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.kubectl apply -f
ausführen.So weisen Sie eine Arbeitslast einem anderen Knotenpool zu:
nodeSelector
auf den neuen Wert.kubectl apply -f
ausführen.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.
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.Über die Konfigurationsdatei des Knotenpools können Sie einem Knotenpool Bezeichnungen hinzufügen und gleichzeitig seine Knoten skalieren.
Öffnen Sie die Konfigurationsdatei für den Knotenpool, den Sie aktualisieren möchten.
Wenn Sie die Anzahl der Knoten in diesem Knotenpool erhöhen oder verringern, aktualisieren Sie die Zahl nach replicas
.
Wenn Sie Bezeichnungen hinzufügen, rücken Sie sie unter labels
ein. Beispiel:
labels:
key1: value1
key2: value2
Speichern Sie die Konfigurationsdatei für den Knotenpool.
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.
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
.
VorsichtWeisen 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.
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:
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.
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"
]
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"
]}]'