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.
- Ambiente vSphere 8 U2+
- Gestione del carico di lavoro abilitata
- Supervisore configurato
- Client Ubuntu con Strumenti CLI Kubernetes di vSphere installato
Workflow di alto livello
I workflow di alto livello sono i seguenti.
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 |
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
ccc
(abbreviazione per
customclusterclass
) mediante clonazione della ClusterClass predefinita denominata
tanzukubernetescluster
.
- 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. - Accedere a Supervisore.
kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
- 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
- Aprire per modificare il file ClusterClass clonato.
vim ccc.yaml
- 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
datanzukubernetescluster
accc
- Lasciare il valore
metadata.namespace
così come è:ccc-ns
- Lasciare il valore
metadata.annotations
così come è perrun.tanzu.vmware.com/resolve-tkr: ""
. Questa annotazione è necessaria per i dati o la risoluzione di TKR.
- Eliminare la riga
- 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: ...
- Creare l'oggetto ClusterClass personalizzata.
kubectl apply -f ccc.yaml -n ccc-ns
Risultato previsto:clusterclass.cluster.x-k8s.io/ccc created
- 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
- 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. - Il valore
- 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
- 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
- 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
- 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. - 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!
- Eseguire i comandi seguenti e verificare la disponibilità di aggiornamenti.
sudo -i
tdnf update
- 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. - Digitare "exit" per disconnettersi dalla sessione SSH, quindi digitare di nuovo "exit".
4: aggiornamento della ClusterClass personalizzata
- Aprire per modificare la ClusterClass personalizzata denominata
ccc
.kubectl edit cc ccc -n ccc-ns
- 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 campivalueFrom.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
- 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
- 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
- Dovrebbero essere distribuiti nuovi nodi con nuovi UUID.
- 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!
- Eseguire i comandi seguenti.
sudo -i
tdnf update
Risultato previsto: dovrebbero essere visualizzati molti meno pacchetti che devono essere aggiornati.
- Al prompt, immettere "N" per no (non aggiornare).
Risultato previsto:
Operation aborted
- Eseguire il comando seguente per verificare che tdnf sia stato eseguito.
cat /var/log/cloud-init-output.log | grep -i tdnf
- 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.
- Aggiornare la versione di Servizio TKG.
Ad esempio, eseguire l'aggiornamento da Servizio TKG v3.0 a v3.1.
- 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
. - 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 inccc-3.1.yaml
. - Applicare la nuova ClusterClass personalizzata e attendere la riuscita della riconciliazione.
- 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.
Chiave annotazione | Valore |
---|---|
run.tanzu.vmware.com/unmanaged-clusterclass | " " |
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: ...