Lesen Sie diese Anweisungen, um einen TKG-Cluster basierend auf einer benutzerdefinierten ClusterClass bereitzustellen. Beachten Sie, dass diese Anweisungen spezifisch für vSphere 8 U2- und höhere Umgebungen gelten.

Voraussetzungen

Das Verfahren für die Bereitstellung eines TKG-Clusters basierend auf einer benutzerdefinierten ClusterClass wurde für die Version vSphere 8 U2 aktualisiert.

Beachten Sie die folgenden Voraussetzungen.
  • vSphere 8 U2- und höhere Umgebung
  • Arbeitslastverwaltung aktiviert
  • Supervisor konfiguriert
  • Ubuntu-Client mit installierten Kubernetes-CLI-Tools für vSphere
Achtung: Die benutzerdefinierte ClusterClass ist eine experimentelle Kubernetes-Funktion gemäß der Upstream-Cluster-API- Dokumentation. Aufgrund der im Zusammenhang mit der benutzerdefinierten ClusterClass verfügbaren Bandbreite an Anpassungen kann VMware nicht alle möglichen Anpassungen testen oder validieren. Die Kunden sind für das Testen, Validieren und Beheben von Fehlern ihrer benutzerdefinierten ClusterClass-Cluster verantwortlich. Sie können Support-Tickets für ihre benutzerdefinierten ClusterClass-Cluster öffnen. VMware Support beschränkt sich jedoch auf eine Unterstützung nach bestem Wissen und kann nicht garantieren, dass alle Probleme behoben werden, die bei benutzerdefinierten ClusterClass-Clustern auftreten. Die Kunden sollten sich diese Risiken bewusst machen, bevor sie benutzerdefinierte ClusterClass-Cluster in Produktionsumgebungen bereitstellen.

Workflows auf hoher Ebene

Die Workflows auf hoher Ebene sehen wie folgt aus.

Der folgende Workflow ist alles, was Sie für die ersten Schritte benötigen.
Schritt Aufgabe Anleitung
1 Erstellen Sie eine benutzerdefinierte ClusterClass, indem Sie die standardmäßige ClusterClass klonen. 1: Erstellen einer benutzerdefinierten ClusterClass
2 Stellen Sie einen neuen TKG-Cluster basierend auf der benutzerdefinierten ClusterClass bereit und vergewissern Sie sich, dass alle Clusterknoten ordnungsgemäß hochgefahren werden. 2: Erstellen eines TKG-Clusters basierend auf der benutzerdefinierten ClusterClass
Im folgenden Workflow können Sie Änderungen an der benutzerdefinierten ClusterClass vornehmen und ein paralleles Update von Clusterknoten mit benutzerdefinierter ClusterClass initiieren.
Hinweis: Der im folgenden Workflow gezeigte Vorgang ist ein Beispiel dafür, welche Möglichkeiten Sie mit einer benutzerdefinierten ClusterClass haben. Ihre Anwendungsfälle können davon abweichen, aber der allgemeine Workflow sollte anwendbar sein.
Schritt Aufgabe Anleitung
3 Melden Sie sich über SSH bei einem der Worker-Knoten an, um zu bestätigen, dass Pakete aktualisiert werden müssen. 3: Bestätigen des Vorhandenseins von Paketaktualisierungen
4 Aktualisieren Sie die benutzerdefinierte ClusterClass mit einem neuen Befehl, der die Aktualisierungen durchführt. 4: Aktualisieren der benutzerdefinierten ClusterClass
5 Bestätigen Sie das Rollout neuer Knoten mit den bereits ausgeführten Updates. 5: Überprüfen des parallelen Updates von Clusterknoten

1: Erstellen einer benutzerdefinierten ClusterClass

Der erste Teil umfasst das Erstellen einer benutzerdefinierten ClusterClass mit dem Namen ccc (Abkürzung für customclusterclass), indem Sie die standardmäßige ClusterClass mit dem Namen tanzukubernetescluster klonen.
Hinweis: Der benutzerdefinierte ClusterClass-Name ist benutzerdefiniert. Wenn Sie einen anderen Namen verwenden, passen Sie die Anweisungen entsprechend an.
  1. Erstellen und konfigurieren Sie einen vSphere-Namespace mit dem Namen ccc-ns.

    Konfigurieren Sie Berechtigungen, Speicher, Inhaltsbibliothek und VM-Klassen. Weitere Informationen finden Sie je nach Bedarf in der Dokumentation.

    Hinweis: Der vSphere-Namespace-Name ist benutzerdefiniert. Wenn Sie einen anderen Namen verwenden, passen Sie die Anweisungen entsprechend an.
  2. Melden Sie sich bei Supervisor an.
    kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
  3. Schreiben Sie die Ausgabe der standardmäßigen ClusterClass in eine Datei mit dem Namen ccc.yaml.
    kubectl -n ccc-ns get clusterclass tanzukubernetescluster -o yaml > ccc.yaml
    Oder in abgekürzter Version:
    kubectl -n ccc-ns get cc tanzukubernetescluster -o yaml > ccc.yaml
  4. Öffnen Sie die geklonte ClusterClass-Datei zum Bearbeiten.
    vim ccc.yaml
  5. Bearbeiten Sie die Datei ccc.yaml.
    • Löschen Sie die Zeile metadata.creationTimestamp.
    • Löschen Sie die Zeile metadata.generation.
    • Löschen Sie die Zeile metadata.resourceVersion.
    • Löschen Sie die Zeile metadata.uid.
    • Ändern Sie den Wert für metadata.name von tanzukubernetescluster in ccc.
    • Ändern Sie den Wert metadata.namespace nicht: ccc-ns
    • Behalten Sie den Wert metadata.annotations für run.tanzu.vmware.com/resolve-tkr: "" bei. Diese Anmerkung ist für die TKR-Daten/-Auflösung erforderlich.
  6. Speichern und verifizieren Sie die Änderungen.
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: ClusterClass
    metadata:
      annotations:
        run.tanzu.vmware.com/resolve-tkr: ""
      name: ccc
      namespace: ccc-ns
    spec:
    ...
  7. Erstellen Sie das benutzerdefinierte ClusterClass-Objekt.
    kubectl apply -f ccc.yaml -n ccc-ns
    Erwartetes Ergebnis:
    clusterclass.cluster.x-k8s.io/ccc created
  8. Listen Sie die benutzerdefinierte ClusterClass auf.
    kubectl get cc -n ccc-ns
    Erwartetes Ergebnis:
    NAME                     AGE
    ccc                      3m14s
    tanzukubernetescluster   29m
    

2: Erstellen eines TKG-Clusters basierend auf der benutzerdefinierten ClusterClass

Verwenden Sie die v1beta1-API des Clusters, um einen Cluster basierend auf einer ClusterClass zu erstellen.
  1. Erstellen Sie das ccc-cluster.yaml-Manifest, um den Cluster bereitzustellen.
    #ccc-cluster.yaml
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      name: ccc-cluster
    spec:
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.0.2.0/16
        services:
          cidrBlocks:
          - 198.51.100.0/12
        serviceDomain: cluster.local
      topology:
        class: ccc
        version: v1.26.5---vmware.2-fips.1-tkg.1
        controlPlane:
          replicas: 1
        workers:
          machineDeployments:
            - class: node-pool
              name: tkgs-node-pool-1
              replicas: 1
        variables:
        - name: vmClass
          value: guaranteed-small
        - name: storageClass
          value: tkg-storage-profile
    Dabei gilt:
    • Der Wert für metadata.name ist der Name des Clusters: ccc-cluster
    • Der Wert für spec.topology.class stimmt mit dem Namen der benutzerdefinierten ClusterClass überein: ccc
    • Der Wert für spec.topology.version ist die TKR-Version
    • Der Wert für spec.topology.variables.storageClass ist der Name der dauerhaften Speicherklasse
    Hinweis: Zu Testzwecken reicht 1 Replikat für die Steuerungsebene und den Worker-Knotenpool aus. Verwenden Sie in der Produktion 3 Replikate für die Steuerungsebene und mindestens 3 Replikate für jeden Worker-Knotenpool.
  2. Erstellen Sie den TKG-Cluster basierend auf der benutzerdefinierten ClusterClass.
    kubectl apply -f ccc-cluster.yaml -n ccc-ns
    Erwartetes Ergebnis:
    cluster.cluster.x-k8s.io/ccc-cluster created
  3. Überprüfen Sie die Clusterbereitstellung.
    Führen Sie den folgenden Befehl aus. Warten Sie, bis alle Clusterknoten ordnungsgemäß hochgefahren wurden.
    kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
    Hinweis: Es ist hilfreich, diesen Befehl in einer separaten Sitzung auszuführen, damit Sie den Fortschritt des parallelen Updates in Schritt 5 überwachen können.

3: Bestätigen des Vorhandenseins von Paketaktualisierungen

Melden Sie sich über SSH bei einem der Worker-Knoten an, um zu bestätigen, dass Pakete aktualisiert werden müssen.
Hinweis: Das Ziel bei diesem Schritt besteht einfach darin, zu bestätigen, dass zu aktualisierende Pakete vorhanden sind, und nicht darin, sie tatsächlich zu aktualisieren. Sie werden von der benutzerdefinierten ClusterClass aktualisiert, wenn neue Clusterknoten bereitgestellt werden (folgende Schritte). Dieser und die folgenden Schritte sollen ein Beispiel dafür sein, welche Möglichkeiten Sie mit einer benutzerdefinierten ClusterClass haben.
  1. Führen Sie den folgenden Befehl aus, um den geheimen SSH-Schlüssel abzurufen.
    export CC=ccc-cluster && kubectl get secret -n ccc-ns ${CC}-ssh -o jsonpath={.data.ssh-privatekey} | base64 -d > ${CC}-ssh && chomd 4000 ${CC}-ssh
  2. Führen Sie den folgenden Befehl aus, um die IP-Adresse der Worker-Knoten-VM abzurufen.
    kubectl -n ccc-ns get vm -o wide
    Hinweis: Wenn Sie mehrere Worker-Knoten bereitgestellt haben, wählen Sie einen davon aus. Verwenden Sie keinen Steuerungsebenenknoten.
  3. Führen Sie den folgenden Befehl aus, um sich per SSH bei der Worker-Knoten-VM anzumelden.
    ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
    Beispiel:
    ssh -i ${CC}-ssh [email protected]
    Hinweis: Geben Sie „Ja“ ein, um mit dem Herstellen der Verbindung fortzufahren.
    Erwartetes Ergebnis: Nach dem Anmelden per SSH beim Host sollte die folgende Meldung angezeigt werden.
    tdnf update info not availble yet!
  4. Führen Sie die folgenden Befehle aus und suchen Sie nach Updates.
    sudo -i
    tdnf update
  5. Geben Sie an der Eingabeaufforderung „N“ für „Nein“ ein (nicht aktualisieren).
    Erwartetes Ergebnis:
    Operation aborted
    Hinweis: Der Zweck besteht hier einfach darin, zu überprüfen, ob Aktualisierungen vorhanden sind, und nicht darin, Aktualisierungen zu initiieren. Sie initiieren die Aktualisierungen, indem Sie im nächsten Abschnitt einen Befehl zur benutzerdefinierten ClusterClass hinzufügen.
  6. Geben Sie „exit“ ein, um sich von der SSH-Sitzung abzumelden, und geben Sie dann erneut „exit“ ein.

4: Aktualisieren der benutzerdefinierten ClusterClass

Aktualisieren Sie die benutzerdefinierte ClusterClass mit einem neuen Befehl, der ein tdnf-Update durchführt.
  1. Öffnen Sie die benutzerdefinierte ClusterClass mit dem Namen ccc.
    kubectl edit cc ccc -n ccc-ns
  2. Scrollen Sie zum folgenden Abschnitt mit postKubeadmCommands.
      - definitions:
        - jsonPatches:
          - op: add
            path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands
            valueFrom:
              template: |
                - touch /root/kubeadm-complete
                - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete'
                - vmware-rpctool 'info-set guestinfo.kubeadm.error ---'
          selector:
            apiVersion: controlplane.cluster.x-k8s.io/v1beta1
            kind: KubeadmControlPlaneTemplate
            matchResources:
              controlPlane: true
        - jsonPatches:
          - op: add
            path: /spec/template/spec/postKubeadmCommands
            valueFrom:
              template: |
                - touch /root/kubeadm-complete
                - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete'
                - vmware-rpctool 'info-set guestinfo.kubeadm.error ---'
          selector:
            apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
            kind: KubeadmConfigTemplate
            matchResources:
              machineDeploymentClass:
                names:
                - node-pool
        name: controlPlanePostKubeadmCommandsSuccess
    
    Fügen Sie beiden valueFrom.template Feldern den folgenden Befehl hinzu.
    - tdnf update -y
    Beispiel:
      - definitions:
        - jsonPatches:
          - op: add
            path: /spec/template/spec/kubeadmConfigSpec/postKubeadmCommands
            valueFrom:
              template: |
                - touch /root/kubeadm-complete
                - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete'
                - vmware-rpctool 'info-set guestinfo.kubeadm.error ---'
                - tdnf update -y
          selector:
            apiVersion: controlplane.cluster.x-k8s.io/v1beta1
            kind: KubeadmControlPlaneTemplate
            matchResources:
              controlPlane: true
        - jsonPatches:
          - op: add
            path: /spec/template/spec/postKubeadmCommands
            valueFrom:
              template: |
                - touch /root/kubeadm-complete
                - vmware-rpctool 'info-set guestinfo.kubeadm.phase complete'
                - vmware-rpctool 'info-set guestinfo.kubeadm.error ---'
                - tdnf update -y
          selector:
            apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
            kind: KubeadmConfigTemplate
            matchResources:
              machineDeploymentClass:
                names:
                - node-pool
        name: controlPlanePostKubeadmCommandsSuccess
    
  3. Speichern Sie die Änderungen an der benutzerdefinierten ClusterClass und schließen Sie den Editor.
    wq
    Erwartetes Ergebnis:
    clusterclass.cluster.x-k8s/ccc edited

5: Überprüfen des parallelen Updates von Clusterknoten

Durch das Aktualisieren der benutzerdefinierten ClusterClass wird ein paralleles Update von Clusterknoten für Cluster, die basierend auf dieser ClusterClass bereitgestellt werden, ausgelöst. Die neuen Knoten werden hochgefahren, nachdem der obige Befehl bereits auf sie angewendet wurde.
  1. Überprüfen Sie die Clusterbereitstellung, indem Sie folgenden Befehl ausführen:
    Warten Sie, bis alle Clusterknoten ordnungsgemäß hochgefahren wurden.
    kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
  2. Es sollte zu sehen sein, dass neue Knoten mit neuen UUIDs bereitgestellt werden.
  3. Führen Sie den folgenden Befehl aus, um sich per SSH bei der Worker-Knoten-VM anzumelden.
    ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
    Erwartetes Ergebnis: Nach dem Anmelden per SSH beim Host sollte die folgende Meldung angezeigt werden.
    tdnf update info not availble yet!
  4. Führen Sie die folgenden Befehle aus:
    sudo -i
    tdnf update

    Erwartetes Ergebnis: Es sollten viel weniger zu aktualisierende Pakete angezeigt werden.

  5. Geben Sie an der Eingabeaufforderung „N“ für „Nein“ ein (nicht aktualisieren).
    Erwartetes Ergebnis:
    Operation aborted
  6. Führen Sie den folgenden Befehl aus, um zu bestätigen, dass tdnf ausgeführt wurde.
    cat /var/log/cloud-init-output.log | grep -i tdnf
  7. Geben Sie „exit“ ein, um sich von der SSH-Sitzung abzumelden, und geben Sie dann erneut „exit“ ein.

Warten einer benutzerdefinierten ClusterClass

Nach dem Upgrade des TKG-Diensts auf eine neue Version müssen Sie sicherstellen, dass Ihre benutzerdefinierte ClusterClass, die aus der Standard-ClusterClass der vorherigen TKG-Dienstversion abgeleitet wurde, mit den Änderungen an der Standard-ClusterClass aktualisiert wird, die mit der neuen TKG-Dienstversion ausgeliefert wird.

Verwenden Sie den folgenden Workflow, um Ihre benutzerdefinierte ClusterClass mit der vom System bereitgestellten ClusterClass synchron zu halten. Beachten Sie, dass bei diesen Anweisungen davon ausgegangen wird, dass Sie eine anfängliche benutzerdefinierte ClusterClass erstellt haben, wie hier beschrieben.
  1. Upgrade der TKG-Dienstversion

    Führen Sie beispielsweise ein Upgrade von TKG-Dienst v3.0 auf v3.1 durch.

    Weitere Informationen hierzu finden Sie unter Installieren und Aktualisieren des TKG-Diensts.

  2. Erstellen Sie eine neue benutzerdefinierte ClusterClass, indem Sie den hier angegebenen Anweisungen folgen.

    Versionieren Sie die neue benutzerdefinierte ClusterClass manuell, indem Sie an ihren Namen die TKG-Dienstversion anhängen, etwa ccc-3.1.

  3. Fügen Sie der neuen benutzerdefinierten ClusterClass die benutzerdefinierten Patches und Variablen aus der vorherigen benutzerdefinierten ClusterClass hinzu.

    Verwenden Sie dazu cat ccc.yaml, und kopieren Sie die benutzerdefinierten Patches und Variablen daraus nach ccc-3.1.yaml.

  4. Wenden Sie die neue benutzerdefinierte ClusterClass an, und warten Sie, bis der Abgleich erfolgreich verläuft.
  5. Aktualisieren Sie TKG-Cluster mit der vorherigen benutzerdefinierten ClusterClass auf die neue benutzerdefinierte ClusterClass, indem Sie das Feld spec.topology.class im Cluster-Objekt bearbeiten.

Nicht verwaltete ClusterClass

Für vSphere 8 U2+ gibt es eine Anmerkung, die Sie zu einer benutzerdefinierten ClusterClass hinzufügen können, wenn der TKG-Controller die benutzerdefinierte ClusterClass nicht verwalten soll. Beachten Sie, dass Sie für die manuelle Erstellung aller zugrunde liegenden Kubernetes-Objekte wie Zertifikate, geheime Schlüssel usw. verantwortlich sind, wenn Sie diese Anmerkung hinzufügen. Weitere Informationen hierzu finden Sie in der Dokumentation zur benutzerdefinierten vSphere 8 U1-ClusterClass.

Die Anmerkung lautet folgendermaßen:
Anmerkungsschlüssel Wert
run.tanzu.vmware.com/unmanaged-clusterclass " "
Im Folgenden finden Sie ein Beispiel zum Hinzufügen der Anmerkung zur benutzerdefinierten ClusterClass mit der Bezeichnung ccc:
apiVersion: cluster.x-k8s.io/v1beta1
kind: ClusterClass
metadata:
  annotations:
    run.tanzu.vmware.com/resolve-tkr: ""
    run.tanzu.vmware.com/unmanaged-clusterclass: ""
  name: ccc
  namespace: ccc-ns
spec:
...