Almacenamiento de registros y monitorización de clústeres vinculados

En esta página se explica cómo exportar registros y métricas de un clúster adjunto a Cloud Logging y Cloud Monitoring.

Cómo funciona

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

  • Agregador de registros de Stackdriver (stackdriver-log-aggregator-*): un StatefulSet de Fluentd que envía registros a la API de Cloud Logging (antes Stackdriver Logging).
  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*): un daemonset de Fluentbit que reenvía los registros de cada nodo de Kubernetes al agregador de registros de Stackdriver.
  • Recogedor 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 (antes Stackdriver Monitoring). El sidecar es otro contenedor que se encuentra en el mismo pod y que lee las métricas que el servidor de Prometheus almacena en el disco y las reenvía a la API de Cloud Monitoring.

Requisitos previos

  1. Un Google Cloud proyecto con la facturación habilitada. Consulta nuestra guía de precios para obtener información sobre los costes de Cloud Operations.

  2. Un clúster adjunto registrado siguiendo esta guía. Ejecuta el siguiente comando para verificar que tu clúster está registrado.

    gcloud container fleet memberships list
    

    Ejemplo:

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

  3. Un entorno local desde el que puedes acceder a tu clúster y ejecutar comandos kubectl. Consulta la guía de inicio rápido de GKE para obtener instrucciones sobre cómo instalar kubectl mediante gcloud. Ejecuta el siguiente comando para verificar que puedes acceder al clúster adjunto mediante kubectl.

    kubectl cluster-info
    

    Ejemplo:

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

Configuración

  1. Clona el repositorio de muestra y ve al directorio de esta guía.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/attached-logging-monitoring
    
  2. Asigna a la variable de ID de proyecto el proyecto en el que has registrado tu clúster.

    PROJECT_ID="your-project-id"
    
  3. Crea una Google Cloud cuenta de servicio con permisos para escribir métricas y registros en las APIs Cloud Monitoring y Cloud Logging. Añadirás 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. Crea y descarga una clave JSON para la cuenta de servicio que acabas de crear y, a continuación, crea un secreto de Kubernetes en tu clúster con 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
    

Instalar el agente de registro

  1. Cambia al directorio logging/.

    cd logging/
    
  2. Abre aggregator.yaml. En la parte inferior del archivo, asigna a las siguientes variables el valor correspondiente a tu proyecto y clúster:

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

    Para encontrar la ubicación de tu clúster, ejecuta el siguiente comando con el nombre de miembro del clúster adjunto y obtén la ubicación que aparece en /locations/<location>.

    gcloud container fleet memberships describe eks | grep name
    

    Resultado:

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

  3. En aggregator.yaml, en volumeClaimTemplates/spec, especifica el storageClassName PersistentVolumeClaim de tu clúster. Hemos proporcionado valores predeterminados para EKS y AKS que puedes descomentar según corresponda. Si usas EKS, esta es la gp2. En el caso de AKS, es default.

    Si has configurado una clase de almacenamiento de Kubernetes personalizada en AWS o Azure, quieres usar una clase de almacenamiento que no sea la predeterminada o estás usando otro tipo de clúster conforme, puedes añadir tu propio storageClassName. El storageClassName adecuado se basa en el tipo de PersistentVolume (PV) que ha aprovisionado un administrador para el clúster mediante StorageClass. Puedes consultar más información sobre las clases de almacenamiento y las clases de almacenamiento predeterminadas de otros proveedores importantes de Kubernetes en la documentación de Kubernetes.

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Despliega el agregador y el reenviador de registros en el clúster.

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. Verifica que los pods se hayan iniciado. Deberías ver dos pods de agregador y un pod de reenvío por cada nodo de trabajador de Kubernetes. Por ejemplo, en un clúster de 4 nodos, deberías ver 4 pods de reenvío.

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

    Resultado:

    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. Obtén los registros del agregador y verifica que se envían a Google Cloud.

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

    Resultado:

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

  7. Despliega una aplicación de prueba en tu 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. Comprueba que puedes ver los registros de tu clúster adjunto en el panel de control de Cloud Logging. Ve al Explorador de registros de la Google Cloud consola:

    Ir a Explorador de registros

  9. En Explorador de registros, copia la consulta de ejemplo que aparece a continuación en el campo Generador de consultas y sustituye ${your-cluster-name} por el nombre de tu clúster. Haz clic en Ejecutar consulta. Deberías ver los registros recientes del clúster en Resultados de la consulta.

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

Registros de clústeres vinculados

Instalar el agente de monitorización

  1. Sal del directorio logging/ y ve al directorio monitoring/.

    cd ../monitoring
    
  2. Abre prometheus.yaml. En stackdriver-prometheus-sidecar/args, define las siguientes variables para que coincidan con tu entorno.

    "--stackdriver.project-id=[PROJECT_ID]"
    "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]"
    "--stackdriver.generic.location=[CLUSTER_LOCATION]"
    "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
    
  3. En prometheus.yaml, en volumeClaimTemplates/spec, descomenta el storageClassName que coincida con tu proveedor de nube, tal como se describe en Instalar el agente de registro.

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

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

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

    kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
    
    Resultado:
    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. Verifica que las métricas del clúster se exportan correctamente a Cloud Monitoring. Ve a Explorador de métricas en la Google Cloud consola:

    Ir a Explorador de métricas

  8. Haz clic en Editor de consultas y, a continuación, copia el siguiente comando. Sustituye ${your-project-id} y ${your-cluster-name} por la información de tu proyecto y clúster. A continuación, 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
    

Monitorización de clústeres vinculados

Limpieza

  1. Para eliminar todos los recursos creados en esta guía, sigue estos pasos:

    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
    

Siguientes pasos

Consulta información sobre Cloud Logging:

Consulta información sobre Cloud Monitoring: