Registro y monitorización de GKE en AWS

En este tema se explica cómo exportar registros y métricas de un clúster de usuario de GKE en AWS a Cloud Logging y Cloud Monitoring.

Información general

Hay varias opciones para registrar y monitorizar con GKE en AWS. GKE se puede integrar con Cloud Logging y Cloud Monitoring. Como GKE se basa en Kubernetes de código abierto, muchas herramientas de código abierto y de terceros son compatibles.

Opciones de registro y monitorización

Tienes varias opciones de registro y monitorización para tu clúster de GKE en AWS:

  1. Despliega los agentes de Cloud Logging y Cloud Monitoring para monitorizar y ver los registros de tus cargas de trabajo en la Google Cloud consola. En este tema se explica esta solución.

  2. Usa herramientas de código abierto como Prometheus, Grafana y Elasticsearch. En este tema no se describe esta solución.

  3. Utiliza soluciones de terceros, como Datadog. En este tema no se describe esta solución.

Cloud Logging y Cloud Monitoring

Con Cloud Logging y Cloud Monitoring, puedes crear paneles de control, enviar alertas, monitorizar y revisar los registros de las cargas de trabajo que se ejecutan en tu clúster. Debe configurar los agentes de Cloud Logging y Cloud Monitoring para recoger registros y métricas en su proyecto de Google Cloud. Si no configuras estos agentes, GKE en AWS no recogerá datos de registro ni de monitorización.

Qué datos se recogen

Una vez configurados, los agentes recogen registros y datos de métricas de tu clúster y de las cargas de trabajo que se ejecutan en él. Estos datos se almacenan en tu proyectoGoogle Cloud . El ID de proyecto se configura en el campo project_id de un archivo de configuración al instalar el reenviador de registros.

Entre los datos recogidos se incluyen los siguientes:

  • Registros de los servicios del sistema en cada uno de los nodos de trabajador.
  • Registros de aplicaciones de todas las cargas de trabajo que se ejecutan en el clúster.
  • Métricas de los servicios del clúster y del sistema. Para obtener más información sobre métricas específicas, consulta el artículo Métricas de Google Distributed Cloud.
  • Si tus aplicaciones están configuradas con objetivos de extracción de Prometheus y anotadas con una configuración que incluye prometheus.io/scrape, prometheus.io/path y prometheus.io/port, métricas de aplicación de pods.

Los agentes se pueden inhabilitar en cualquier momento. Para obtener más información, consulta la sección Limpieza. Los datos recogidos por los agentes se pueden gestionar y eliminar como cualquier otro dato de métricas y registros, tal como se describe en la documentación de Cloud Monitoring y Cloud Logging.

Los datos de registro se almacenan de acuerdo con las reglas de conservación configuradas. La conservación de los datos de métricas varía en función del tipo.

Componentes de registro y monitorización

Para exportar la telemetría a nivel de clúster de GKE en AWS aGoogle Cloud, debe implementar los siguientes componentes en su clúster:

  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Un DaemonSet de Fluentbit que reenvía los registros de cada nodo de Kubernetes a Cloud Logging.
  • Agente de métricas de GKE (gke-metrics-agent-*). Un DaemonSet basado en OpenTelemetry Collector que recoge datos de métricas y los reenvía a Cloud Monitoring.

Los manifiestos de estos componentes se encuentran en el repositorio anthos-samples de GitHub.

Requisitos previos

  1. Un Google Cloud proyecto con la facturación habilitada. Para obtener más información sobre los costes, consulta la página Precios de Google Cloud Observability.

    El proyecto también debe tener habilitadas las APIs Cloud Logging y Cloud Monitoring. Para habilitar estas APIs, ejecuta los siguientes comandos:

    gcloud services enable logging.googleapis.com
    gcloud services enable monitoring.googleapis.com
    
  2. Un entorno de GKE en AWS, incluido un clúster de usuario registrado en Connect. Ejecuta el siguiente comando para verificar que tu clúster está registrado.

    gcloud container fleet memberships list
    

    Si el clúster está registrado, la CLI de Google Cloud muestra el nombre y el ID del clúster.

    NAME       EXTERNAL_ID
    cluster-0  1abcdef-1234-4266-90ab-123456abcdef
    

    Si no ves tu clúster en la lista, consulta el artículo Conectarse a un clúster mediante Connect.

  3. Instala la herramienta de línea de comandos git en tu máquina.

Configurar permisos para Google Cloud Observability

Los agentes de registro y monitorización usan Workload Identity de flota para comunicarse con Cloud Logging y Cloud Monitoring. La identidad necesita permisos para escribir registros y métricas en tu proyecto. Para añadir los permisos, ejecuta los siguientes comandos:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver]" \
  --role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver]" \
  --role=roles/monitoring.metricWriter

Sustituye PROJECT_ID por tu Google Cloud proyecto.

Conectarse al host bastión

Para conectarte a tus recursos de GKE en AWS, sigue estos pasos. Selecciona si tienes una VPC de AWS (o una conexión directa a tu VPC) o si has creado una VPC específica al crear tu servicio de gestión.

VPC ya creada

Si tienes una conexión directa o VPN a una VPC, omite la línea env HTTP_PROXY=http://localhost:8118 de los comandos de este tema.

VPC dedicada

Cuando creas un servicio de gestión en una VPC dedicada, GKE en AWS incluye un host bastión en una subred pública.

Para conectarte a tu servicio de gestión, sigue estos pasos:

  1. Cambia al directorio con tu configuración de GKE en AWS. Has creado este directorio al instalar el servicio de gestión.

    cd anthos-aws

  2. Para abrir el túnel, ejecuta la secuencia de comandos bastion-tunnel.sh. El túnel reenvía a localhost:8118.

    Para abrir un túnel al host bastion, ejecuta el siguiente comando:

    ./bastion-tunnel.sh -N
    

    Los mensajes del túnel SSH aparecen en esta ventana. Cuando quieras cerrar la conexión, detén el proceso con Control+C o cierra la ventana.

  3. Abre una terminal nueva y ve al directorio anthos-aws.

    cd anthos-aws
  4. Comprueba que puedes conectarte al clúster con kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    La salida incluye la URL del servidor de la API del servicio de gestión.

Cloud Logging y Cloud Monitoring en nodos del plano de control

Con GKE en AWS 1.8.0 y versiones posteriores, Cloud Logging y Cloud Monitoring para nodos del plano de control se pueden configurar automáticamente al crear clústeres de usuario. Para habilitar Cloud Logging o Cloud Monitoring, rellena la sección controlPlane.cloudOperations de la configuración de AWSCluster.

cloudOperations:
  projectID: PROJECT_ID
  location: GC_REGION
  enableLogging: ENABLE_LOGGING
  enableMonitoring: ENABLE_MONITORING

Haz los cambios siguientes:

  • PROJECT_ID: tu ID de proyecto.
  • GC_REGION: la Google Cloud región en la que quieras almacenar los registros. Elige una región cercana a la región de AWS. Para obtener más información, consulta Ubicaciones globales: regiones y zonas, como us-central1.
  • ENABLE_LOGGING: true o false, si Cloud Logging está habilitado en los nodos del plano de control.
  • ENABLE_MONITORING: true o false, si Cloud Monitoring está habilitado en los nodos del plano de control.

A continuación, sigue los pasos que se indican en Crear un clúster de usuarios personalizado .

Cloud Logging y Cloud Monitoring en nodos de trabajo

Eliminar la versión anterior

Si has configurado una versión anterior de los agentes de registro y monitorización que incluye stackdriver-log-aggregator (Fluentd) y stackdriver-prometheus-k8s (Prometheus), te recomendamos que los desinstales primero antes de continuar.

Instalar el reenviador de registros

En esta sección, instalarás Stackdriver Log Forwarder en tu clúster.

  1. En el directorio anthos-samples/aws-logging-monitoring/, cambia al directorio logging/.

    cd logging/
    
  2. Modifica el archivo forwarder.yaml para que coincida con la configuración de tu proyecto:

    sed -i "s/PROJECT_ID/PROJECT_ID/g" forwarder.yaml
    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" forwarder.yaml
    sed -i "s/CLUSTER_LOCATION/GC_REGION/g" forwarder.yaml
    

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto.
    • CLUSTER_NAME: el nombre de tu clúster (por ejemplo, cluster-0).
    • GC_REGION: la Google Cloud región en la que quieras almacenar los registros. Elige una región cercana a la región de AWS. Para obtener más información, consulta Ubicaciones globales: regiones y zonas, como us-central1.
  3. (Opcional) En función de tus cargas de trabajo, el número de nodos de tu clúster y el número de pods por nodo, es posible que tengas que definir solicitudes de recursos de memoria y CPU. Para obtener más información, consulta Asignaciones de CPU y memoria recomendadas.

  4. En tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu clúster de usuarios.

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Sustituye CLUSTER_NAME por el nombre de tu clúster de usuario.

  5. Crea la cuenta de servicio stackdriver si no existe e implementa el reenviador de registros en el clúster.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl create serviceaccount stackdriver -n kube-system
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f forwarder.yaml
    
  6. Usa kubectl para verificar que los pods se han iniciado.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods -n kube-system | grep stackdriver-log
    

    Deberías ver un pod de reenvío por cada nodo de un grupo de nodos. Por ejemplo, en un clúster de 6 nodos, deberías ver seis pods de reenvío.

    stackdriver-log-forwarder-2vlxb              2/2     Running   0          21s
    stackdriver-log-forwarder-dwgb7              2/2     Running   0          21s
    stackdriver-log-forwarder-rfrdk              2/2     Running   0          21s
    stackdriver-log-forwarder-sqz7b              2/2     Running   0          21s
    stackdriver-log-forwarder-w4dhn              2/2     Running   0          21s
    stackdriver-log-forwarder-wrfg4              2/2     Running   0          21s
    

Prueba del reenvío de registros

En esta sección, desplegarás en tu clúster una carga de trabajo que contenga un servidor web HTTP básico con un generador de carga. A continuación, comprueba que los registros están en Cloud Logging.

Antes de instalar esta carga de trabajo, puedes verificar los manifiestos del servidor web y del generador de carga.

  1. Despliega el servidor web y el generador de carga en tu clúster.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f  https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
  2. Para comprobar que puedes ver los registros de tu clúster en el panel de control de Cloud Logging, ve al Explorador de registros en la Google Cloud consola:

    Ir a Explorador de registros

  3. Copia la consulta de ejemplo que aparece a continuación en el campo Generador de consultas.

    resource.type="k8s_container" resource.labels.cluster_name="CLUSTER_NAME"
    

    Sustituye CLUSTER_NAME por el nombre de tu clúster.

  4. Haz clic en Realizar una consulta. Deberían aparecer los registros recientes del clúster en Resultados de la consulta.

    Registros de clústeres en Google Cloud Observability

  5. Una vez que hayas confirmado que los registros aparecen en los resultados de la consulta, elimina el generador de carga y el servidor web.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    

Instalar el recopilador de métricas

En esta sección, instalarás un agente para enviar datos a Cloud Monitoring.

  1. En el directorio anthos-samples/aws-logging-monitoring/logging/, cambia al directorio anthos-samples/aws-logging-monitoring/monitoring/.

    cd ../monitoring
    
  2. Modifica el archivo gke-metrics-agent.yaml para que coincida con la configuración de tu proyecto:

    sed -i "s/PROJECT_ID/PROJECT_ID/g" gke-metrics-agent.yaml
    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" gke-metrics-agent.yaml
    sed -i "s/CLUSTER_LOCATION/GC_REGION/g" gke-metrics-agent.yaml
    

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto.
    • CLUSTER_NAME: el nombre de tu clúster (por ejemplo, cluster-0).
    • GC_REGION: la Google Cloud región en la que quieras almacenar los registros. Elige una región cercana a la región de AWS. Para obtener más información, consulta Ubicaciones globales: regiones y zonas, como us-central1.
  3. (Opcional) En función de tus cargas de trabajo, el número de nodos de tu clúster y el número de pods por nodo, es posible que tengas que definir solicitudes de recursos de memoria y CPU. Para obtener más información, consulta Asignaciones de CPU y memoria recomendadas.

  4. Crea la cuenta de servicio stackdriver si no existe e implementa el agente de métricas en tu clúster.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl create serviceaccount stackdriver -n kube-system
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f gke-metrics-agent.yaml
    
  5. Usa la herramienta kubectl para verificar que el pod gke-metrics-agent se está ejecutando.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods -n kube-system | grep gke-metrics-agent
    

    Deberías ver un pod de agente por nodo en un grupo de nodos. Por ejemplo, en un clúster de 3 nodos, deberías ver tres pods de agente.

    gke-metrics-agent-gjxdj                    2/2     Running   0          102s
    gke-metrics-agent-lrnzl                    2/2     Running   0          102s
    gke-metrics-agent-s6p47                    2/2     Running   0          102s
    
  6. Para verificar que las métricas de tu clúster se están exportando a Cloud Monitoring, ve al explorador de métricas en la Google Cloud consola:

    Ir a Explorador de métricas

  7. En el explorador de métricas, haz clic en Editor de consultas y copia el siguiente comando:

    fetch k8s_container
    | metric 'kubernetes.io/anthos/otelcol_exporter_sent_metric_points'
    | filter
        resource.project_id == 'PROJECT_ID'
        && (resource.cluster_name =='CLUSTER_NAME')
    | align rate(1m)
    | every 1m
    

    Haz los cambios siguientes:

  8. Haz clic en Realizar una consulta. Se muestra la tasa de puntos de métricas enviados a Cloud Monitoring desde cada pod gke-metrics-agent de tu clúster.

    Monitorización del clúster

    Otras métricas que merece la pena probar son las siguientes:

    • kubernetes.io/anthos/container_memory_working_set_bytes: uso de memoria del contenedor.
    • kubernetes.io/anthos/container_cpu_usage_seconds_total: uso de CPU del contenedor.
    • kubernetes.io/anthos/apiserver_aggregated_request_total: número de solicitudes de kube-apiserver. Solo está disponible si Cloud Monitoring está habilitado en el plano de control.

    Para ver una lista completa de las métricas disponibles, consulta Métricas de Anthos. Para obtener información sobre cómo usar la interfaz de usuario, consulta Explorador de métricas.

Crear un panel de control en Cloud Monitoring

En esta sección, crearás un panel de control de Cloud Monitoring que monitorice el estado de los contenedores de tu clúster.

  1. En el directorio anthos-samples/aws-logging-monitoring/monitoring/, cambia al directorio anthos-samples/aws-logging-monitoring/monitoring/dashboards.

    cd dashboards
    
  2. Sustituye las instancias de la cadena CLUSTER_NAME en pod-status.json por el nombre de tu clúster.

    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" pod-status.json
    

    Sustituye CLUSTER_NAME por el nombre de tu clúster.

  3. Crea un panel de control personalizado con el archivo de configuración ejecutando el siguiente comando:

    gcloud monitoring dashboards create --config-from-file=pod-status.json
    
  4. Para verificar que se ha creado el panel de control, ve a Paneles de control de Cloud Monitoring en la Google Cloud consola.

    Ir a Paneles

    Abre el panel de control que acabas de crear con un nombre en el formato de CLUSTER_NAME (Anthos cluster on AWS) pod status.

Eliminar los recursos utilizados

En esta sección, eliminarás los componentes de registro y monitorización de tu clúster.

  1. Elimina el panel de control de monitorización en la vista de lista de paneles de la consolaGoogle Cloud haciendo clic en el botón de eliminar asociado al nombre del panel de control.

  2. Cambia al directorio anthos-samples/aws-logging-monitoring/.

    cd anthos-samples/aws-logging-monitoring
    
  3. Para eliminar todos los recursos creados en esta guía, ejecuta los siguientes comandos:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f logging/
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f monitoring/
    

Asignaciones de CPU y memoria recomendadas

En esta sección se incluyen las recomendaciones de CPU y asignaciones para los componentes individuales que se usan en el registro y la monitorización. En cada una de las siguientes tablas se indican las solicitudes de CPU y memoria de un clúster con un intervalo de tamaños de nodo. Define las solicitudes de recursos de un componente en el archivo que se indica en la tabla.

Para obtener más información, consulta Prácticas recomendadas de Kubernetes: solicitudes y límites de recursos y Gestión de recursos de contenedores.

De 1 a 10 nodos

Archivo Recurso Solicitudes de CPU Límites de CPU Solicitudes de memoria Límites de memoria
monitoring/gke-metrics-agent.yaml gke-metrics-agent 30 min 100 m 50 mi 500Mi
logging/forwarder.yaml stackdriver-log-forwarder 50 m 100 m 100Mi 600 mi

Entre 10 y 100 nodos

Archivo Recurso Solicitudes de CPU Límites de CPU Solicitudes de memoria Límites de memoria
monitoring/gke-metrics-agent.yaml gke-metrics-agent 50 m 100 m 50 mi 500Mi
logging/forwarder.yaml stackdriver-log-forwarder 60 m 100 m 100Mi 600 mi

Más de 100 nodos

Archivo Recurso Solicitudes de CPU Límites de CPU Solicitudes de memoria Límites de memoria
monitoring/gke-metrics-agent.yaml gke-metrics-agent 50 m 100 m 100Mi N/A
logging/forwarder.yaml stackdriver-log-forwarder 60 m 100 m 100Mi 600 mi

Siguientes pasos

Consulta información sobre Cloud Logging:

Consulta información sobre Cloud Monitoring: