Google supervisa y mantiene de forma remota el hardware de Google Distributed Cloud conectado. Para ello, los ingenieros de Google tienen acceso de Secure Shell (SSH) al hardware de Distributed Cloud conectado. Si Google detecta un problema, un ingeniero de Google se comunicará contigo para solucionarlo. Si identificaste un problema, comunícate de inmediato con el equipo de Atención al Cliente de Google para diagnosticarlo y resolverlo.
Actualizaciones de software de Distributed Cloud conectado
En esta sección, se describe cómo usar el Explorador de métricas para verificar si un clúster conectado de Distributed Cloud está en proceso de actualización de software.
En este procedimiento, se usan las siguientes métricas de Monitoring:
Versión actual del clúster (
/edge_cluster/current_cluster_version): Indica la versión actual del software de Distributed Cloud conectado que se ejecuta en el clúster.Versión de destino del clúster (
/edge_cluster/target_cluster_version): Indica la versión de destino de Distributed Cloud Connected a la que se actualiza el clúster.
Para completar los pasos de esta sección, debes cumplir con los siguientes requisitos previos:
- Acceso a la consola de Google Cloud y a tu proyecto de Distributed Cloud conectado Google Cloud
- El rol de IAM Visualizador de Monitoring, que te permite ver las métricas de Monitoring
- (Opcional) Es el valor de
machine_idde la máquina conectada de Distributed Cloud de destino para filtrar los resultados devueltos.
Usa el Explorador de métricas para verificar las versiones de software actuales y de destino del clúster
Navega al Explorador de métricas:
En la consola de Google Cloud , navega a la sección Monitoring.
En el árbol de navegación de la izquierda, haz clic en Explorador de métricas.
Selecciona el tipo de recurso objetivo:
En la página Explorador de métricas, navega a la página Configuración.
Haz clic en Selecciona una métrica.
Usa la barra de búsqueda para buscar el tipo de recurso Cluster. También puedes usar el identificador de recurso completo
edgecontainer.googleapis.com/Cluster.En los resultados que se muestran, haz clic en el tipo de recurso Clúster.
Obtén la versión de software actual del clúster:
En la sección Métrica, busca el valor
current_cluster_version.Selecciona la métrica Tiempo de actividad de la máquina. Su ruta de acceso completa es
edgecontainer.googleapis.com/edge_cluster/current_cluster_version.(Opcional) Filtra por el valor de
machine_idobjetivo con la sección Filtro.
Obtén la versión de software de destino del clúster:
Haz clic en Agregar consulta.
En la sección Métrica, busca el valor
target_cluster_version.Selecciona la métrica Versión del clúster de destino. Su ruta de acceso completa es
edgecontainer.googleapis.com/edge_cluster/target_cluster_version.(Opcional) Filtra por el valor de
machine_idobjetivo con la sección Filtro.
Verifica el estado de actualización del software del clúster en el gráfico que aparece.
Si las líneas Versión actual del clúster y Versión de destino del clúster indican valores diferentes, el clúster se está sometiendo a una actualización de software.
Si las líneas Versión actual del clúster y Versión de destino del clúster indican el mismo valor, el clúster no se está sometiendo a una actualización de software.
Verifica el resultado del paso anterior con el siguiente comando:
gcloud edge-cloud container clusters describe CLUSTER_ID --location=REGION
Reemplaza lo siguiente:
CLUSTER_ID: Es el ID del clúster de destino.REGION: Es la región Google Cloud en la que se creó el clúster.
En el resultado del comando, anota los valores de los siguientes campos:
- Si el valor del campo
statusesUPDATING, el clúster se está actualizando. - Si los valores de los campos
clusterVersionytargetVersionson diferentes, compáralos con los valores que muestra el Explorador de métricas.
Cómo comprender los resultados
En la siguiente tabla, se explican los resultados que muestran el Explorador de métricas y el comando gcloud.
| Estado del clúster | Diagnóstico | Solución |
|---|---|---|
| Correcto Los valores de currentVersion y targetVersion coincidenEl valor de "status" es RUNNING |
El clúster ejecuta la versión de destino del software de Distributed Cloud conectado. | Ninguno |
| Actualización El valor de currentVersion es inferior a targetVersionEl valor de "status" es UPDATING |
El clúster se está actualizando a la versión de destino del software conectado de Distributed Cloud. | Supervisa el clúster en el Explorador de métricas hasta que coincidan los valores de la versión actual y la versión de destino del clúster. |
| Atascado El valor de currentVersion es inferior a targetVersion de forma indefinidaEl valor de "status" es UPDATING de forma indefinida |
No se pudo actualizar a la versión de destino del software conectado de Distributed Cloud en al menos un nodo del clúster. | Verifica la conectividad de la máquina y los registros del sistema, y comunícate con Google para obtener ayuda. |
| Se revierte El valor de currentVersion es mayor que el de targetVersionEl valor de "status" es UPDATING |
luster está revirtiendo a una versión anterior del software de Distributed Cloud conectado. | Comunícate con Google para identificar el motivo de la reversión. |
Si falló la actualización de software en el clúster o si el clúster revirtió a una versión anterior del software, verifica lo siguiente:
- Estado del nodo Verifica que cada máquina física conectada a Distributed Cloud tenga conectividad de red y tiempo de actividad de informes, como se describe en la siguiente sección.
- Períodos de mantenimiento. Verifica si la actualización de software se detuvo debido a un período de exclusión de mantenimiento.
- Registros del sistema Examina los registros del sistema para identificar los posibles motivos de la falla en la actualización del software, como los tiempos de espera de desalojo de Pods.
Si los pasos de resolución que se indican en la tabla no resuelven el problema, comunícate con la Atención al Cliente de Google y proporciona el valor de machine_id de la máquina afectada y la marca de tiempo de la interrupción.
Se reinicia la máquina de Distributed Cloud conectado
En esta sección, se describe cómo usar el Explorador de métricas para verificar si se reinició una máquina física conectada a Distributed Cloud y determinar el motivo del reinicio. Supervisar los reinicios ayuda a determinar si fueron parte de un mantenimiento planificado o el resultado de una falla de hardware o una interrupción de energía.
En este procedimiento, se usan las siguientes métricas de Monitoring:
Tiempo de actividad de la máquina (
/machine/uptime): Indica el tiempo, en segundos, desde el último reinicio.Reinicios de la máquina (
/machine/restart_count): Indica la cantidad total de reinicios de la máquina objetivo desde su implementación.
Para completar los pasos de esta sección, debes cumplir con los siguientes requisitos previos:
- Acceso a la consola de Google Cloud y a tu proyecto de Distributed Cloud conectado Google Cloud
- El rol de IAM Visualizador de Monitoring, que te permite ver las métricas de Monitoring
- (Opcional) Es el valor de
machine_idde la máquina conectada de Distributed Cloud de destino para filtrar los resultados devueltos.
Usa el Explorador de métricas para verificar el tiempo de actividad y el recuento de reinicios de la máquina
Navega al Explorador de métricas:
En la consola de Google Cloud , navega a la sección Monitoring.
En el árbol de navegación de la izquierda, haz clic en Explorador de métricas.
Selecciona el tipo de recurso objetivo:
En la página Explorador de métricas, navega a la página Configuración.
Haz clic en Selecciona una métrica.
Usa la barra de búsqueda para buscar el tipo de recurso Máquina. También puedes usar el identificador de recurso completo
edgecontainer.googleapis.com/Machine.En los resultados que se muestran, haz clic en el tipo de recurso Máquina.
Comprueba el tiempo de actividad de la máquina:
En la sección Métrica, busca el valor
uptime.Selecciona la métrica Tiempo de actividad de la máquina. Su ruta de acceso completa es
edgecontainer.googleapis.com/machine/uptime.(Opcional) Filtra por el valor de
machine_idobjetivo con la sección Filtro.En el gráfico de tiempo que aparece, verifica que el gráfico de tiempo de actividad aumente de forma continua. Si en algún momento el valor de tiempo de actividad se reduce a cero y se reinicia, esto indica que la máquina se reinició.
Verifica la cantidad de reinicios de la máquina:
En la sección Métrica, busca el valor
restart_count.Selecciona la métrica Reinicios de la máquina. Su ruta de acceso completa es
edgecontainer.googleapis.com/machine/restart_count.(Opcional) Filtra por el valor de
machine_idobjetivo con la sección Filtro.En el gráfico de tiempo que aparece, verifica que la línea del gráfico permanezca en
0, lo que indica que no se produjeron reinicios. Si en algún momento esta línea alcanza un pico de1, esto indica que la máquina se reinició. Anota la marca de tiempo exacta del reinicio para solucionar problemas más adelante.(Opcional) Para ver eventos individuales en lugar de un gráfico, navega a la sección Agregación de la página, configura el campo Período de alineación en
1 minutey el campo Alineador por serie en Delta.
Cómo comprender los resultados
En la siguiente tabla, se explican los resultados que muestra el Explorador de métricas.
| Estado de la máquina | Diagnóstico | Solución |
|---|---|---|
| Estable La métrica "Tiempo de actividad de la máquina" aumenta de forma constante El delta de la métrica "Reinicios de la máquina" es 0 |
La máquina no se reinició. | Ninguno |
| Reinicio limpio La métrica "Tiempo de actividad de la máquina" disminuye a 0La métrica "Reinicios de la máquina" aumenta a 1 |
La máquina se reinició correctamente y se volvió a conectar a Google Cloud. | Revisa los registros del sistema para determinar el motivo del reinicio. |
| Falla de energía El gráfico de la métrica "Tiempo de actividad de la máquina" tiene una interrupción sin datos La métrica "Reinicios de la máquina" no cambió durante la interrupción del tiempo de actividad de la máquina |
La máquina perdió la alimentación o la conectividad de red antes de que pudiera reiniciarse. | Revisa los cables de alimentación y de red, la configuración de la red local y el estado del indicador LED. |
| Intermitente El valor de la métrica "Máquina conectada" alterna entre 0 y 1El valor de la métrica "Conectividad de red" alterna entre 0 y 1 |
Conexión de red inestable, pérdida de paquetes o latencia excesiva | Verifica si hay congestión y hardware defectuoso en tu red local. |
Si los pasos de resolución que se indican en la tabla no resuelven el problema, comunícate con la Atención al Cliente de Google y proporciona el valor de machine_id de la máquina afectada y la marca de tiempo de la interrupción.
Conectividad de máquinas de Distributed Cloud conectado
En esta sección, se describe cómo verificar la conectividad a Internet y de Google Cloud de tus máquinas conectadas a Distributed Cloud con la función Explorador de métricas de Cloud Monitoring.
En este procedimiento, se usan las siguientes métricas de Monitoring:
Machine Connected (
/machine/connected): Indica si la máquina está conectada a Google Cloud.Network Connectivity (
/machine/network/connectivity): Indica si la interfaz de red principal de la máquina tiene conectividad a Internet.
Para completar los pasos de esta sección, debes cumplir con los siguientes requisitos previos:
- Acceso a la consola de Google Cloud y a tu proyecto de Distributed Cloud conectado Google Cloud
- El rol de IAM Visualizador de Monitoring, que te permite ver las métricas de Monitoring
- (Opcional) Es el valor de
machine_idde la máquina conectada de Distributed Cloud de destino para filtrar los resultados devueltos.
Usa el Explorador de métricas para verificar la conectividad de la máquina
Navega al Explorador de métricas:
En la consola de Google Cloud , navega a la sección Monitoring.
En el árbol de navegación de la izquierda, haz clic en Explorador de métricas.
Selecciona el tipo de recurso objetivo:
En la página Explorador de métricas, navega a la página Consultas.
Usa la barra de búsqueda para buscar el tipo de recurso Máquina. También puedes usar el identificador de recurso completo
edgecontainer.googleapis.com/Machine.En los resultados que se muestran, haz clic en el tipo de recurso Máquina.
Comprueba la conexión de la máquina a Google Cloud:
En la sección Métrica, busca el valor
connected.Selecciona la métrica Máquina conectada. Su ruta de acceso completa es
edgecontainer.googleapis.com/machine/connected.(Opcional) Filtra por el valor de
machine_idobjetivo con la sección Filtro.En el gráfico de tiempo que aparece, verifica que la línea En buen estado permanezca en el 100% de forma contigua. Si en algún momento este valor es 0% o Unhealthy, la máquina perdió la conectividad con Google Cloud en el momento indicado.
Comprueba la conectividad a Internet de la máquina:
En la sección Métrica, busca el valor
connectivity.Selecciona la métrica Network Connectivity. Su ruta de acceso completa es
edgecontainer.googleapis.com/machine/network/connectivity.(Opcional) Filtra por el valor de
machine_idobjetivo con la sección Filtro.En el gráfico de tiempo que aparece, verifica que la línea En buen estado permanezca en el 100% de forma contigua. Si en algún momento este valor es 0% No saludable, significa que la máquina perdió la conectividad a Internet en el momento indicado.
Cómo comprender los resultados
En la siguiente tabla, se explican los resultados que muestra el Explorador de métricas.
| Estado de la máquina | Diagnóstico | Solución |
|---|---|---|
| En buen estado El valor de la métrica "Máquina conectada" es 1El valor de la métrica "Conectividad de red" es 1 |
Operación normal. | Ninguno |
| Desconectado El valor de la métrica "Máquina conectada" es 0El valor de la métrica "Conectividad de red" es 1 |
La máquina tiene conectividad a Internet, pero no se puede conectar a Google Cloud. | Verifica tus reglas de firewall para los servicios y los extremos de las APIs de Google. Verifica que los agentes conectados de Distributed Cloud se estén ejecutando en la máquina. |
| Aislado El valor de la métrica "Máquina conectada" es 0El valor de la métrica "Conectividad de red" es 0 |
La máquina no tiene conexión a Internet. | Revisa los cables de alimentación y de red, la configuración de la red local y el estado del indicador LED. Verifica la configuración de VLAN y de enrutamiento. |
| Intermitente El valor de la métrica "Máquina conectada" alterna entre 0 y 1El valor de la métrica "Conectividad de red" alterna entre 0 y 1 |
Conexión de red inestable, pérdida de paquetes o latencia excesiva | Verifica si hay congestión y hardware defectuoso en tu red local. |
Si observas valores sostenidos de 0 para cualquiera de las métricas, sigue los pasos para solucionar problemas que se describen en la tabla para resolverlos. Si el problema persiste, comunícate con Atención al Cliente de Google y proporciona el valor de machine_id de la máquina afectada y la marca de tiempo de la interrupción.
Máquinas virtuales atascadas en el estado Pending
Una carga de trabajo de máquina virtual puede quedar atascada en el estado Pending y no programarse en un nodo si sucede una de las siguientes situaciones:
- Distributed Cloud Connected no puede asignar los recursos solicitados, como tiempo de CPU, memoria o espacio en disco, a la máquina virtual.
- Hay una falla en la configuración de la máquina virtual.
- Hay una falla en el almacenamiento de la máquina virtual.
- El nodo de destino está contaminado.
Para solucionar este problema, haz lo siguiente:
Obtén credenciales del clúster como se describe en Cómo obtener credenciales para un clúster.
Obtén información sobre la máquina virtual afectada:
kubectl describe virtualmachine VM_NAME -n NAMESPACE
Reemplaza lo siguiente:
VM_NAME: Es el nombre de la máquina virtual de destino.NAMESPACE: Es el espacio de nombres de la máquina virtual de destino.
El comando muestra un resultado similar al siguiente:
Status: ... State: Pending ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 15m virtualmachine-controller Created virtual machine my-stuck-vm Warning DiskProvisioningFailed 14m virtualmachine-controller Failed to provision disk: DataVolume my-stuck-vm-data-disk not ready Warning PVCNotBound 14m virtualmachine-controller PersistentVolumeClaim my-stuck-vm-data-disk is in phase Pending Warning VMINotCreated 10m virtualmachine-controller VirtualMachineInstance cannot be created: dependencies not readyEl resultado del comando contiene mensajes que pueden indicar limitaciones de recursos, fallas de programación, errores de almacenamiento y otros problemas.
Examina el resultado para determinar las causas del error de programación, como se explica en las siguientes secciones.
Recursos insuficientes
Es posible que veas un mensaje que indica que no hay recursos suficientes, como CPU, memoria o espacio en disco. Por ejemplo:
5/8 nodes are available: 3 Insufficient memory, 3 Insufficient CPU.
Para solucionar este problema, verifica los recursos asignados a las máquinas virtuales afectadas y otras cargas de trabajo programadas en el nodo. Luego, haz lo siguiente según tus necesidades comerciales:
- Reducir la escala de otras cargas de trabajo programadas en el nodo
- Reducir la cantidad de recursos asignados a la máquina virtual afectada
- Agrega más máquinas al clúster afectado.
Nodos con taint
Es posible que veas un mensaje que indica que el nodo de destino está dañado. Por ejemplo:
5/8 nodes are available: 3 node(s) had taint {<taint-key>:<taint-value>}, that the pod didn't tolerate.
Para solucionar este problema, haz lo siguiente:
Usa el siguiente comando para verificar si hay taints en el nodo:
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
El comando muestra un resultado similar al siguiente:
NAME TAINTS node-name-1 [map[effect:PreferNoSchedule key:node-role.kubernetes.io/master] map[effect:PreferNoSchedule key:node-role.kubernetes.io/control-plane]] node-name-2 <none>Realiza una de las siguientes acciones:
- En el caso de los taints inesperados, quítalos como se describe en Taints y tolerancias.
- Para los taints esperados, agrega las tolerancias correspondientes a la configuración de la máquina virtual, como se describe en Taints y tolerancias.
Fallas de almacenamiento
Es posible que veas un mensaje que indica una falla en el almacenamiento de la máquina virtual. Por ejemplo:
5/8 nodes are available: 3 node(s) had volume node affinity conflict, 3 node(s) had unbound immediate PersistentVolumeClaims.
Este mensaje puede indicar que el volumen persistente correspondiente no se puede activar en el nodo de destino.
Para solucionar este problema, haz lo siguiente:
Usa el siguiente comando para obtener el estado de los reclamos de volúmenes persistentes (PVC) en el espacio de nombres de la máquina virtual afectada:
kubectl get pvc -n NAMESPACE
Reemplaza
NAMESPACEpor el nombre del espacio de nombres de destino.El comando muestra un resultado similar al siguiente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE windows-robin-disk-0 Bound pvc-b1a1d264-84bf-4e58-857d-f37f629d5082 25Gi RWX robin-block-immediate 30h windows-robin-disk-1 Bound pvc-0130b9a8-7fed-4df0-8226-d79273792a16 25Gi RWX robin-block-immediate 30h windows-robin-vm-0-restored-windows-robin-disk-0 Pending gce-pd-gkebackup-in 26mVerifica que el PVC correspondiente tenga el estado
Bound. Si el estado esPending, significa que el subsistema de almacenamiento no pudo aprovisionar el volumen. En esos casos, debes solucionar los problemas de configuración del subsistema de almacenamiento y asegurarte de que esté disponible elStorageClassadecuado.
Bloqueos de programación causados por webhooks de admisión fallidos
Los webhooks de admisión te permiten interceptar solicitudes al servidor de la API de Kubernetes antes de que el objeto se vuelva persistente. Si bien son útiles para aplicar políticas de seguridad personalizadas, los webhooks mal configurados pueden causar interrupciones en todo el clúster, especialmente durante operaciones críticas, como actualizaciones de software y actualizaciones de certificados. Específicamente, un webhook de admisión bloqueado o no disponible puede detener el plano de control de Kubernetes, lo que impide cualquier programación adicional de cargas de trabajo en el clúster.
Interbloqueo del plano de control
Un interbloqueo por dependencia circular puede ocurrir cuando un webhook de admisión es responsable de validar los recursos que se requieren para la recuperación del propio webhook. Por ejemplo, si se configura un webhook de admisión para validar Pods y ese Pod de webhook debe reprogramarse durante una actualización de software del nodo, es posible que el servidor de la API de Kubernetes intente comunicarse con el webhook para autorizar la creación del nuevo Pod. Si no se puede acceder al webhook, la solicitud falla, no se crea el Pod y el clúster entra en un estado de interbloqueo en el que no se pueden programar cargas de trabajo nuevas.
Cuando se configura un webhook con failurePolicy: Fail, cualquier error de comunicación o tiempo de espera agotado entre el servidor de la API y el webhook provoca el rechazo de la solicitud a la API. Esto provoca los siguientes problemas:
- Falla la actualización de software: No se pueden programar componentes del sistema ni VMs durante la actualización de software del nodo ni después de ella.
- No se pueden iniciar los servicios del sistema: No se pueden iniciar los pods de infraestructura, como Symcloud Storage y VM Runtime en GDC.
- Nodos atascados en modo de mantenimiento: Los nodos en modo de mantenimiento no se pueden reconciliar ni salir porque la lógica de admisión bloquea el controlador.
Prácticas recomendadas para la configuración de webhooks
Sigue las prácticas recomendadas que se describen en esta sección para evitar el bloqueo del plano de control que se mencionó anteriormente.
Estas prácticas recomendadas se aplican a todos los objetos ValidatingWebhookConfiguration y MutatingWebhookConfiguration.
Utilizar failurePolicy: Ignore
A menos que los requisitos de tu empresa indiquen que una solicitud a la API debe fallar si no se puede validar, siempre establece el campo failurePolicy en Ignore. Esto garantiza que el servidor de la API de Kubernetes siga funcionando incluso cuando el servicio de webhook afectado no esté disponible, lo que permite que los Pods críticos para el sistema se programen y recuperen.
Excluye los espacios de nombres reservados
Tus webhooks nunca deben interceptar solicitudes de recursos en espacios de nombres reservados. Debes excluir esos espacios de nombres de la configuración del webhook con el campo namespaceSelector.
Consulta Restricciones del espacio de nombres de administración para obtener una lista completa de los espacios de nombres reservados. Por ejemplo:
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: "customer-policy-webhook"
webhooks:
- name: "validate-labels.example.com"
failurePolicy: Ignore
sideEffects: None
admissionReviewVersions: ["v1"]
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values:
- kube-system
- kube-node-lease
- kube-public
- capi-system
- capi-kubeadm-bootstrap-system
- gke-system
- gke-connect
- gke-operators
- gke-managed-metrics-server
- anthos-identity-service
- anthos-creds
- robinio
- robin-admin
- vm-system
- cert-manager
- cert-manager-cluster-resources
- dns-system
- g-istio-system
- nf-operator
- prom-monitoring
- gpu-system
- oclcm-system
- saas-system
rules:
- operations: ["CREATE", "UPDATE"]
apiGroups: ["*"]
apiVersions: ["*"]
resources: ["pods", "deployments"]
Recupera un clúster bloqueado por webhooks con errores
Si tu clúster se bloqueó debido a webhooks con errores y tus comandos kubectl para crear recursos agotan el tiempo de espera o muestran errores, por lo general, se debe a que el webhook tiene su failurePolicy establecido en Fail. Sigue los pasos que se indican en esta sección para recuperar el clúster del bloqueo. Si el webhook que falló es un webhook de mutación, usa mutatingwebhookconfiguration en lugar de validatingwebhookconfiguration.
Identifica los webhooks fallidos:
Enumera los webhooks de validación implementados en el clúster:
kubectl get validatingwebhookconfigurations
Enumera los webhooks de mutación implementados en el clúster:
kubectl get mutatingwebhookconfigurations
Verifica si los Pods que respaldan esos webhooks se están ejecutando:
kubectl get pods -A | grep WEBHOOK_SERVICE
Reemplaza
WEBHOOK_SERVICEpor el nombre del servicio del webhook de destino.Establece el
failurePolicydel webhook fallido enIgnore:kubectl patch validatingwebhookconfiguration WEBHOOK_CONFIG \ --type='json' \ -p='[{"op": "replace", "path": "/webhooks/0/failurePolicy", "value":"Ignore"}]'Reemplaza
WEBHOOK_SERVICEpor el nombre del servicio del webhook de destino.(Opcional) Si falló el paso anterior, borra de forma forzada la configuración del webhook afectado:
kubectl delete validatingwebhookconfiguration WEBHOOK_CONFIG --timeout=10s
Reemplaza
WEBHOOK_CONFIGpor el nombre de la configuración del webhook de destino.
Después de modificar o borrar por la fuerza la configuración del webhook, el servidor de la API de Kubernetes reanuda el procesamiento de solicitudes, lo que resuelve el interbloqueo y permite que se completen los procesos bloqueados.