Saltar al contenido

¿Cómo activo las métricas de Información de contenedores en un clúster de Amazon EKS?

7 minutos de lectura
0

Quiero configurar Información de contenedores de Amazon CloudWatch para ver las métricas de mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Resolución

Información de contenedores solo es compatible con instancias de Linux. Amazon proporciona una imagen de contenedor de agentes de CloudWatch en Amazon Elastic Container Registry (Amazon ECR). Para más información, consulta cloudwatch-agent/cloudwatch-agent.

Antes de empezar, asegúrate de cumplir los requisitos previos de Información de contenedores en CloudWatch. Para los clústeres de AWS Fargate, debes definir un perfil de Fargate para programar los pods. Además, el rol de Identity and Access Management (IAM) del pod de Amazon EKS debe permitir a los componentes que se ejecutan en la infraestructura de Fargate realizar llamadas a las API de AWS. Por ejemplo, el rol de IAM debe poder extraer imágenes de contenedores de Amazon ECR.

Uso del agente de CloudWatch para configurar las métricas de Información de contenedores en un clúster de EC2

El agente de CloudWatch crea un grupo de registro denominado aws/containerinsights/Cluster_Name/performance y, a continuación, envía los eventos de registro de rendimiento a este grupo de registro. Al configurar Información de contenedores para recopilar métricas, debes desplegar la imagen del contenedor del agente de CloudWatch como DaemonSet desde Docker Hub. De forma predeterminada, la imagen del contenedor se despliega como usuario anónimo.

Nota: Docker puede limitar la cantidad de imágenes que puedes extraer.

Para usar el agente de CloudWatch para configurar Información de contenedores, sigue estos pasos:

  1. Ejecuta el siguiente comando para crear un espacio de nombres amazon-cloudwatch:

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
  2. Ejecuta el siguiente comando para crear una cuenta de servicio para el agente de CloudWatch denominado cloudwatch-agent:

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml
  3. Ejecuta el siguiente comando para crear un configmap como archivo de configuración para el agente de CloudWatch:

    ClusterName= my-cluster-name curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap.yaml | sed 's/cluster_name/'${ClusterName}'/' | kubectl apply -f -

    Nota: Sustituye my-cluster-name por el nombre de tu clúster de EKS. Para más información, consulta Creación de un ConfigMap para el agente de CloudWatch.

  4. Ejecuta el siguiente comando para desplegar el DaemonSet de cloudwatch-agent:

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
  5. (Opcional) Ejecuta el siguiente comando para aplicar un parche al DaemonSet de cloudwatch-agent de modo que extraiga el agente de CloudWatch del ECR:

    kubectl patch ds cloudwatch-agent -n amazon-cloudwatch -p \ '{"spec":{"template":{"spec":{"containers":[{"name":"cloudwatch-agent","image":"public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest"}]}}}}'

    Nota: La imagen de Docker del agente de CloudWatch en ECR es compatible con las arquitecturas ARM y AMD64. Sustituye la etiqueta de imagen más reciente en función de la versión y la arquitectura de la imagen. Para más información, consulta cloudwatch-agent/cloudwatch-agent.

  6. Para los roles de IAM para las cuentas de servicio, crea un proveedor de OIDC y un rol y una política de IAM. A continuación, ejecuta el siguiente comando para asociar el rol de IAM a la cuenta de servicio cloudwatch-agent:

    kubectl annotate serviceaccounts cloudwatch-agent -n amazon-cloudwatch "eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME"

    Nota: Sustituye ACCOUNT_ID por tu ID de cuenta e IAM_ROLE_NAME por el rol de IAM que utilizas para las cuentas de servicio.

Solución de problemas con el agente de CloudWatch

Sigue estos pasos:

  1. Ejecuta el siguiente comando para recuperar la lista de pods:

    kubectl get pods -n amazon-cloudwatch
  2. Ejecuta el siguiente comando para comprobar los eventos en la parte inferior de la salida:

    kubectl describe pod pod-name -n amazon-cloudwatch
  3. Ejecuta el siguiente comando para comprobar el estado de los registros:

    kubectl logs pod-name -n amazon-cloudwatch
  4. Si ves un error de CrashLoopBackOff en el agente de CloudWatch, confirma que has configurado correctamente los permisos de IAM.

Eliminación del agente de CloudWatch

Ejecuta el siguiente comando para eliminar el agente de CloudWatch:

kubectl delete -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

Nota: Si eliminas el espacio de nombres, también se eliminan los recursos asociados.

Uso de Distro para OpenTelemetry para configurar las métricas de Información de contenedores en un clúster de EKS

AWS Distro para OpenTelemetry crea un grupo de registro denominado aws/containerinsights/Cluster_Name/performance y, a continuación, envía los eventos de registro de rendimiento a este grupo de registro.

Sigue estos pasos:

  1. Ejecuta el siguiente comando para desplegar el recopilador de AWS OpenTelemetry como un DaemonSet:

    curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-container-insights-infra.yaml | kubectl apply -f -

    Nota: Para más información, consulta Métricas de infraestructura de EKS de Información de contenedores.

  2. Ejecuta el siguiente comando para confirmar que el recopilador se está ejecutando:

    kubectl get pods -l name=aws-otel-eks-ci -n aws-otel-eks
  3. (Opcional) Ejecuta el siguiente comando para crear un parche del DaemonSet aws-otel-eks-ci de modo que extraiga la imagen de Docker aws-otel-collector en ECR:

    kubectl patch ds aws-otel-eks-ci -n aws-otel-eks -p \'{"spec":{"template":{"spec":{"containers":[{"name":"aws-otel-collector","image":"public.ecr.aws/aws-observability/aws-otel-collector:latest"}]}}}}'

    Nota: La imagen de Docker Cloudwatch-agent en ECR es compatible con las arquitecturas ARM y AMD64. Sustituye la etiqueta de imagen más reciente en función de la versión y la arquitectura de la imagen.

  4. (Opcional) Para los roles de IAM para las cuentas de servicio, crea un proveedor de OIDC y un rol y una política de IAM. A continuación, ejecuta el siguiente comando para asociar el rol de IAM a la cuenta de servicio aws-otel-sa:

    kubectl annotate serviceaccounts aws-otel-sa -n aws-otel-eks "eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME"

    Nota: Sustituye ACCOUNT_ID por tu ID de cuenta e IAM_ROLE_NAME por el rol de IAM que utilizas para las cuentas de servicio.

Eliminación de Distro para OpenTelemetry

Ejecuta el siguiente comando para eliminar Distro para OpenTelemetry:

curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-container-insights-infra.yaml |kubectl delete -f -

Uso de Distro para OpenTelemetry para configurar las métricas de Información de contenedores en un clúster de EKS Fargate

Para las aplicaciones que se ejecutan en EKS y Fargate, puedes usar Distro para OpenTelemetry para configurar Información de contenedores.<br id=hardline_break/> El recopilador de AWS OpenTelemetry envía las siguientes métricas a CloudWatch para cada carga de trabajo que se ejecuta en EKS Fargate:

  • pod_cpu_utilization_over_pod_limit
  • pod_cpu_usage_total
  • pod_cpu_limit
  • pod_memory_utilization_over_pod_limit
  • pod_memory_working_set
  • pod_memory_limit
  • pod_network_rx_bytes
  • pod_network_tx_bytes

El recopilador de AWS OpenTelemetry recopila cada métrica en el espacio de nombres de CloudWatch denominado ContainerInsights. En la consola de CloudWatch, elige Métricas y, a continuación, Todas las métricas. Puedes ir a ContainerInsights en Espacio de nombres personalizado.

Cada métrica está asociada a los siguientes conjuntos de dimensiones:

  • ClusterName, LaunchType
  • ClusterName, Namespace, LaunchType
  • ClusterName, Namespace, PodName, LaunchType

Para más información, consulta Información de contenedores en EKS Fargate.

Para desplegar Distro para OpenTelemetry en tu EKS Fargate, sigue estos pasos:

  1. Crea un espacio de nombres denominado fargate-container-insights.

  2. Usa el siguiente script para crear un rol de IAM denominado EKS-ADOT-ServiceAccount-Role que esté asociado a una cuenta de servicio de Kubernetes denominada adot-collector. El siguiente script auxiliar requiere eksctl:

    #!/bin/bashCLUSTER_NAME=YOUR-EKS-CLUSTER-NAMEREGION=YOUR-EKS-CLUSTER-REGION
    SERVICE_ACCOUNT_NAMESPACE=fargate-container-insights
    SERVICE_ACCOUNT_NAME=adot-collector
    SERVICE_ACCOUNT_IAM_ROLE=EKS-Fargate-ADOT-ServiceAccount-Role
    SERVICE_ACCOUNT_IAM_POLICY=arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
    kubectl create ns fargate-container-insights
    eksctl utils associate-iam-oidc-provider \
    --cluster=$CLUSTER_NAME \
    --approve
    eksctl create iamserviceaccount \
    --cluster=$CLUSTER_NAME \
    --region=$REGION \
    --name=$SERVICE_ACCOUNT_NAME \
    --namespace=$SERVICE_ACCOUNT_NAMESPACE \
    --role-name=$SERVICE_ACCOUNT_IAM_ROLE \
    --attach-policy-arn=$SERVICE_ACCOUNT_IAM_POLICY \
    --approve

    Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster y REGION por tu región de AWS.

  3. Ejecuta el siguiente comando para desplegar el recopilador de AWS OpenTelemetry como un StatefulSet de Kubernetes:

    ClusterName= your-cluster-name Region= your-cluster-region curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-fargate-container-insights.yaml | sed 's/YOUR-EKS-CLUSTER-NAME/'${ClusterName}'/;s/us-east-1/'${Region}'/' | kubectl apply -f -

    Nota: Sustituye your-cluster-name por el nombre de tu clúster y your-cluster-region por la región en la que se encuentra tu clúster. Confirma que tienes un perfil de Fargate coincidente para aprovisionar los pods de StatefulSet en Fargate.

  4. Ejecuta el siguiente comando para comprobar que el pod del recopilador de Distro para Open Telemetry se está ejecutando:

    kubectl get pods -n fargate-container-insights
  5. (Opcional) Ejecuta el siguiente comando para crear un parche del StatefulSet adot-collector de modo que extraiga la imagen de Docker aws-otel-collector en ECR:

    kubectl patch sts adot-collector -n fargate-container-insights -p \'{"spec":{"template":{"spec":{"containers":[{"name":"adot-collector","image":"public.ecr.aws/aws-observability/aws-otel-collector:latest"}]}}}}'

Eliminación de Distro para OpenTelemetry

Ejecuta el siguiente comando para eliminar Distro para OpenTelemetry:

eksctl delete iamserviceaccount --cluster CLUSTER_NAME --name adot-collector
ClusterName= your-cluster-name Region= your-cluster-region
curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-fargate-container-insights.yaml | sed 's/YOUR-EKS-CLUSTER-NAME/'${ClusterName}'/;s/us-east-1/'${Region}'/' | kubectl delete -f -

Nota: Sustituye your-cluster-name por el nombre de tu clúster y your-cluster-region por la región en la que se encuentra tu clúster.

OFICIAL DE AWSActualizada hace un año