Consulte estas instrucciones para aprovisionar un clúster de TKG basado en una ClusterClass personalizada. Tenga en cuenta que estas instrucciones son específicas de los entornos de vSphere 8 U2 y versiones posteriores.
Requisitos previos
El procedimiento para aprovisionar un clúster de TKG basado en una ClusterClass personalizada se actualiza para la versión vSphere 8 U2.
- Entorno de vSphere 8 U2 y versiones posteriores
- Administración de cargas de trabajo habilitada
- Supervisor configurados
- Cliente de Ubuntu con Herramientas de la CLI de Kubernetes para vSphere instalado
Flujos de trabajo de alto nivel
Los flujos de trabajo de alto nivel son los siguientes.
Paso | Tarea | Instrucciones |
---|---|---|
1 | Cree una ClusterClass personalizada mediante la clonación de la ClusterClass predeterminada. | 1: Crear una ClusterClass personalizada |
2 | Aprovisione un nuevo clúster de TKG según la ClusterClass personalizada y compruebe que todos los nodos del clúster aparezcan correctamente. | 2: Crear un clúster de TKG basado en la ClusterClass personalizada |
Paso | Tarea | Instrucciones |
---|---|---|
3 | Acceda mediante SSH a uno de los nodos de trabajo para confirmar que hay paquetes que se deben actualizar. | 3: Comprobar la existencia de actualizaciones de paquetes |
4 | Actualice la ClusterClass personalizada con un nuevo comando que realice las actualizaciones. | 4: Actualizar la ClusterClass personalizada |
5 | Confirme la implementación de nodos nuevos con las actualizaciones ya ejecutadas. | 5: Comprobar la actualización gradual de los nodos del clúster |
1: Crear una ClusterClass personalizada
ccc
(abreviatura de
customclusterclass
) mediante la clonación de la ClusterClass predeterminada, que se denomina
tanzukubernetescluster
.
- Cree y configure un espacio de nombres de vSphere denominado ccc-ns.
Configure los permisos, el almacenamiento, la biblioteca de contenido y las clases de máquinas virtuales. Consulte la documentación según sea necesario.
Nota: El nombre de espacio de nombres de vSphere lo define el usuario. Si utiliza un nombre diferente, ajuste las instrucciones según corresponda. - Inicie sesión en Supervisor.
kubectl vsphere login --server=IP-ADDRESS --vsphere-username [email protected]
- Escriba el resultado de la ClusterClass predeterminada en un archivo denominado ccc.yaml.
kubectl -n ccc-ns get clusterclass tanzukubernetescluster -o yaml > ccc.yaml
O bien, la versión del acceso directo:kubectl -n ccc-ns get cc tanzukubernetescluster -o yaml > ccc.yaml
- Abra el archivo de la ClusterClass clonada para editarlo.
vim ccc.yaml
- Edite el archivo
ccc.yaml
.- Elimine la línea
metadata.creationTimestamp
- Elimine la línea
metadata.generation
- Elimine la línea
metadata.resourceVersion
- Elimine la línea
metadata.uid
- Cambie el valor de
metadata.name
entanzukubernetescluster
accc
- Deje el valor de
metadata.namespace
tal como está:ccc-ns
- Deje el valor de
metadata.annotations
tal como está pararun.tanzu.vmware.com/resolve-tkr: ""
. Esta anotación es necesaria para los datos o la resolución de TKR.
- Elimine la línea
- Guarde y compruebe los cambios.
apiVersion: cluster.x-k8s.io/v1beta1 kind: ClusterClass metadata: annotations: run.tanzu.vmware.com/resolve-tkr: "" name: ccc namespace: ccc-ns spec: ...
- Cree el objeto de ClusterClass personalizado.
kubectl apply -f ccc.yaml -n ccc-ns
Resultado esperado:clusterclass.cluster.x-k8s.io/ccc created
- Enumere la ClusterClass personalizada.
kubectl get cc -n ccc-ns
Resultado esperado:NAME AGE ccc 3m14s tanzukubernetescluster 29m
2: Crear un clúster de TKG basado en la ClusterClass personalizada
- Cree el manifiesto de
ccc-cluster.yaml
para aprovisionar el clúster.#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
Donde:- El valor de
metadata.name
es el nombre del clúster:ccc-cluster
- El valor de
spec.topology.class
es el nombre de la ClusterClass personalizada:ccc
- El valor de
spec.topology.version
es la versión de TKR - El valor de
spec.topology.variables.storageClass
es el nombre de la clase de almacenamiento persistente
Nota: Para fines de prueba, 1 réplica es suficiente para el plano de control y el grupo de nodos de trabajo. En producción, utilice 3 réplicas para el plano de control y al menos 3 réplicas para cada grupo de nodos de trabajo. - El valor de
- Cree el clúster de TKG en función de la ClusterClass personalizada.
kubectl apply -f ccc-cluster.yaml -n ccc-ns
Resultado esperado:cluster.cluster.x-k8s.io/ccc-cluster created
- Compruebe el aprovisionamiento del clúster.
Ejecute el siguiente comando. Espere a que todos los nodos del clúster aparezcan correctamente.
kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
Nota: Resultará útil ejecutar este comando en una sesión independiente para que pueda supervisar el progreso de la actualización gradual en el paso 5.
3: Comprobar la existencia de actualizaciones de paquetes
- Ejecute el siguiente comando para obtener el secreto de 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
- Ejecute el siguiente comando para obtener la dirección IP de la máquina virtual del nodo de trabajo.
kubectl -n ccc-ns get vm -o wide
Nota: Si implementó varios nodos de trabajo, elija uno. No utilice un nodo de plano de control. - Ejecute el siguiente comando para utilizar SSH en la máquina virtual del nodo de trabajo.
ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
Por ejemplo:ssh -i ${CC}-ssh [email protected]
Nota: Introduzca "yes" para continuar con la conexión.Resultado esperado: después de utilizar SSH en el host, debería ver el siguiente mensaje.tdnf update info not availble yet!
- Ejecute los siguientes comandos y compruebe si hay actualizaciones.
sudo -i
tdnf update
- En el símbolo del sistema, introduzca "N" para no (no actualizar).
Resultado esperado:
Operation aborted
Nota: El propósito aquí es simplemente comprobar si hay actualizaciones, no iniciar las actualizaciones. Para iniciar las actualizaciones, agregue un comando a la ClusterClass personalizada en la siguiente sección. - Escriba "exit" para cerrar la sesión de SSH y, a continuación, vuelva a escribir "exit".
4: Actualizar la ClusterClass personalizada
- Abra la ClusterClass personalizada denominada
ccc
para editarla.kubectl edit cc ccc -n ccc-ns
- Desplácese hacia abajo hasta la siguiente sección con
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
Agregue el siguiente comando en ambos camposvalueFrom.template
.- tdnf update -y
Por ejemplo:- 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
- Guarde los cambios en la ClusterClass personalizada y cierre el editor.
wq
Resultado esperado:clusterclass.cluster.x-k8s/ccc edited
5: Comprobar la actualización gradual de los nodos del clúster
- Para comprobar el aprovisionamiento del clúster, ejecute el siguiente comando.
Espere a que todos los nodos del clúster aparezcan correctamente.
kubectl -n ccc-ns get cc,clusters,vsphereclusters,kcp,machinedeployment,machineset,machine,vspheremachine,virtualmachineservice
- Debería ver que se implementen nodos nuevos con UUID nuevos.
- Ejecute el siguiente comando para utilizar SSH en la máquina virtual del nodo de trabajo.
ssh -i ${CC}-ssh vmware-system-user@IP-ADDRESS-OF-WORKER-NODE
Resultado esperado: después de utilizar SSH en el host, debería ver el siguiente mensaje.tdnf update info not availble yet!
- Ejecute los siguientes comandos.
sudo -i
tdnf update
Resultado esperado: debería ver muchos menos paquetes que deben actualizarse.
- En el símbolo del sistema, introduzca "N" para no (no actualizar).
Resultado esperado:
Operation aborted
- Ejecute el siguiente comando para confirmar que tdnf se ejecutó.
cat /var/log/cloud-init-output.log | grep -i tdnf
- Escriba "exit" para cerrar la sesión de SSH y, a continuación, vuelva a escribir "exit".
Mantenimiento de una ClusterClass personalizada
Después de actualizar el Servicio TKG a una nueva versión, debe asegurarse de que la ClusterClass personalizada derivada de la ClusterClass predeterminada de la versión de Servicio TKG anterior se actualice con los cambios para la ClusterClass predeterminada que se enviaron con la nueva versión de Servicio TKG.
- Actualizar la versión de Servicio TKG.
Por ejemplo, actualice de Servicio TKG v3.0 a v3.1.
Consulte Instalar y actualizar Servicio TKG.
- Cree una nueva ClusterClass personalizada siguiendo las instrucciones de este documento.
Cree manualmente una versión de la nueva ClusterClass personalizada anexando a su nombre la versión de Servicio TKG, como
ccc-3.1
. - Agregue las variables y las revisiones personalizadas de la ClusterClass personalizada anterior a la nueva ClusterClass personalizada.
Para ello, abra
cat ccc.yaml
y copie las variables y las revisiones personalizadas desde ese archivo accc-3.1.yaml
. - Aplique la nueva ClusterClass personalizada y espere a que la reconciliación se realice correctamente.
- Para actualizar los clústeres de TKG mediante la ClusterClass personalizada anterior al nuevo ClusterClass personalizado, edite el campo
spec.topology.class
en el objeto Cluster.
ClusterClass no administrada
Para vSphere 8 U2 y posterior, hay una anotación que puede agregar a una ClusterClass personalizada si no desea que la controladora TKG la administre. Tenga en cuenta que, si agrega esta anotación, será responsable de crear manualmente todos los objetos de Kubernetes subyacentes, como certificados, secretos, etc. Consulte la documentación de ClusterClass personalizada de vSphere 8 U1 para obtener instrucciones sobre cómo hacerlo.
Clave de anotación | Valor |
---|---|
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: ...