Esta sección incluye sugerencias para ayudarle a solucionar problemas de los clústeres de carga de trabajo.
Para obtener información sobre la solución de problemas de implementaciones de clústeres de administración independientes, consulte Solucionar problemas del clúster de administración. Puede encontrar una solución alternativa adicional para los problemas conocidos de esta versión en las Notas de la versión o en los Artículos de la base de conocimientos de VMware.
kubectl
Para limpiar su estado kubectl
eliminando algunos o todos sus usuarios, contextos y clústeres:
Abra el archivo ~/.kube/config
.
Para los objetos user
que desea eliminar, ejecute:
kubectl config unset users.USER-NAME
Donde USER-NAME
es la propiedad name
de cada objeto user
de nivel superior, tal como aparece en los archivos config
.
Para los objetos context
que desea eliminar, ejecute:
kubectl config unset contexts.CONTEXT-NAME
Donde CONTEXT-NAME
es la propiedad name
de cada objeto context
de nivel superior, como se indica en los archivos config
, normalmente con el formato contexts.mycontext-admin@mycontext
.
Para los objetos cluster
que desea eliminar, ejecute:
kubectl config unset clusters.CLUSTER-NAME
Donde CLUSTER-NAME
es la propiedad name
de cada objeto cluster
de nivel superior, tal como aparece en los archivos config
.
Si los archivos config
muestran el contexto actual como un clúster que eliminó, desconfigure el contexto:
kubectl config unset current-context
Problema
Si intenta instalar Grafana generando un archivo de configuración predeterminado de Grafana, se produce un error en la instalación con error: Secret in version "v1" cannot be handled as a Secret: illegal base64 data at input byte 4 (reason: BadRequest)
.
Solución
Cree el secreto manualmente y utilice el mismo archivo YAML sin la etiqueta secreta para instalar Grafana.
grafana.secret.*
del archivo de configuración generado.Cree un secreto manualmente.
kubectl create secret generic grafana -n tanzu-system-dashboards --from-literal=admin=admin
Implemente el paquete.
tanzu package install grafana \
--package grafana.tanzu.vmware.com \
--version AVAILABLE-PACKAGE-VERSION \
--values-file grafana-data-values.yaml \
--namespace TARGET-NAMESPACE
tanzu package repository
Problema
Se produce un error en el comando tanzu package repository
.
Solución
Ejecute kubectl get pkgr REPOSITORY-NAME -n NAMESPACE -o yaml
para obtener detalles sobre el error.
Donde:
REPOSITORY-NAME
es el nombre del repositorio del paquete.NAMESPACE
es el espacio de nombres de destino del repositorio de paquetes.El comando tanzu package repository
puede generar un error similar al siguiente:
Error | Descripción | Solución |
---|---|---|
NOT_FOUND |
La ruta de la URL del repositorio no es válida. | Asegúrese de que se pueda acceder a la URL del repositorio de paquetes desde el clúster. |
UNKNOWN o UNAUTHORIZED |
Este error puede producirse al intentar conectarse al repositorio. | |
Ownership |
Ya hay un repositorio con la misma URL de repositorio de paquetes instalado en el clúster. | Realice una de las siguientes opciones:
|
tanzu package installed
Problema
Se produce un error en el comando tanzu package installed
.
Solución
Ejecute kubectl get pkgi INSTALLED-PACKAGE-NAME -n NAMESPACE -o yaml
para obtener detalles sobre el error.
Donde:
INSTALLED-PACKAGE-NAME
es el nombre del paquete instalado.NAMESPACE
es el espacio de nombres del paquete instalado.El comando tanzu package installed
puede generar un error similar al siguiente:
Error | Descripción | Solución |
---|---|---|
Ownership |
Ya hay un paquete con el mismo nombre instalado en el clúster. | Ejecute tanzu package installed list -A para comprobar si el paquete que desea instalar ya está instalado. Si es así, es posible que desee utilizar el paquete ya instalado, actualizar su versión o eliminar el paquete para poder continuar con la instalación. |
Evaluating starlark template |
Este error puede producirse cuando falta el valor de configuración indicado. | Ejecute tanzu package available get AVAILABLE-PACKAGE-NAME/VERSION -n NAMESPACE –values-schema para ver todos los valores de configuración disponibles y proporcionar los valores de configuración necesarios al comando tanzu package install . |
Failed to find a package with name PACKAGE-NAME in namespace NAMESPACE |
El paquete especificado y los metadatos del paquete no están disponibles en el espacio de nombres de destino | Asegúrese de que el paquete especificado aparezca en los resultados de tanzu package available list AVAILABLE-PACKAGE-NAME -n NAMESPACE . Si no es así, agregue el repositorio de paquetes que contiene el paquete al espacio de nombres de destino. |
Namespace NAMESPACE not found |
El espacio de nombres en el que desea instalar el paquete no existe. | En TKG v2.1 y posteriores, los comandos tanzu package se basan enkctrl y ya no son compatibles con la marca —create-namespace . Antes de instalar un paquete o un repositorio de paquetes, el espacio de nombres de destino ya debe existir. |
Provided service account SERVICE-ACCOUNT-NAME is already used by another package in namespace NAMESPACE |
Otro paquete instalado ya utiliza la cuenta de servicio proporcionada con la marca service-account-name . |
Permita que el complemento de paquete cree la cuenta de servicio por usted o seleccione otro nombre de cuenta de servicio. |
Problema
Cuando se ejecuta kubectl get pods -A
en el clúster creado, algunos pods permanecen en estado pendiente.
Ejecute kubectl describe pod -n pod-namespace pod-name
en un pod afectado y vea el siguiente evento:
n node(s) had taint {node.cloudprovider.kubernetes.io/uninitialized: true}, that the pod didn't tolerate
Solución
Asegúrese de que haya reglas de firewall y conectividad en lugar de garantizar la comunicación entre el clúster y vCenter. Para conocer los requisitos de protocolos y puertos de firewall, consulte las listas de vSphere 8 en Puertos y protocolos de VMware.
StorageClass
predeterminado, se produce un error de conciliación en los clústeres de carga de trabajoProblema
Si se modifican las propiedades de un objeto StorageClass
predeterminado incluido en TKG, se produce un error de conciliación de paquetes en los clústeres de carga de trabajo que utilizan la clase de almacenamiento.
Solución:
Para personalizar una clase de almacenamiento, cree una nueva definición de StorageClass
con un name
diferente, en lugar de modificar la definición de objeto predeterminada, y vuelva a configurar el clúster para que use la nueva clase de almacenamiento.
Problema
Al ejecutar tanzu cluster create
se produce un error de tiempo de espera similar al siguiente:
I0317 11:11:16.658433 clusterclient.go:341] Waiting for resource my-cluster of type *v1beta1.Cluster to be up and running
E0317 11:26:16.932833 common.go:29]
Error: unable to wait for cluster and get the cluster kubeconfig: error waiting for cluster to be created (this may take a few minutes): cluster control plane is still being initialized
E0317 11:26:16.933251 common.go:33]
Solución
Utilice la marca --timeout
para especificar el tiempo de espera para que se complete la creación del clúster. El tiempo de espera predeterminado es de 30 minutos.
tanzu cluster create --timeout TIME
Donde TIME
es el tiempo, en minutos para que se complete la creación del clúster. Por ejemplo, 60m
.
Problema
tanzu cluster delete
no puede eliminar el clúster de carga de trabajo.
Para eliminar el clúster manualmente, consulte las dos soluciones que aparecen a continuación.
Solución 1
En el clúster de destino, elimine el objeto StatefulSet para AKO, que se ejecuta en el espacio de nombres avi-system
:
kubectl delete sts ako -n avi-system
Solución 2
Inicie sesión en el clúster y elimine las máquinas de trabajo:
kubectl delete machine worker1 worker2
En vCenter, apague y elimine las máquinas virtuales del nodo de trabajo.
Edite las máquinas del plano de control y elimine el vínculo finalizador:
finalizers:
- machine.cluster.x-k8s.io
Elimine las máquinas del plano de control:
kubectl delete machine controlplane1 controlplane2
Desde vCenter, apague y elimine las máquinas virtuales del plano de control
Problema
La configuración de la unidad de transmisión máxima (MTU) diferente en los nodos de trabajo de un clúster provoca que se agote el tiempo de espera del protocolo de enlace TLS.
Los registros de journalctl -u kubelet
en un nodo muestran un error de comunicación con el servidor de API. Al ejecutar kubectl get nodes
se muestra que los nodos de trabajo se han movido al estado No listo (NotReady).
Puede volver a confirmar el problema haciendo lo siguiente:
ip link
y compare los valores de MTU de la interfaz eth0
. Si no coinciden, es un indicio de este problema.Confirme que los siguientes comandos fallan al ejecutarlos en una máquina, que se encuentra en el estado de nodo No listo (NotReady):
openssl s_client -connect IP:PORT
curl IP:PORT -k /healthz
Donde IP
y PORT
es la dirección IP y el número de puerto del endpoint del plano de control del servidor de API de Kubernetes. De forma predeterminada, PORT
se establece en 6443
.
Solución
Revise los daemonsets con privilegios implementados en el clúster y revise los daemonsets de proveedores de terceros que puedan modificar las configuraciones de red del sistema operativo del host. Es posible que deba consultar al proveedor de software para averiguarlo. Los daemonsets que pueden modificar el sistema operativo del host tendrán .spec.template.spec.hostNetwork: true
o tendrán privileged: true
o NET_ADMIN
en el campo de capacidades de cualquier contexto de seguridad de contenedor.
Si desea configurar ajustes de MTU de gran tamaño, aprovisione el clúster con un plano de control con un valor de MTU de mayor tamaño.
Asegúrese de que la red del clúster permita la detección de MTU de ruta de acceso o de que tenga fijación de MSS de TCP para permitir el dimensionamiento de MTU correcto en servicios externos, como registros de contenedores o vCenter.
Asegúrese de configurar los mismos ajustes de MTU para todos los nodos de un clúster.
La configuración del firewall de red debe permitir paquetes del tamaño de MTU configurado.
Problema
Si utiliza NSX Advanced Load Balancer para cargas de trabajo (AVI_ENABLE
) o el plano de control (AVI_CONTROL_PLANE_HA_PROVIDER
), es posible que el controlador AVI no pueda distinguir entre clústeres con nombres idénticos.
Solución:
Establezca un valor CLUSTER_NAME
único para cada clúster. No cree varios clústeres de carga de trabajo que tengan el mismo CLUSTER_NAME
y que también estén en el mismo espacio de nombres del clúster de administración, tal y como establece su valor NAMESPACE
.
Problema
En Azure vSphere Solution (AVS), la eliminación de volúmenes persistentes (PV) de vSphere CSI puede producir un error. Para eliminar un PV, se requiere el permiso cns.searchable
. La cuenta de administrador predeterminada para AVS, <[email protected]>
, no se crea con este permiso. Para obtener más información, consulte Funciones y privilegios de vSphere.
Solución
Para eliminar un PV de vSphere CSI en AVS, póngase en contacto con el soporte de Azure.
Problema
Los comandos tanzu cluster delete
y tanzu management-cluster delete
pueden dejar de responder con los clústeres que utilizan recursos de redes creados por AWS Cloud Controller Manager independientemente del proceso de implementación de Tanzu Kubernetes Grid. Estos recursos pueden incluir equilibradores de carga y otros servicios de redes, como se indica en El controlador de servicios en la documentación del proveedor de nube de Kubernetes AWS.
Para obtener más información, consulte el problema de la API del clúster Purgar clústeres de carga de trabajo del servicio Type=Loadbalancer en el desmontaje.
Solución
Utilice kubectl delete
para eliminar servicios del tipo LoadBalancer
del clúster. O bien, si se produce un error, utilice la consola de AWS para eliminar manualmente cualquier objeto LoadBalancer
y SecurityGroup
creado para este servicio por el administrador de controladores de nube.
PrecauciónNo elimine balanceadores de carga o grupos de seguridad administrados por Tanzu, que tienen las etiquetas
key: sigs.k8s.io/cluster-api-proider-aws/cluster/CLUSTER-NAME
,value: owned
.
Problema
Con un clúster de carga de trabajo de Azure en un grupo de recursos no administrado, cuando el controlador CSI de Azure crea un volumen persistente (PV) que utiliza una cuenta de almacenamiento con un endpoint privado, crea un recurso privateEndpoint
y un recurso vNet
que no se eliminan cuando se elimina el PV. Como resultado, al eliminar el clúster, se produce un error como subnets failed to delete. err: failed to delete resource ... Subnet management-cluster-node-subnet is in use
.
Solución:
Antes de eliminar el clúster de Azure, elimine manualmente la interfaz de red del endpoint privado de la cuenta de almacenamiento:
networkinterfaces
, seleccione el recurso de NIC que no se puede eliminar.