En esta página, se muestra cómo resolver problemas relacionados con la instalación o actualización de clústeres de GKE en Bare Metal.
Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud.Problemas de instalación
Las siguientes secciones pueden ayudarte a solucionar problemas con la instalación de GKE en Bare Metal.
Mensajes de error transitorios
El proceso de instalación de GKE en Bare Metal es un bucle de conciliación continuo. Como resultado, es posible que veas mensajes de error transitorios en el registro durante la instalación.
Siempre que la instalación se complete con éxito, estos errores pueden ignorarse sin problemas. La siguiente es una lista de mensajes de registro de errores transitorios típicos:
Internal error occurred: failed calling webhook "webhook.cert-manager.io": Post
https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s:
dial tcp IP_ADDRESS:443: connect: connection refused
Internal error occurred: failed calling webhook "vcluster.kb.io": Post
https://webhook-service.kube-system.svc:443/validate-baremetal-cluster-gke-io-v1-cluster?timeout=30s:
dial tcp IP_ADDRESS:443: connect: connection refused
Failed to register cluster with GKE Hub; gcloud output: error running command
'gcloud container fleet memberships register CLUSTER_NAME --verbosity=error --quiet':
error: exit status 1, stderr: 'ERROR: (gcloud.container.hub.memberships.register)
Failed to check if the user is a cluster-admin: Unable to connect to the server: EOF
Get
https://127.0.0.1:34483/apis/infrastructure.baremetal.cluster.gke.io/v1/namespaces/cluster-
cluster1/baremetalmachines: dial tcp 127.0.0.1:34483: connect: connection refused"
Create Kind Cluster "msg"="apply run failed" "error"="unable to recognize \"/tmp/kout088683152\": no matches for kind \"NetworkLogging\" in version \"networking.gke.io/v1alpha1\""
Create Kind Cluster "msg"="apply run failed" "error"="unable to recognize \"/tmp/kout869681888\": no matches for kind \"Provider\" in version \"clusterctl.cluster.x-k8s.io/v1alpha3\""
Si la clave de tu cuenta de servicio de Google Cloud venció, verás los siguientes
mensajes de error de bmctl
:
Error validating cluster config: 3 errors occurred:
* GKEConnect check failed: Get https://gkehub.googleapis.com/v1beta1/projects/project/locations/global/memberships/admin: oauth2: cannot fetch token: 400 Bad Request
Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
* ClusterOperations check failed: Post https://cloudresourcemanager.googleapis.com/v1/projects/project:testIamPermissions?alt=json&prettyPrint=false: oauth2: cannot fetch token: 400 Bad Request
Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
* GCR pull permission for bucket: artifacts.anthos-baremetal-release.appspot.com failed: Get https://storage.googleapis.com/storage/v1/b/artifacts.anthos-baremetal-release.appspot.com/iam/testPermissions?alt=json&permissions=storage.objects.get&permissions=storage.objects.list&prettyPrint=false: oauth2: cannot fetch token: 400 Bad Request
Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
Debes generar una clave de cuenta de servicio nueva.
Usa el clúster de arranque para depurar problemas
Cuando GKE en Bare Metal crea clústeres autoadministrados (de administrador, híbrido o independiente), implementa un clúster de Kubernetes en Docker (tipo) a fin de alojar de forma temporal los controladores de Kubernetes necesarios para crear clústeres. Este clúster transitorio se denomina clúster de arranque. El administrador o clúster híbrido crea y actualiza los clústeres de usuario sin usar un clúster de arranque.
Si ya existe un clúster de tipo en tu implementación cuando intentas realizar la instalación, GKE en Bare Metal borra el clúster de tipo existente. La eliminación solo ocurre después de que la instalación o actualización se realiza de forma correcta.
Para conservar el clúster de tipo existente, incluso después de que se complete de forma correcta, usa la marca --keep-bootstrap-cluster
de bmctl
.
GKE en Bare Metal crea un archivo de configuración para el clúster de arranque en WORKSPACE_DIR/.kindkubeconfig
. Solo puedes conectarte al clúster de arranque durante la creación y actualización del clúster.
El clúster de arranque necesita acceder a un repositorio de Docker para extraer imágenes. El registro se establece de forma predeterminada en Container Registry, a menos que uses un registro privado. Durante la creación del clúster, bmctl
crea los siguientes archivos:
bmctl-workspace/config.json
: Contiene las credenciales de la cuenta de servicio de Google Cloud para el acceso al registro. Las credenciales se obtienen del campogcrKeyPath
en el archivo de configuración del clúster.bmctl-workspace/config.toml
: Contiene la configuración en containerd en el clúster de tipo.
Examina los registros del clúster de arranque
Para depurar el clúster de arranque, puedes realizar los siguientes pasos:
- Conectarse al clúster de arranque durante la creación y actualización del clúster
- Obtén los registros del clúster de arranque.
Puedes encontrar los registros en la máquina que usas para ejecutar bmctl
en las siguientes carpetas:
bmctl-workspace/CLUSTER_NAME/log/create-cluster-TIMESTAMP/bootstrap-cluster/
bmctl-workspace/CLUSTER_NAME/log/upgrade-cluster-TIMESTAMP/bootstrap-cluster/
Reemplaza CLUSTER_NAME
y TIMESTAMP
por el nombre de tu clúster y la hora del sistema correspondiente.
Para obtener los registros directamente del clúster de arranque, puedes ejecutar el siguiente comando durante la creación y la actualización del clúster:
docker exec -it bmctl-control-plane bash
El comando abre una terminal dentro del contenedor del plano de control de bmctl que se ejecuta en el clúster de arranque.
Para inspeccionar los registros kubelet
y containerd
, usa los siguientes comandos y busca errores o advertencias en el resultado:
journalctl -u kubelet
journalctl -u containerd
Problemas de actualización del clúster
Cuando actualizas GKE en clústeres de Bare Metal, puedes supervisar el progreso y verificar el estado de tus clústeres y nodos.
- Si tienes problemas durante una actualización, intenta determinar en qué etapa se produce la falla. Para obtener más información sobre lo que sucede con un clúster durante el proceso de actualización, consulta Ciclo de vida y etapas de las actualizaciones de clústeres.
- Para obtener más información sobre el impacto de un problema durante las actualizaciones del clúster, consulta Comprende el impacto de las fallas en GKE en Bare Metal.
La siguiente guía puede ayudarte a determinar si la actualización continúa con normalidad o si hay un problema.
Cómo supervisar el progreso de la actualización
Usa el comando kubectl describe cluster
para ver el estado de un clúster durante el proceso de actualización:
kubectl describe cluster CLUSTER_NAME \
--namespace CLUSTER_NAMESPACE \
--kubeconfig ADMIN_KUBECONFIG
Reemplaza los siguientes valores:
CLUSTER_NAME
: Es el nombre del clúster.CLUSTER_NAMESPACE
: Es el espacio de nombres del clúster.ADMIN_KUBECONFIG
: Es el archivo kubeconfig de administrador.- De forma predeterminada, los clústeres de administrador, independientes y híbridos usan una actualización in situ.
Si usas la marca
--use-bootstrap=true
con el comandobmctl upgrade
, la operación de actualización usa un clúster de arranque. Para supervisar el progreso de la actualización cuando se usa un clúster de arranque, especifica la ruta de acceso al archivo kubeconfig del clúster de arranque,.kindkubeconfig
. Este archivo se encuentra en el directorio del lugar de trabajo.
- De forma predeterminada, los clústeres de administrador, independientes y híbridos usan una actualización in situ.
Si usas la marca
Observa la sección Status
del resultado, que muestra una agregación del estado de actualización del clúster. Si el clúster informa un error, usa las siguientes secciones para solucionar el problema.
Verifica si los nodos están listos
Usa el comando kubectl get nodes
para ver el estado de los nodos de un clúster durante el proceso de actualización:
kubectl get nodes --kubeconfig KUBECONFIG
Para verificar si un nodo completó correctamente el proceso de actualización, consulta las columnas VERSION
y AGE
en la respuesta del comando. VERSION
es la versión de Kubernetes para el clúster. Para ver la versión de Kubernetes de una versión determinada de GKE en Bare Metal, consulta la tabla en Política de compatibilidad de versiones.
Si el nodo muestra NOT READY
, intenta conectar el nodo y verificar el estado de kubelet:
systemctl status kubelet
También puedes revisar los registros de kubelet:
journalctl -u kubelet
Revisa la salida del estado de kubelet y los registros de los mensajes que indican por qué el nodo tiene un problema.
Verifica qué nodo se está actualizando
Para verificar qué nodo del clúster está en proceso de actualización, usa el comando kubectl get baremetalmachines
:
kubectl get baremetalmachines --namespace CLUSTER_NAMESPACE \
--kubeconfig ADMIN_KUBECONFIG
Reemplaza los siguientes valores:
CLUSTER_NAMESPACE
: Es el espacio de nombres del clúster.ADMIN_KUBECONFIG
: Es el archivo kubeconfig de administrador.- Si se usa un clúster de arranque para una actualización de administrador, híbrida o independiente, especifica el archivo kubeconfig del clúster de arranque (
bmctl-workspace/.kindkubeconfig
).
- Si se usa un clúster de arranque para una actualización de administrador, híbrida o independiente, especifica el archivo kubeconfig del clúster de arranque (
En el siguiente resultado de ejemplo, se muestra que el nodo que se está actualizando tiene un ABM VERSION
diferente al DESIRED ABM VERSION
:
NAME CLUSTER READY INSTANCEID MACHINE ABM VERSION DESIRED ABM VERSION
10.200.0.2 cluster1 true baremetal://10.200.0.2 10.200.0.2 1.13.0 1.14.0
10.200.0.3 cluster1 true baremetal://10.200.0.3 10.200.0.3 1.13.0 1.13.0
Verifica qué nodos se están vaciando actualmente
Durante el proceso de actualización, los nodos se desvían de los Pods y la programación se inhabilita hasta que el nodo se actualice de forma correcta. Para ver qué nodos se desvían de los Pods en este momento, usa el comando kubectl get nodes
:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG | grep "SchedulingDisabled"
Reemplaza USER_CLUSTER_KUBECONFIG
por la ruta de acceso al archivo kubeconfig del clúster de usuario.
La columna STATUS
se filtra con grep
para mostrar solo los nodos que informan SchedulingDisabled
. Este estado indica que los nodos se están vaciando.
También puedes verificar el estado del nodo desde el clúster de administrador:
kubectl get baremetalmachines -n CLUSTER_NAMESPACE \
--kubeconfig ADMIN_KUBECONFIG
Reemplaza los siguientes valores:
CLUSTER_NAMESPACE
: Es el espacio de nombres del clúster.ADMIN_KUBECONFIG
: Es el archivo kubeconfig de administrador.- Si se usa un clúster de arranque para una actualización de administrador, híbrida o independiente, especifica el archivo kubeconfig del clúster de arranque (
bmctl-workspace/.kindkubeconfig
).
- Si se usa un clúster de arranque para una actualización de administrador, híbrida o independiente, especifica el archivo kubeconfig del clúster de arranque (
El nodo que se vacia muestra el estado en la columna MAINTENANCE
.
Comprueba por qué un nodo estuvo en el estado de vaciado durante mucho tiempo
Usa uno de los métodos de la sección anterior para identificar el nodo que se está vaciando mediante el comando kubectl get nodes
. Usa el comando kubectl get
pods
y filtra en este nombre de nodo para ver detalles adicionales:
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=NODE_NAME
Reemplaza NODE_NAME
por el nombre del nodo que se vacía. El resultado muestra una lista de Pods que están atascados
o que tardan en vaciarse. La actualización continúa, incluso con Pods atascados, cuando el proceso de desvío de un nodo tarda más de 20 minutos.
Verifica por qué los Pods no están en buen estado
Las actualizaciones pueden fallar si un Pod contiene direcciones IP del plano de control upgrade-first-node
o upgrade-node
. Por lo general, este comportamiento se debe a que los Pods estáticos no están en buen estado.
Verifica los Pods estáticos con el comando
crictl ps -a
y busca si hay algún Pod de Kubernetes oetcd
que falle. Si tienes Pods con errores, revisa los registros de los Pods para ver por qué fallan.Algunas de las posibilidades de comportamiento del bucle de fallas incluyen las siguientes:
- Los permisos o el propietario de los archivos activados en Pods estáticos no son correctos.
- La conectividad a la dirección IP virtual no funciona.
- Problemas con
etcd
.
Si el comando
crictl ps
no funciona o no muestra nada, verifica el estadokubelet
ycontainerd
. Usa los comandossystemctl status SERVICE
yjournalctl -u SERVICE
para ver los registros.
¿Qué sigue?
- Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud.