Soluciona problemas de observabilidad de Google Distributed Cloud

En este documento, se te ayuda a solucionar problemas de observabilidad en Google Distributed Cloud. Si tienes alguno de estos problemas, revisa las correcciones y soluciones alternativas sugeridas.

Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud. También puedes consultar Cómo obtener asistencia para obtener más información sobre los recursos de asistencia, incluidos los siguientes:

  • Requisitos para abrir un caso de asistencia
  • Herramientas para ayudarte a solucionar problemas, como la configuración de tu entorno, los registros y las métricas
  • Componentes compatibles

No se recopilan los registros de auditoría de Cloud

Los Registros de auditoría de Cloud están habilitados de forma predeterminada, a menos que haya una marca disableCloudAuditLogging establecida en la sección clusterOperations de la configuración del clúster.

Si los registros de auditoría de Cloud están habilitados, los permisos son el motivo más común por el que no se recopilan los registros. En este caso, los mensajes de error de permiso denegado se muestran en el contenedor proxy de los Registros de auditoría de Cloud.

El contenedor de proxy de los Registros de auditoría de Cloud se ejecuta como un DaemonSet en todos los clústeres de Google Distributed Cloud.

Si ves errores de permisos, sigue los pasos para solucionar problemas y resolver los problemas de permisos.

Otra posible causa es que tu proyecto haya alcanzado el límite de cuentas de servicio admitidas. Consulta Se filtró la cuenta de servicio de los registros de auditoría de Cloud.

No se recopilan las métricas de kube-state-metrics

kube-state-metrics (KSM) se ejecuta como una sola Deployment de réplica en el clúster y genera métricas en casi todos los recursos del clúster. Cuando KSM y gke-metrics-agent se ejecutan en el mismo nodo, existe un mayor riesgo de interrupción entre los agentes de métricas en todos los nodos.

Las métricas de KSM tienen nombres que siguen el patrón kube_<ResourceKind>, como kube_pod_container_info. Las métricas que comienzan con kube_onpremusercluster_ provienen del controlador del clúster local, no de KSM.

Si faltan métricas del KSM, revisa los siguientes pasos para solucionar problemas:

  • En Cloud Monitoring, verifica la CPU, la memoria y el recuento de reinicios de KSM con las métricas de la API de resumen, como kubernetes.io/anthos/container/... . Esta es una canalización independiente con KSM. Confirma que el Pod de KSM no esté limitado por no tener suficientes recursos.
    • Si estas métricas de la API de resumen no están disponibles para KSM, es probable que gke-metrics-agent en el mismo nodo también tenga el mismo problema.
  • En el clúster, verifica el estado y los registros del pod de KSM y del Pod de gke-metrics-agent en el mismo nodo con KSM.

Fallas de kube-state-metrics que se repiten

Síntoma

No hay métricas de kube-state-metrics (KSM) disponibles en Cloud Monitoring.

Causa

Es más probable que esta situación ocurra en clústeres grandes o en clústeres con grandes cantidades de recursos. KSM se ejecuta como una sola implementación de réplica y enumera casi todos los recursos del clúster, como Pods, Deployments, DaemonSets, ConfigMaps, Secrets y PersistentVolumes. Las métricas se generan en cada uno de estos objetos de recursos. Si alguno de los recursos tiene muchos objetos, como un clúster con más de 10,000 Pods, es posible que KSM se quede sin memoria.

Versiones afectadas

Este problema puede ocurrir en cualquier versión de Google Distributed Cloud.

El límite predeterminado de CPU y memoria se incrementó en las últimas versiones de Google Distributed Cloud, por lo que estos problemas de recursos deberían ser menos frecuentes.

Solución y solución alternativa

Para comprobar si el problema se debe a errores de memoria insuficiente, sigue estos pasos:

  • Usa kubectl describe pod o kubectl get pod -o yaml y verifica el mensaje de estado de error.
  • Verifica la métrica de consumo y utilización de memoria para KSM y confirma si alcanza el límite antes de reiniciarse.

Si confirmas que el problema se debe a la falta de memoria, usa una de las siguientes soluciones:

  • Aumenta la solicitud y el límite de memoria para KSM.

  • Reduce la cantidad de métricas del KSM.

    En Google Distributed Cloud 1.13, KSM solo expone una cantidad menor de métricas llamadas métricas principales de forma predeterminada. Este comportamiento significa que el uso de recursos es menor que en las versiones anteriores, pero se puede seguir el mismo procedimiento para reducir aún más la cantidad de métricas de KSM.

    En las versiones de Google Distributed Cloud anteriores a la 1.13, KSM usa las marcas predeterminadas. Esta configuración expone una gran cantidad de métricas.

Fallas de gke-metrics-agent que se repiten

Si gke-metrics-agent solo experimenta problemas de falta de memoria en el nodo en el que existe kube-state-metrics, la causa es una gran cantidad de métricas de kube-state-metrics. Para mitigar este problema, reduce la escala verticalmente stackdriver-operator y modifica KSM para exponer un pequeño conjunto de métricas necesarias, como se detalla en la sección anterior. Recuerda volver a aumentar la escala de stackdriver-operator después de actualizar el clúster a Google Distributed Cloud 1.13, donde KSM expone de forma predeterminada una menor cantidad de métricas principales.

Para los problemas que no están relacionados con eventos de falta de memoria, consulta los registros de los Pods de gke-metric-agent. Para ajustar la CPU y la memoria de todos los Pods gke-metrics-agent, agrega el campo resourceAttrOverride al recurso personalizado de Stackdriver.

Fallas de stackdriver-metadata-agent que se repiten

Síntoma

No hay ninguna etiqueta de metadatos del sistema disponible cuando se filtran métricas en Cloud Monitoring.

Causa

El caso más común de fallas de stackdriver-metadata-agent que se repiten se debe a eventos de falta de memoria. Este evento es similar a kube-state-metrics. Aunque stackdriver-metadata-agent no enumera todos los recursos, aún enumera todos los objetos de los tipos de recursos relevantes, como Pods, Deployments y NetworkPolicy. El agente se ejecuta como una sola Deployment de réplica, lo que aumenta el riesgo de eventos de falta de memoria si la cantidad de objetos es demasiado grande.

Versión afectada

Este problema puede ocurrir en cualquier versión de Google Distributed Cloud.

El límite predeterminado de CPU y memoria se incrementó en las últimas versiones de Google Distributed Cloud, por lo que estos problemas de recursos deberían ser menos comunes.

Solución y solución alternativa

Para comprobar si el problema se debe a errores de memoria insuficiente, sigue estos pasos:

  • Usa kubectl describe pod o kubectl get pod -o yaml y verifica el mensaje de estado de error.
  • Verifica la métrica de consumo y utilización de memoria para stackdriver-metadata-agent y confirma si alcanza el límite antes de reiniciarse.
Si confirmas que los problemas de falta de memoria están causando problemas, aumenta el límite de memoria en el campo resourceAttrOverride del recurso personalizado de Stackdriver.

Fallas de metrics-server que se repiten

Síntoma

El Horizontal Pod Autoscaler y kubectl top no funcionan en tu clúster.

Causa y versiones afectadas

Este problema no es muy común, pero se debe a errores de memoria insuficiente en clústeres grandes o en clústeres con una alta densidad de Pods.

Este problema puede ocurrir en cualquier versión de Google Distributed Cloud.

Solución y solución alternativa

Aumenta los límites de recursos del servidor de métricas. En la versión 1.13 y posteriores de Google Distributed Cloud, el espacio de nombres de metrics-server y su configuración se movieron de kube-system a gke-managed-metrics-server.

En el caso de Google Distributed Cloud, la edición de la configuración de Nanny se revertiría en caso de actualización del clúster. Deberás volver a aplicar los cambios de configuración. Para evitar esta limitación, reduce verticalmente metrics-server-operator y cambia manualmente el Pod metrics-server.

No se quitan todos los recursos durante el borrado de la cuenta de servicio de los registros de auditoría de Cloud

Cuando borras una cuenta de servicio que se usa para los registros de auditoría de Cloud, no se borran todos los recursos Google Cloud. Si sueles borrar y volver a crear las cuentas de servicio que se usan para los registros de auditoría de Cloud, con el tiempo, el registro de auditoría comenzará a fallar.

Síntoma

Los mensajes de error de permiso denegado se muestran en el contenedor del proxy de los Registros de auditoría de Cloud.

Para confirmar que la falla del registro de auditoría se debe a este problema, ejecuta el siguiente comando:

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global/features/cloudauditlogging

Reemplaza PROJECT_NUMBER por el número del proyecto.

La respuesta devuelve todas las cuentas de servicio que se usan con los registros de auditoría de Cloud en el proyecto, incluidas las cuentas de servicio que se borraron.

Causa y versiones afectadas

No todos los recursos Google Cloud se quitan cuando borras una cuenta de servicio que se usa para los registros de auditoría de Cloud y, finalmente, alcanzas el límite de 1,000 cuentas de servicio para el proyecto.

Este problema puede ocurrir en cualquier versión de Google Distributed Cloud.

Solución y solución alternativa

  1. Crea una variable de entorno que contenga una lista separada por comas de todas las cuentas de servicio que deseas conservar. Rodea cada dirección de correo electrónico de la cuenta de servicio con comillas simples y rodea toda la lista con comillas dobles. Puedes usar lo siguiente como punto de partida:

    SERVICE_ACCOUNT_EMAILS="'SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com'"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto
    • SERVICE_ACCOUNT_NAME: El nombre de la cuenta de servicio.

    La lista completada debería ser similar al siguiente ejemplo:

    "'sa_name1@example-project-12345.iam.gserviceaccount.com','sa_name2@example-project-12345.iam.gserviceaccount.com','sa_name3@example-project-12345.iam.gserviceaccount.com'"
    
  2. Ejecuta el siguiente comando para quitar la función de Registros de auditoría de Cloud del proyecto:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/FLEET_REGION /features/cloudauditlogging
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Número del proyecto
    • FLEET_REGION: Es la ubicación de la membresía de la flota para tus clústeres. Puede ser una región específica, como us-central1 o global. Puedes ejecutar el comando gcloud container fleet memberships list para obtener la ubicación de la membresía.

    Este comando borra por completo todas las cuentas de servicio.

  3. Vuelve a crear la función de Registros de auditoría de Cloud solo con las cuentas de servicio que deseas conservar:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/FLEET_REGION/features?feature_id=cloudauditlogging \
        -d '{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":[$SERVICE_ACCOUNT_EMAILS]}}}'
    

¿Qué sigue?

Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud. También puedes consultar Cómo obtener asistencia para obtener más información sobre los recursos de asistencia, incluidos los siguientes:

  • Requisitos para abrir un caso de asistencia
  • Herramientas para ayudarte a solucionar problemas, como la configuración de tu entorno, los registros y las métricas
  • Componentes compatibles