Fare riferimento a queste istruzioni per eseguire il provisioning di un cluster TKG basato su una ClusterClass personalizzata. Si tenga presente che queste istruzioni sono specifiche per ambienti vSphere 8 U2 e versioni successive.

Prerequisiti

La procedura per il provisioning di un cluster TKG basato su una ClusterClass personalizzata è disponibile per la versione vSphere 8 U2.

Attenersi ai seguenti prerequisiti.
  • Ambiente vSphere 8 U2+
  • Gestione del carico di lavoro abilitata
  • Supervisore configurato
  • Client Ubuntu con Strumenti CLI Kubernetes di vSphere installato
Avvertimento: La ClusterClass personalizzata è una funzionalità Kubernetes sperimentale così come illustrata nella documentazione relativa all'API del cluster upstream. Poiché la gamma di personalizzazioni disponibili con la ClusterClass personalizzata è molto vasta, VMware non può testare o convalidare tutte le personalizzazioni possibili. I clienti sono responsabili del test, della convalida e della risoluzione dei problemi dei propri cluster con ClusterClass personalizzata. I clienti possono aprire ticket di supporto relativi ai cluster con ClusterClass personalizzata. Tuttavia, l'assistenza VMware è limitata solo al massimo sforzo possibile e non può garantire la risoluzione di tutti i problemi aperti per i cluster con ClusterClass personalizzata. I clienti devono essere consapevoli di questi rischi prima di distribuire cluster con ClusterClass personalizzata negli ambienti di produzione.

Workflow di alto livello

I workflow di alto livello sono i seguenti.

Per iniziare, è sufficiente il workflow seguente.
Passaggio Attività Istruzioni
1 Creare una ClusterClass personalizzata clonando la ClusterClass predefinita. 1: creazione di una ClusterClass personalizzata
2 Eseguire il provisioning di un nuovo cluster TKG basato sulla ClusterClass personalizzata e verificare che tutti i nodi del cluster vengano attivati correttamente. 2: creazione di un cluster TKG basato sulla ClusterClass personalizzata
Fare riferimento al workflow seguente per apportare modifiche alla ClusterClass personalizzata e avviare un aggiornamento in sequenza dei nodi del cluster con ClusterClass personalizzata.
Nota: L'operazione mostrata nel workflow seguente è un esempio di ciò che è possibile eseguire per una ClusterClass personalizzata. I casi d'uso possono essere diversi, ma dovrebbe essere applicabile il workflow generale.
Passaggio Attività Istruzioni
3 Accedere tramite SSH a uno dei nodi di lavoro per verificare la disponibilità di pacchetti da aggiornare. 3: verifica dell'esistenza di aggiornamenti dei pacchetti
4 Aggiornare la ClusterClass personalizzata con un nuovo comando che esegue gli aggiornamenti. 4: aggiornamento della ClusterClass personalizzata
5 Confermare l'implementazione di nuovi nodi con gli aggiornamenti già eseguiti. 5: verifica dell'aggiornamento in sequenza dei nodi del cluster

1: creazione di una ClusterClass personalizzata

La prima parte prevede la creazione di una ClusterClass personalizzata denominata ccc (abbreviazione per customclusterclass) mediante clonazione della ClusterClass predefinita denominata tanzukubernetescluster.
Nota: Il nome della ClusterClass personalizzata è definito dall'utente. Se si utilizza un nome diverso, modificare le istruzioni di conseguenza.
  1. Creare e configurare uno Spazio dei nomi vSphere denominato ccc-ns.

    Configurare autorizzazioni, storage, libreria di contenuti e classi di macchine virtuali. Se necessario, fare riferimento alla documentazione.

    Nota: Il nome dello Spazio dei nomi vSphere è definito dall'utente. Se si utilizza un nome diverso, modificare le istruzioni di conseguenza.
  2. Accedere a Supervisore.
    kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
  3. Scrivere l'output della ClusterClass predefinita in un file denominato ccc.yaml.
    kubectl -n ccc-ns get clusterclass tanzukubernetescluster -o yaml > ccc.yaml
    Oppure la versione abbreviata:
    kubectl -n ccc-ns get cc tanzukubernetescluster -o yaml > ccc.yaml
  4. Aprire per modificare il file ClusterClass clonato.
    vim ccc.yaml
  5. Modificare il file ccc.yaml.
    • Eliminare la riga metadata.creationTimestamp
    • Eliminare la riga metadata.generation
    • Eliminare la riga metadata.resourceVersion
    • Eliminare la riga metadata.uid
    • Modificare il valore del metadata.name da tanzukubernetescluster a ccc
    • Lasciare il valore metadata.namespace così come è: ccc-ns
    • Lasciare il valore metadata.annotations così come è per run.tanzu.vmware.com/resolve-tkr: "". Questa annotazione è necessaria per i dati o la risoluzione di TKR.
  6. Salvare e verificare le modifiche.
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: ClusterClass
    metadata:
      annotations:
        run.tanzu.vmware.com/resolve-tkr: ""
      name: ccc
      namespace: ccc-ns
    spec:
    ...
  7. Creare l'oggetto ClusterClass personalizzata.
    kubectl apply -f ccc.yaml -n ccc-ns
    Risultato previsto:
    clusterclass.cluster.x-k8s.io/ccc created
  8. Elencare la ClusterClass personalizzata.
    kubectl get cc -n ccc-ns
    Risultato previsto:
    NAME                     AGE
    ccc                      3m14s
    tanzukubernetescluster   29m
    

2: creazione di un cluster TKG basato sulla ClusterClass personalizzata

Utilizzare l' API v1beta1 del cluster per creare un cluster basato su una ClusterClass.
  1. Creare il manifesto ccc-cluster.yaml per eseguire il provisioning del cluster.
    #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
    dove:
    • Il valore metadata.name è il nome del cluster: ccc-cluster
    • Il valore spec.topology.class è il nome della ClusterClass personalizzata: ccc
    • Il valore spec.topology.version è la versione di TKR
    • Il valore spec.topology.variables.storageClass è il nome della classe di storage persistente
    Nota: A scopo di test, 1 replica è sufficiente per il piano di controllo e il pool di nodi di lavoro. In produzione, utilizzare 3 repliche per il piano di controllo e almeno 3 repliche per ogni pool di nodi di lavoro.
  2. Creare il cluster TKG basato sulla ClusterClass personalizzata.
    kubectl apply -f ccc-cluster.yaml -n ccc-ns
    Risultato previsto:
    cluster.cluster.x-k8s.io/ccc-cluster created
  3. Verificare il provisioning del cluster.
    Eseguire il comando seguente. Attendere che tutti i nodi del cluster vengano attivati correttamente.
    kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
    Nota: Sarà utile eseguire questo comando in una sessione separata in modo da poter monitorare l'avanzamento dell'aggiornamento in sequenza nel passaggio 5.

3: verifica dell'esistenza di aggiornamenti dei pacchetti

Accedere tramite SSH a uno dei nodi di lavoro per verificare la disponibilità di pacchetti da aggiornare.
Nota: L'obiettivo di questo passaggio è semplicemente quello di verificare se sono presenti pacchetti da aggiornare, non di eseguirne l'aggiornamento. Verranno aggiornati dalla ClusterClass personalizzata quando vengono implementati nuovi nodi del cluster (passaggi successivi a questo). Questo passaggio e quelli seguenti illustrano esempi di operazioni che è possibile eseguire per una ClusterClass personalizzata.
  1. Eseguire il comando seguente per ottenere il segreto SSH.
    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. Eseguire il comando seguente per ottenere l'indirizzo IP della macchina virtuale del nodo di lavoro.
    kubectl -n ccc-ns get vm -o wide
    Nota: Se sono stati distribuiti più nodi di lavoro, sceglierne uno. Non utilizzare un nodo del piano di controllo.
  3. Eseguire il comando seguente per accedere tramite SSH alla macchina virtuale del nodo di lavoro.
    ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
    Ad esempio:
    ssh -i ${CC}-ssh [email protected]
    Nota: Immettere "yes" per continuare a connettersi.
    Risultato previsto: dopo aver eseguito l'accesso all'host tramite SSH, dovrebbe essere visualizzato il messaggio seguente.
    tdnf update info not availble yet!
  4. Eseguire i comandi seguenti e verificare la disponibilità di aggiornamenti.
    sudo -i
    tdnf update
  5. Al prompt, immettere "N" per no (non aggiornare).
    Risultato previsto:
    Operation aborted
    Nota: Lo scopo qui è semplicemente quello di verificare la presenza di aggiornamenti, non di avviarli. Gli aggiornamenti verranno avviati aggiungendo un comando alla ClusterClass personalizzata nella sezione successiva.
  6. Digitare "exit" per disconnettersi dalla sessione SSH, quindi digitare di nuovo "exit".

4: aggiornamento della ClusterClass personalizzata

Aggiornare la ClusterClass personalizzata con un nuovo comando che esegue un aggiornamento tdnf.
  1. Aprire per modificare la ClusterClass personalizzata denominata ccc.
    kubectl edit cc ccc -n ccc-ns
  2. Scorrere verso il basso fino alla sezione seguente utilizzando 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
    
    Aggiungere il comando seguente a entrambi i campi valueFrom.template.
    - tdnf update -y
    Ad esempio:
      - 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. Salvare le modifiche apportate alla ClusterClass personalizzata e chiudere l'editor.
    wq
    Risultato previsto:
    clusterclass.cluster.x-k8s/ccc edited

5: verifica dell'aggiornamento in sequenza dei nodi del cluster

L'aggiornamento della ClusterClass personalizzata attiva un aggiornamento in sequenza dei nodi del cluster per i cluster con provisioning basato su tale ClusterClass. I nuovi nodi si attivano con il comando precedente applicato.
  1. Verificare il provisioning del cluster eseguendo il comando seguente.
    Attendere che tutti i nodi del cluster vengano attivati correttamente.
    kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
  2. Dovrebbero essere distribuiti nuovi nodi con nuovi UUID.
  3. Eseguire il comando seguente per accedere tramite SSH alla macchina virtuale del nodo di lavoro.
    ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
    Risultato previsto: dopo aver eseguito l'accesso all'host tramite SSH, dovrebbe essere visualizzato il messaggio seguente.
    tdnf update info not availble yet!
  4. Eseguire i comandi seguenti.
    sudo -i
    tdnf update

    Risultato previsto: dovrebbero essere visualizzati molti meno pacchetti che devono essere aggiornati.

  5. Al prompt, immettere "N" per no (non aggiornare).
    Risultato previsto:
    Operation aborted
  6. Eseguire il comando seguente per verificare che tdnf sia stato eseguito.
    cat /var/log/cloud-init-output.log | grep -i tdnf
  7. Digitare "exit" per disconnettersi dalla sessione SSH, quindi digitare di nuovo "exit".

Mantenimento di una ClusterClass personalizzata

Dopo aver aggiornato Servizio TKG a una nuova versione, è necessario assicurarsi che la ClusterClass personalizzata derivata dalla ClusterClass predefinita della versione Servizio TKG precedente venga aggiornata con le modifiche apportate alla ClusterClass predefinita fornite con la nuova versione di Servizio TKG.

Utilizzare il workflow seguente per mantenere la ClusterClass personalizzata sincronizzata con la ClusterClass fornita dal sistema. Si tenga presente che queste istruzioni presuppongono che sia stata creata una ClusterClass personalizzata iniziale come descritto qui.
  1. Aggiornare la versione di Servizio TKG.

    Ad esempio, eseguire l'aggiornamento da Servizio TKG v3.0 a v3.1.

    Vedere Installazione e aggiornamento di Servizio TKG.

  2. Creare una nuova ClusterClass personalizzata seguendo le istruzioni qui presenti.

    Assegnare una versione manuale alla nuova ClusterClass personalizzata aggiungendo al nome la versione di Servizio TKG, ad esempio ccc-3.1.

  3. Aggiungere le patch e le variabili personalizzate dalla ClusterClass personalizzata precedente alla nuova ClusterClass personalizzata.

    Per farlo, cat ccc.yaml e copiare le patch e le variabili personalizzate da tale patch in ccc-3.1.yaml.

  4. Applicare la nuova ClusterClass personalizzata e attendere la riuscita della riconciliazione.
  5. Aggiornare i cluster TKG utilizzando la ClusterClass personalizzata precedente nella nuova ClusterClass personalizzata modificando il campo spec.topology.class nell'oggetto Cluster.

ClusterClass non gestita

Per vSphere 8 U2+ è disponibile un'annotazione che è possibile aggiungere a una ClusterClass personalizzata se non si desidera che il controller TKG gestisca la ClusterClass personalizzata. Si tenga presente che se si aggiunge questa annotazione, si è responsabili della creazione manuale di tutti gli oggetti Kubernetes sottostanti, come certificati, segreti e così via. Per istruzioni su come eseguire questa operazione, fare riferimento alla documentazione della ClusterClass personalizzata di vSphere 8 U1.

L'annotazione è la seguente:
Chiave annotazione Valore
run.tanzu.vmware.com/unmanaged-clusterclass " "
Di seguito è disponibile un esempio che illustra come aggiungere l'annotazione alla ClusterClass personalizzata denominata 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:
...