Registro y supervisión de clústeres conectados

Esta página le muestra cómo exportar registros y métricas desde un clúster adjunto a Cloud Logging y Cloud Monitoring.

Cómo funciona

Google Cloud Observability es la solución de observabilidad integrada paraGoogle Cloud. Para exportar telemetría a nivel de clúster desde un clúster adjunto a Google Cloud, debe implementar los siguientes agentes de exportación de código abierto en su clúster:

  • Agregador de registros de Stackdriver (stackdriver-log-agregator-*). Un conjunto con estado de Fluentd que envía registros a la API de Cloud Logging (anteriormente Stackdriver Logging).
  • Reenvío de registros de Stackdriver (stackdriver-log-forwarder-*). Un conjunto de datos de Fluentbit que reenvía registros desde cada nodo de Kubernetes al Agregador de registros de Stackdriver.
  • Recopilador de métricas de Stackdriver (stackdriver-prometheus-k8s-*). Un StatefulSet de Prometheus, configurado con un contenedor sidecar de exportación de Stackdriver, para enviar métricas de Prometheus a la API de Cloud Monitoring (anteriormente Stackdriver Monitoring). El contenedor sidecar es otro contenedor dentro del mismo pod que lee las métricas que el servidor de Prometheus almacena en el disco y las reenvía a la API de Cloud Monitoring.

Prerrequisitos

  1. A Google Cloud Proyecto con facturación habilitada. Consulta nuestra guía de precios para conocer los costos de Operaciones en la Nube.

  2. Un clúster conectado, registrado según esta guía . Ejecute el siguiente comando para verificar que el clúster esté registrado.

    gcloud container fleet memberships list
    

    Ejemplo de salida:

    NAME  EXTERNAL_ID
    eks   ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
    

  3. Un entorno local desde el que puede acceder a su clúster y ejecutar comandos kubectl . Consulte la guía de inicio rápido de GKE para obtener instrucciones sobre cómo instalar kubectl mediante gcloud. Ejecute el siguiente comando para verificar que puede acceder a su clúster conectado mediante kubectl .

    kubectl cluster-info
    

    Ejemplo de salida:

    Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
    

Configuración

  1. Clone el repositorio de muestra y navegue hasta el directorio de esta guía.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/attached-logging-monitoring
    
  2. Establezca la variable ID del proyecto en el proyecto en el que ha registrado su clúster.

    PROJECT_ID="your-project-id"
    
  3. Crear una Google Cloud Cuenta de servicio con permisos para escribir métricas y registros en las API de Cloud Monitoring y Cloud Logging. Agregará la clave de esta cuenta de servicio a las cargas de trabajo implementadas en la siguiente sección.

    gcloud iam service-accounts create anthos-lm-forwarder
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role=roles/monitoring.metricWriter
    
  4. Cree y descargue una clave JSON para la cuenta de servicio que acaba de crear, luego cree un secreto de Kubernetes en su clúster usando esa clave.

    gcloud iam service-accounts keys create credentials.json \
    --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com
    
    kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
    

Instalación del agente de registro

  1. Cambie al directorio logging/ .

    cd logging/
    
  2. Abra aggregator.yaml . Al final del archivo, configure las siguientes variables con el valor correspondiente a su proyecto y clúster:

    project_id [PROJECT_ID]
    k8s_cluster_name [CLUSTER_NAME]
    k8s_cluster_location [CLUSTER_LOCATION]
    

    Puede encontrar la ubicación de su clúster ejecutando el siguiente comando con el nombre de membresía del clúster adjunto y obteniendo la ubicación que aparece en /locations/<location> .

    gcloud container fleet memberships describe eks | grep name
    

    Producción:

    name: projects/my-project/locations/global/memberships/eks
    

  3. En aggregator.yaml , en volumeClaimTemplates/spec , especifique el storageClassName de PersistentVolumeClaim para su clúster. Hemos proporcionado valores predeterminados para EKS y AKS para que los descomente según corresponda. Si usa EKS, este es gp2 . Para AKS, este es default .

    Si ha configurado una clase de almacenamiento de Kubernetes personalizada en AWS o Azure , desea usar una clase de almacenamiento distinta a la predeterminada o utiliza otro tipo de clúster compatible, puede agregar su propio storageClassName ). El storageClassName adecuado se basa en el tipo de volumen persistente (PV) aprovisionado por un administrador para el clúster mediante StorageClass . Puede obtener más información sobre las clases de almacenamiento y las clases de almacenamiento predeterminadas de otros proveedores principales de Kubernetes en la documentación de Kubernetes .

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Implemente el agregador y reenvío de registros en el clúster.

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. Verifique que los pods se hayan iniciado. Debería ver dos pods de agregación y un pod de reenvío por cada nodo de trabajo de Kubernetes. Por ejemplo, en un clúster de 4 nodos, debería ver cuatro pods de reenvío.

    kubectl get pods -n kube-system | grep stackdriver-log
    

    Producción:

    stackdriver-log-aggregator-0                 1/1     Running   0          139m
    stackdriver-log-aggregator-1                 1/1     Running   0          139m
    stackdriver-log-forwarder-2vlxb              1/1     Running   0          139m
    stackdriver-log-forwarder-dwgb7              1/1     Running   0          139m
    stackdriver-log-forwarder-rfrdk              1/1     Running   0          139m
    stackdriver-log-forwarder-sqz7b              1/1     Running   0          139m
    

  6. Obtenga registros del agregador y verifique que los registros se envíen a Google Cloud.

    kubectl logs stackdriver-log-aggregator-0 -n kube-system
    

    Producción:

    2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
    

  7. Implemente una aplicación de prueba en su clúster. Se trata de un servidor web HTTP básico con un generador de carga.

    kubectl apply -f  https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
  8. Verifique que pueda ver los registros de su clúster conectado en el panel de Cloud Logging. Vaya al Explorador de registros en el... Google Cloud consola:

    Ir al Explorador de registros

  9. En el Explorador de registros, copie la consulta de ejemplo a continuación en el campo Generador de consultas , reemplazando ${your-cluster-name} por el nombre de su clúster. Haga clic en Ejecutar consulta . Debería ver los registros recientes del clúster en Resultados de la consulta .

    resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
    

Registros del clúster adjunto

Instalación del agente de monitorización

  1. Navegue fuera del directorio logging/ y entre al directorio monitoring/ .

    cd ../monitoring
    
  2. Abra prometheus.yaml . En stackdriver-prometheus-sidecar/args , configure las siguientes variables para que coincidan con su entorno.

    "--stackdriver.project-id=[PROJECT_ID]"
    "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]"
    "--stackdriver.generic.location=[CLUSTER_LOCATION]"
    "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
    
  3. Desde prometheus.yaml, en volumeClaimTemplates/spec , descomente el storageClassName que coincida con su proveedor de nube, como se describe en Instalación del agente de registro.

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Implemente el StatefulSet de stackdriver-prometheus, configurado con el sidecar del exportador, en su clúster.

    kubectl apply -f server-configmap.yaml
    kubectl apply -f sidecar-configmap.yaml
    kubectl apply -f prometheus.yaml
    
  5. Verifique que el pod stackdriver-prometheus se esté ejecutando.

    watch kubectl get pods -n kube-system | grep stackdriver-prometheus
    
    Producción:
    stackdriver-prometheus-k8s-0         2/2     Running   0          5h24m
    
  6. Obtenga los registros del contenedor sidecar de Stackdriver Prometheus para verificar que el pod se haya iniciado.

    kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
    
    Producción:
    level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started"
    level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started"
    
  7. Verifique que las métricas del clúster se exporten correctamente a Cloud Monitoring. Vaya al Explorador de métricas en el... Google Cloud consola:

    Ir al Explorador de métricas

  8. Haz clic en el editor de consultas y copia el siguiente comando, reemplazando ${your-project-id} y ${your-cluster-name} con la información de tu proyecto y clúster. Luego, haz clic en ejecutar consulta . Deberías ver 1.0.

    fetch k8s_container
    | metric 'kubernetes.io/anthos/up'
    | filter
        resource.project_id == '${your-project-id}'
        && (resource.cluster_name =='${your-cluster-name}')
    | group_by 1m, [value_up_mean: mean(value.up)]
    | every 1m
    

Monitoreo del clúster adjunto

Limpiar

  1. Para eliminar todos los recursos creados en esta guía:

    kubectl delete -f logging
    kubectl delete -f monitoring
    kubectl delete secret google-cloud-credentials -n kube-system
    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    rm -r credentials.json
    gcloud compute service-accounts delete anthos-lm-forwarder
    

¿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: