Registro y supervisión de GKE en AWS

Este tema le muestra cómo exportar registros y métricas desde un clúster de usuarios de GKE en AWS a Cloud Logging y Cloud Monitoring.

Descripción general

Existen múltiples opciones para registrar y monitorear con GKE en AWS. GKE Enterprise se puede integrar con Cloud Logging y Cloud Monitoring. Dado que GKE Enterprise se basa en Kubernetes de código abierto, muchas herramientas de código abierto y de terceros son compatibles.

Opciones de registro y monitoreo

Tiene varias opciones de registro y supervisión para su clúster de GKE Enterprise:

  1. Implemente los agentes Cloud Logging y Cloud Monitoring para supervisar y ver los registros de sus cargas de trabajo en Google Cloud consola. Este tema explica esta solución.

  2. Utilice herramientas de código abierto como Prometheus, Grafana y Elasticsearch. Este tema no describe esta solución.

  3. Utilice soluciones de terceros como Datadog. Este tema no describe esta solución.

Registro y monitoreo de la nube

Con GKE Enterprise, Cloud Logging y Cloud Monitoring, puede crear paneles, enviar alertas, supervisar y revisar registros de las cargas de trabajo que se ejecutan en su clúster. Debe configurar los agentes de Cloud Logging y Cloud Monitoring para recopilar registros y métricas en su clúster. Google Cloudproyecto. Si no configura estos agentes, GKE en AWS no recopila datos de registro ni monitoreo.

¿Qué datos se recopilan?

Una vez configurados, los agentes recopilan registros y datos de métricas de su clúster y de las cargas de trabajo que se ejecutan en él. Estos datos se almacenan en suGoogle Cloud proyecto. Configure el ID del proyecto en el campo project_id en un archivo de configuración cuando instale el reenvío de registros .

Los datos recopilados incluyen lo siguiente:

  • Registros de los servicios del sistema en cada uno de los nodos de trabajo.
  • Registros de aplicaciones para todas las cargas de trabajo que se ejecutan en el clúster.
  • Métricas del clúster y los servicios del sistema. Para obtener más información sobre métricas específicas, consulte Métricas de GKE Enterprise .
  • Si sus aplicaciones están configuradas con objetivos de raspado 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 para pods.

Los agentes se pueden deshabilitar en cualquier momento. Para más información, consulte Limpieza . Los datos recopilados por los agentes se pueden administrar y eliminar como cualquier otra métrica o dato de registro, como se describe en la documentación de Cloud Monitoring y Cloud Logging .

Los datos de registro se almacenan según las reglas de retención configuradas . La retención de datos de métricas varía según el tipo .

Componentes de registro y monitorización

Para exportar telemetría a nivel de clúster desde GKE en AWS aGoogle Cloud, implementa los siguientes componentes en tu clúster:

  • Reenvío de registros de Stackdriver (stackdriver-log-forwarder-*). Un conjunto de daemons de Fluentbit que reenvía registros desde cada nodo de Kubernetes a Cloud Logging.
  • Agente de métricas de GKE (gke-metrics-agent-*). Un DaemonSet basado en el recopilador OpenTelemetry que recopila datos de métricas y los envía a Cloud Monitoring.

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

Prerrequisitos

  1. A Google Cloud Proyecto con facturación habilitada. Para obtener más información sobre los costos, consulte Precios de Google Cloud Observability .

    El proyecto también debe tener habilitadas las API de Cloud Logging y Cloud Monitoring. Para habilitarlas, ejecute los siguientes comandos:

    gcloud services enable logging.googleapis.com
    gcloud services enable monitoring.googleapis.com
    
  2. Un entorno de GKE en AWS, que incluye un clúster de usuarios registrado con Connect. Ejecute el siguiente comando para verificar que el clúster esté registrado.

    gcloud container fleet memberships list
    

    Si su clúster está registrado, Google Cloud CLI imprime el nombre y el ID del clúster.

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

    Si no ve su clúster en la lista, consulte Conectarse a un clúster con Connect

  3. Instale la herramienta de línea de comandos git en su máquina.

Configuración de permisos para Google Cloud Observability

Los agentes de registro y monitorización utilizan Fleet Workload Identity para comunicarse con Cloud Logging y Cloud Monitoring. La identidad necesita permisos para escribir registros y métricas en el proyecto. Para agregar los permisos, ejecute 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

Reemplace PROJECT_ID con su Google Cloud proyecto.

Conectarse al host bastión

Para conectarse a sus recursos de GKE en AWS, siga estos pasos. Seleccione si ya tiene una VPC de AWS (o una conexión directa a su VPC) o si creó una VPC dedicada al crear su servicio de administración.

VPC existente

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

VPC dedicada

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

Para conectarse a su servicio de administración, realice los siguientes pasos:

  1. Vaya al directorio con su configuración de GKE en AWS. Este directorio se creó al instalar el servicio de administración .

    cd anthos-aws

  2. Para abrir el túnel, ejecute el script bastion-tunnel.sh . El túnel redirecciona a localhost:8118 .

    Para abrir un túnel al host bastión, ejecute el siguiente comando:

    ./bastion-tunnel.sh -N
    

    Los mensajes del túnel SSH aparecen en esta ventana. Cuando esté listo para cerrar la conexión, detenga el proceso usando Control+C o cerrando la ventana.

  3. Abra una nueva terminal y cámbiese a su 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 API del servicio de administración.

Registro y monitoreo de la nube 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 nuevos clústeres de usuarios. Para habilitar Cloud Logging o Cloud Monitoring, complete la sección controlPlane.cloudOperations de la configuración de AWSCluster .

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

Reemplace lo siguiente:

  • PROJECT_ID : su ID de proyecto.
  • GC_REGION : el Google Cloud Región donde desea almacenar registros. Elija una región cercana a la región de AWS. Para obtener más información, consulte Ubicaciones globales - Regiones y zonas ; por ejemplo, us-central1 .
  • ENABLE_LOGGING : true o false , si el registro en la nube 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, siga los pasos que se indican en Crear un clúster de usuarios personalizado .

Registro y monitoreo de la nube en nodos de trabajo

Eliminar la versión anterior

Si ha configurado una versión anterior de los agentes de registro y monitoreo que incluye stackdriver-log-aggregator (Fluentd) y stackdriver-prometheus-k8s (Prometheus), es posible que desee desinstalarlos primero antes de continuar.

Instalación del reenvío de registros

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

  1. Desde el directorio anthos-samples/aws-logging-monitoring/ , cambie al directorio logging/ .

    cd logging/
    
  2. Modifique el archivo forwarder.yaml para que coincida con la configuración de su 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
    

    Reemplace lo siguiente:

    • PROJECT_ID : su ID de proyecto.
    • CLUSTER_NAME : El nombre de su clúster, por ejemplo, cluster-0
    • GC_REGION : el Google Cloud Región donde desea almacenar registros. Elija una región cercana a la región de AWS. Para obtener más información, consulte Ubicaciones globales - Regiones y zonas ; por ejemplo, us-central1 .
  3. (Opcional) Según sus cargas de trabajo, la cantidad de nodos en su clúster y la cantidad de pods por nodo, es posible que deba configurar solicitudes de recursos de memoria y CPU. Para obtener más información, consulte Asignaciones recomendadas de CPU y memoria .

  4. Desde su directorio anthos-aws , use anthos-gke para cambiar el contexto a su clúster de usuarios.

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Reemplace CLUSTER_NAME con el nombre de su clúster de usuarios.

  5. Cree la cuenta de servicio stackdriver si no existe e implemente el reenvío 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. Utilice kubectl para verificar que los pods se hayan iniciado.

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

    Debería ver un pod de reenvío por nodo en un grupo de nodos. Por ejemplo, en un clúster de 6 nodos, debería 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 de reenvío de registros

En esta sección, implementará en su clúster una carga de trabajo que contiene un servidor web HTTP básico con un generador de carga. A continuación, comprobará la presencia de registros en Cloud Logging.

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

  1. Implemente el servidor web y el generador de carga en su 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 verificar que puede ver los registros de su clúster en el panel de Cloud Logging, vaya al Explorador de registros en el Google Cloud consola:

    Ir al Explorador de registros

  3. Copie la consulta de muestra a continuación en el campo Generador de consultas .

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

    Reemplace CLUSTER_NAME con el nombre de su clúster.

  4. Haz clic en "Ejecutar consulta" . Deberías ver los registros recientes del clúster en "Resultados de la consulta" .

    Registros de clúster en Google Cloud Observability

  5. Después de haber confirmado que los registros aparecen en los resultados de la consulta, elimine 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
    

Instalación del recopilador de métricas

En esta sección, instala un agente para enviar datos a Cloud Monitoring.

  1. Desde el directorio anthos-samples/aws-logging-monitoring/logging/ , cambie al directorio anthos-samples/aws-logging-monitoring/monitoring/ .

    cd ../monitoring
    
  2. Modifique el archivo gke-metrics-agent.yaml para que coincida con la configuración de su 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
    

    Reemplace lo siguiente:

    • PROJECT_ID : su ID de proyecto.
    • CLUSTER_NAME : El nombre de su clúster, por ejemplo, cluster-0
    • GC_REGION : el Google Cloud Región donde desea almacenar registros. Elija una región cercana a la región de AWS. Para obtener más información, consulte Ubicaciones globales - Regiones y zonas ; por ejemplo, us-central1 .
  3. (Opcional) Según sus cargas de trabajo, la cantidad de nodos en su clúster y la cantidad de pods por nodo, es posible que deba configurar solicitudes de recursos de memoria y CPU. Para obtener más información, consulte Asignaciones recomendadas de CPU y memoria .

  4. Cree la cuenta de servicio stackdriver si no existe e implemente el agente de métricas en su 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. Utilice 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ía ver un pod de agente por nodo en un grupo de nodos. Por ejemplo, en un clúster de 3 nodos, debería 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 su clúster se estén exportando a Cloud Monitoring, vaya al Explorador de métricas en el Google Cloud consola:

    Ir al Explorador de métricas

  7. En el Explorador de métricas, haga clic en Editor de consultas y luego copie 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
    

    Reemplace lo siguiente:

  8. Haz clic en "Ejecutar consulta" . Se mostrará la tasa de puntos métricos enviados a Cloud Monitoring desde cada pod gke-metrics-agent del clúster.

    Monitoreo del cluster

    Algunas otras métricas que vale la pena probar son, entre otras:

    • 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 : recuento de solicitudes de kube-apiserver, solo disponible si Cloud Monitoring está habilitado en el plano de control.

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

Creación de un panel de control en Cloud Monitoring

En esta sección, creará un panel de monitoreo de la nube que monitorea el estado del contenedor en su clúster.

  1. Desde el directorio anthos-samples/aws-logging-monitoring/monitoring/ , cambie al directorio anthos-samples/aws-logging-monitoring/monitoring/dashboards .

    cd dashboards
    
  2. Reemplace las instancias de la cadena CLUSTER_NAME en pod-status.json con el nombre de su clúster.

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

    Reemplace CLUSTER_NAME con el nombre de su clúster.

  3. Cree un panel 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 su panel esté creado, vaya a Paneles de monitoreo de la nube en el Google Cloud consola.

    Ir a Paneles de Control

    Abra el panel recién creado con un nombre en el formato CLUSTER_NAME (Anthos cluster on AWS) pod status .

Limpiando

En esta sección, eliminará los componentes de registro y monitoreo de su clúster.

  1. Eliminar el panel de control de monitoreo en la vista de lista Paneles en elGoogle Cloud consola haciendo clic en el botón eliminar asociado con el nombre del panel.

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

    cd anthos-samples/aws-logging-monitoring
    
  3. Para eliminar todos los recursos creados en esta guía, ejecute 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

Esta sección incluye las CPU y asignaciones recomendadas para los componentes individuales utilizados en el registro y la monitorización. Las siguientes tablas enumeran las solicitudes de CPU y memoria para un clúster con distintos tamaños de nodo. Las solicitudes de recursos para un componente se configuran en el archivo de la tabla.

Para obtener más información, consulte Mejores prácticas de Kubernetes: Solicitudes y límites de recursos y Administración de recursos para contenedores .

1-10 nodos

Archivo Recurso Solicitudes de CPU Límites de CPU Solicitudes de memoria Límites de memoria
monitoring/gke-metrics-agent.yaml agente de métricas de gke 30 metros 100 metros 50 millas 500 millas
logging/forwarder.yaml reenvío de registros de stackdriver 50 metros 100 metros 100 millas 600 millas

10-100 nodos

Archivo Recurso Solicitudes de CPU Límites de CPU Solicitudes de memoria Límites de memoria
monitoring/gke-metrics-agent.yaml agente de métricas de gke 50 metros 100 metros 50 millas 500 millas
logging/forwarder.yaml reenvío de registros de stackdriver 60 metros 100 metros 100 millas 600 millas

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 agente de métricas de gke 50 metros 100 metros 100 millas N / A
logging/forwarder.yaml reenvío de registros de stackdriver 60 metros 100 metros 100 millas 600 millas

¿Que sigue?

Obtenga más información sobre el registro en la nube:

Obtenga más información sobre la monitorización de la nube: