Si no puede aprovisionar un clúster de TKGS, revise esta lista de errores comunes para solucionar problemas.

Comprobar registros de la API del clúster

Si no puede crear un clúster de TKG, compruebe que CAPW/V funcione.

El controlador CAPW/V es la implementación específica de la infraestructura de la API del clúster. CAPW/V se habilita a través de Supervisor. CAPW/V es un componente de TKG y es responsable de administrar el ciclo de vida de los clústeres de TKG.

CAPW/V es responsable de crear y actualizar la red virtual. La creación de los nodos del clúster solo puede avanzar si la red virtual está lista. ¿El flujo de trabajo de creación del clúster pasó por esta fase?

CAPW/V es responsable de crear y actualizar el servicio de máquina virtual. ¿Se creó correctamente el servicio de máquina virtual? ¿Obtuvo la dirección IP externa? ¿El flujo de trabajo de creación del clúster pasó por esta fase?

Para responder estas preguntas, compruebe el registro de la API del clúster de la siguiente manera:
kubectl config use-context tkg-cluster-ns
kubectl get pods -n vmware-system-capw  | grep capv-controller
kubectl logs -n vmware-system-capw -c manager capv-controller-manager-...

Error de validación de la especificación del clúster

De acuerdo con la especificación de YAML, se permite el uso del carácter de espacio en un nombre de clave. Es una cadena escalar que contiene un espacio y no requiere comillas.

Sin embargo, la validación de TKGS no permite el uso del carácter de espacio en los nombres de clave. En TKGS, un nombre de clave válido solo debe constar de caracteres alfanuméricos, un guion (como key-name), un guion bajo (como KEY_NAME) o un punto (como key.name).

Si utiliza el carácter de espacio en un nombre de clave en la especificación del clúster, el clúster de TKGS no se implementa. El registro vmware-system-tkg-controller-manager muestra el siguiente mensaje de error:

Invalid value: \"Key Name\": a valid config key must consist of alphanumeric characters, '-', '_' or '.' (e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+')"

Para solucionar el error, elimine el carácter de espacio por completo o reemplácelo por uno compatible.

Errores al aplicar el YAML del clúster de TKG

Si recibe mensajes de error al aplicar el YAML del clúster de TKG, solucione los problemas de la siguiente manera.
La red del clúster no está en el estado correcto
Comprender el flujo de trabajo de aprovisionamiento de clústeres de TKG:
  • CAPV crea un objeto de red virtual para cada red del clúster de TKG.
  • Si Supervisor está configurado con redes NSX, NCP detecta los objetos de red virtual y crea un enrutador de nivel 1 de NSX y un segmento de NSX para cada red virtual.
  • CAPV comprueba el estado de la red virtual y, cuando está lista, continúa con el paso siguiente del flujo de trabajo.

La controladora de servicio de máquina virtual observa los objetos personalizados creados por CAPV y utiliza esas especificaciones para crear y configurar las máquinas virtuales que conforman el clúster de TKG.

NSX Container Plugin (NCP) es una controladora que detecta los recursos de red agregados a etcd a través de la API de Kubernetes y organiza la creación de los objetos correspondientes en NSX.

Todas estas controladoras se ejecutan como pods de Kubernetes en el plano de control de Supervisor. Para solucionar problemas de red, compruebe el registro de la controladora CAPV, el registro del servicio de máquina virtual y el registro de NCP.

Compruebe los registros del contenedor, en los que name-XXXX es el nombre único del pod cuando ejecuta lo siguiente:
kubectl get pods -A
kubectl logs pod/name-XXXXX -c pod-name -n namesapce
Recuento de nodos de plano de control no válido

El clúster de TKG en Supervisor admite 1 o 3 nodos de plano de control. Si introduce otra cantidad de réplicas, se produce un error en el aprovisionamiento del clúster.

Clase de almacenamiento no válida para la máquina virtual de plano de control o de trabajo
Ejecute el siguiente comando:
kubectl describe ns <tkg-clsuter-namesapce>

Asegúrese de que se haya asignado una clase de almacenamiento al espacio de nombres en el que intenta crear el clúster de TKG. Debe haber una cuota de recursos en el espacio de nombres de vSphere que haga referencia a esa clase de almacenamiento, la cual debe existir en Supervisor.

Asegúrese de que el nombre coincida con la clase de almacenamiento presente en Supervisor. Ejecute kubectl get storageclasses Supervisor como administrador de vSphere. Es posible que WCP modifique el nombre al aplicar el perfil de almacenamiento en Supervisor (por ejemplo, los guiones se convierten en guiones bajos).

Clase de máquina virtual no válida

Asegúrese de que el valor proporcionado en el YAML del clúster coincida con una de las clases de máquina virtual que devuelve kubectl get virtualmachineclass. Un clúster de TKG solo puede utilizar clases enlazadas. Una clase de máquina virtual enlazada es aquella que se agregó al espacio de nombres de vSphere.

El comando kubectl get virtualmachineclasses devuelve todas las clases de máquina virtual en Supervisor, pero solo se pueden utilizar las que están enlazadas.

No se pueden encontrar las distribuciones TKR
Si aparece un error similar al siguiente:
“Error from server (unable to find Kubernetes distributions): 
admission webhook “version.mutating.tanzukubernetescluster.run.tanzu.vmware.com” 
denied the request: unable to find Kubernetes distributions”

Probablemente se trate de un problema de la biblioteca de contenido. Para enumerar lo que está disponible, utilice el comando kubectl get virtualmachineimages -A. El resultado es lo que está disponible, sincronizado o cargado en la biblioteca de contenido.

Para TKG en Supervisor, hay nuevos nombres de TKR que son compatibles con la nueva API de TKR. Debe asegurarse de asignar el nombre correcto a cada TKR en la biblioteca de contenido.

Nombre en la biblioteca de contenido: photon-3-amd64-vmi-k8s-v1.23.8---vmware.2-tkg.1-zshippable

Nombre correspondiente en la especificación del clúster de TKG: version: v1.23.8+vmware.2-tkg.1-zshippable

Se aplica el YAML de TKG, pero no se crean máquinas virtuales

Si el YAML del clúster de TKG 2.0 es válido y se aplica, pero no se crean las máquinas virtuales del nodo, solucione el problema de la siguiente manera.
Comprobar los recursos CAPI/CAPV

Comprobar si TKG creó los recursos de nivel CAPI/CAPV.

  • Compruebe si CAPV creó los recursos de máquina virtual.
  • Consulte los registros de operador de máquina virtual para ver por qué no se creó la máquina virtual; por ejemplo, es posible que se haya producido un error en la implementación de OVF debido a la falta de recursos en el host ESX.
  • Compruebe los registros de operador de máquina virtual y CAPV.
  • Compruebe los registros de NCP. NCP es responsable de obtener la red virtual, la interfaz de la red virtual y el equilibrador de carga para el plano de control. Si se produce algún error relacionado con esos recursos, puede ser un problema.
Error de servicios de máquina virtual
Error de servicios de máquina virtual
  • Ejecute kubectl get virtualmachineservices en el espacio de nombres.
  • ¿Se creó un servicio de máquina virtual?
  • Ejecute kubectl describe virtualmachineservices en el espacio de nombres.
  • ¿Hay errores notificados en el servicio de máquina virtual?
Error de red virtual

Ejecute kubectl get virtualnetwork en el espacio de nombres.

¿Se creó la red virtual para este clúster?

Ejecute kubectl describe virtual network en el espacio de nombres.

¿Se creó la interfaz de red virtual para la máquina virtual?

El plano de control del clúster de TKG no se está ejecutando

Si el plano de control de TKG no se está ejecutando, compruebe si los recursos estaban listos cuando se produjo el error. ¿Lo que no está activo es el plano de control de un nodo de unión o un nodo de inicialización? Además, compruebe si el identificador del proveedor no está establecido en el objeto de nodo.
Comprobar si los recursos estaban listos cuando se produjo el error

Además de la búsqueda de registros, la comprobación del estado "Equilibrador de carga del plano de control" de los objetos relacionados lo ayudará a comprender si los recursos estaban listos cuando se produjo el error. Consulte la solución de problemas de red.

¿Lo que no está activo es el plano de control de un nodo de unión o un nodo de inicialización?

Las uniones de nodos a veces no funcionan correctamente. Consulte los registros de nodo de una determinada máquina virtual. Es posible que al clúster le falten nodos de trabajo y de plano de control si el nodo de inicialización no se activa correctamente.

No está establecido el identificador del proveedor en el objeto de nodo

Si se creó la máquina virtual, compruebe si tiene direcciones IP y, a continuación, consulte los registros de cloud-init (los comandos kubeadm se ejecutan correctamente).

Consulte los registros de la controladora CAPI para verificar si hay algún problema. Para comprobarlo, utilice los kubectl get nodes en el clúster de TKG y, a continuación, verifique si existe el identificador del proveedor en el objeto de nodo.

No se crean nodos de trabajo de TKG

Si se crean el clúster de TKG y las máquinas virtuales del plano de control, pero no se crean trabajos ni otros objetos de máquina virtual, pruebe lo siguiente:
kubectl describe cluster CLUSTER-NAME

Compruebe si hay recursos de máquina virtual en el espacio de nombres. ¿Se crearon otros?

Si no es así, consulte los registros de CAPV para ver por qué no se crean los otros datos de arranque de objetos de máquina virtual que no están disponibles.

Si CAPI no puede comunicarse con el plano de control del clúster de TKG a través del equilibrador de carga, ya sea NSX con la IP de máquina virtual del nodo o VDS con el equilibrador de carga externo, obtenga el kubeconfig del clúster de TKG mediante el secreto en el espacio de nombres:

Utilice el secreto en el espacio de nombres para obtener el archivo kubeconfig del clúster de TKG:
kubectl get secret -n <namespace> <tkg-cluster-name>-kubeconfig -o jsonpath='{.data.value}' | base64 -d 
> tkg-cluster-kubeconfig; kubectl --kubeconfig tkg-cluster-kubeconfig get pods -A

Si aparece el error de conexión rechazada, es probable que el plano de control no se haya inicializado correctamente. Si se agota el tiempo de espera de E/S, compruebe la conectividad con la dirección IP en el archivo kubeconfig.

NSX con equilibrador de carga integrado:

  • Compruebe que el equilibrador de carga de plano de control esté activo y que se pueda acceder a él.
  • Si el equilibrador de carga no tiene IP, consulte los registros de NCP y la interfaz de usuario de NSX-T para ver si los componentes relacionados están en los estados correctos. (El equilibrador de carga de NSX-T, el servidor virtual y el grupo de servidores deben estar en el estado correcto).
  • Si el equilibrador de carga tiene IP, pero no se puede acceder a él (curl -k https://<LB- VIP>:6443/healthz debería devolver un error no autorizado).

    Si el tipo de equilibrador de carga de la IP externa del servicio se encuentra en estado 'pendiente', compruebe que el clúster de TKG pueda comunicarse con la API del supervisor de Kubernetes a través de la VIP del LB del supervisor. Asegúrese de que no haya ninguna superposición de direcciones IP.

Comprobar si los nodos del plano de control de TKG están en buen estado:
  • Compruebe si el plano de control del clúster de TKG informa de algún error (por ejemplo, no se puede crear el nodo con el identificador del proveedor).
  • El proveedor de nube del clúster de TKG no marcó el nodo con el identificador del proveedor correcto, por lo que CAPI no puede comparar el identificador del proveedor en el nodo del clúster invitado con el recurso de máquina en el clúster supervisor para hacer la comprobación.
Acceda mediante SSH a la máquina virtual de plano de control o utilice el archivo kubeconfig del clúster de TKG para comprobar si el pod del proveedor de nube de TKG se está ejecutando o registra errores. Consulte Conectarse a clústeres de Servicio TKG como usuario del sistema y administrador de Kubernetes.
kubectl get po -n vmware-system-cloud-provider
kubectl logs -n vmware-system-cloud-provider <pod name>

Si VMOP no concilió VirtualMachineService correctamente, compruebe el registro del operador de máquinas virtuales.

Si NCP tenía problemas para crear recursos de NSX-T, compruebe el registro de NCP.

Si el plano de control no se inicializó correctamente, determine la IP de la máquina virtual. El estado debe contener la IP de la máquina virtual.
kubectl get virtualmachine -n <namespace> <TKC-name>-control-plane-0 -o yaml
ssh vmware-system-user@<vm-ip> -i tkc-cluster-ssh
Compruebe si kubeadm registró algún error.
cat /var/log/cloud-init-output.log | less

El clúster de TKG aprovisionado se detuvo en la fase "Crear"

Ejecute los siguientes comandos para comprobar el estado del clúster.

kubectl get tkc -n <namespace>
kubectl get cluster -n <namespace> 
kubectl get machines -n <namespace>
KubeadmConfig estaba presente, pero CAPI no pudo encontrarlo. Se comprobó si el token de vmware-system-capv tenía los permisos adecuados para consultar kubeadmconfig.
$kubectl --token=__TOKEN__ auth can-i get kubeadmconfig 
yes
Es posible que la memoria caché de tiempo de ejecución de la controladora no se estaba actualizando. Es probable que las memorias caché del reloj CAPI estén obsoletas y no detecten los nuevos objetos. Si es necesario, reinicie capi-controller-manager para resolver el problema.
kubectl rollout restart deployment capi-controller-manager -n vmware-system-capv

espacio de nombres de vSphere se detuvo en la fase "Finalización"

Compruebe que TKR, Supervisor y vCenter estén sincronizados desde una perspectiva de compatibilidad de versión.

Los espacios de nombres solo se pueden eliminar cuando, a su vez, se eliminan todos los recursos dentro de ellos.
kubectl describe namespace NAME

Se encontró el siguiente error: "Error del servidor (no se pueden encontrar las distribuciones de Kubernetes): webhook de admisión "version.mutating.tanzukubernetescluster.run.tanzu.vmware.com" rechazó la solicitud: no se pueden encontrar las distribuciones de Kubernetes".

Compruebe las imágenes de máquina virtual en vCenter.
kubectl get virtualmachineimages -A