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

8 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).

Descripción breve

Cuando utiliza Información de contenedores con Amazon EKS, se utiliza una versión en contenedores del agente de CloudWatch para buscar todos los contenedores que se ejecutan en un clúster. Información de contenedores también usa el recopilador de AWS Distro para OpenTelemetry (ADOT) para buscar contenedores en un clúster. A continuación, Información de contenedores recopila datos de rendimiento en cada capa de la pila de rendimiento, como los eventos de registro de rendimiento que utilizan un formato de métricas integrado. Posteriormente, Información de contenedores envía estos datos a CloudWatch Logs en el grupo de registro /aws/containerinsights/cluster-name/performance, donde CloudWatch crea métricas agregadas a nivel de clúster, nodo y pod. Container Insights también admite la recopilación de métricas de los clústeres implementados en AWS Fargate para Amazon EKS. Para más información, consulte Uso de Información de contenedores.

Nota: 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, consulte cloudwatch-agent/cloudwatch-agent en Amazon ECR.

Resolución

Requisitos previos

  • El clúster de Amazon EKS se ejecuta con los nodos en estado Ready y el comando kubectl está instalado y en ejecución.
  • La política CloudWatchAgentServerPolicy administrada de AWS Identity and Access Management (IAM) activa los nodos de trabajo de Amazon EKS para enviar métricas y registros a CloudWatch. Para activar sus nodos de trabajo, adjunte una política al rol de IAM de los nodos de trabajo. O bien, utilice un rol de IAM para las cuentas de servicio del clúster y asocie la política a este rol. Para obtener más información, consulte Roles de IAM para cuentas de servicio.
  • Está ejecutando un clúster compatible con la versión 1.18 o superior de Kubernetes. Este es un requisito de Información de contenedores para EKS Fargate. Además, asegúrese de definir un perfil de Fargate para programar los pods en Fargate.
  • El rol de IAM del pod de Amazon EKS debe permitir que los componentes que se ejecutan en la infraestructura de Fargate realicen llamadas a las API de AWS en su nombre. Por ejemplo, el rol de IAM debe poder extraer imágenes de contenedores de Amazon ECR.

Utilice el agente de CloudWatch para configurar las métricas de Información de contenedores en su clúster de EC2

En primer lugar, el agente de CloudWatch o ADOT crea un grupo de registro denominado aws/containerinsights/Cluster_Name/performance y, a continuación, envía los eventos del registro de rendimiento a este grupo de registro. Al configurar Información de contenedores para recopilar métricas, debe implementar la imagen del contenedor del agente de CloudWatch como DaemonSet desde Docker Hub. De forma predeterminada, esto se hace como usuario anónimo. Esta extracción podría estar sujeta a un límite de velocidad.

1.    Si no tiene un espacio de nombres de amazon-cloudwatch, cree uno:

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.    Cree una cuenta de servicio para el agente de CloudWatch denominada 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.    Cree 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: Sustituya my-cluster-name por el nombre de su clúster de EKS. Para más información, consulte Crear un ConfigMap para el agente de CloudWatch.

4.    Implemente el DaemonSet 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

(Opcional) Para extraer el agente de CloudWatch de Amazon Elastic Container Registry, parchee el DaemonSet cloudwatch-agent:

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 Cloudwatch-agent en Amazon ECR es compatible con las arquitecturas ARM y AMD64. Sustituya 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, consulte las etiquetas de imágenes cloudwatch-agent en Amazon ECR.

5.    Para los roles de IAM para las cuentas de servicio, cree un proveedor de OIDC y un rol y una política de IAM. A continuación, asocie 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: Sustituya ACCOUNT_ID por su ID de cuenta e IAM_ROLE_NAME por el rol de IAM que utiliza para las cuentas de servicio.

Solucionar problemas con el agente de CloudWatch

1.    Para recuperar la lista de pods, ejecute este comando:

kubectl get pods -n amazon-cloudwatch

2.    Para comprobar los eventos en la parte inferior de la salida, ejecute este comando:

kubectl describe pod pod-name -n amazon-cloudwatch

3.    Compruebe los registros:

kubectl logs pod-name -n amazon-cloudwatch

4.    Si ve un error de CrashLoopBackOff en el agente de CloudWatch, asegúrese de que los permisos de IAM estén configurados correctamente. Para más información, consulte Verificar los requisitos previos.

Eliminar el agente de CloudWatch

Para eliminar el agente de CloudWatch, ejecute este comando:

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: Al eliminar el espacio de nombres, también se eliminan los recursos asociados.

Utilice ADOT para configurar las métricas de Información de contenedores en su clúster de EC2

1.    Para implementar el recopilador de ADOT como DaemonSet, ejecute el siguiente comando:

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

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

2.    Para confirmar que el recopilador se está ejecutando, ejecute este comando:

kubectl get pods -l name=aws-otel-eks-ci -n aws-otel-eks

3.    (Opcional) De forma predeterminada, la imagen aws-otel-collector se extrae de Docker Hub como usuario anónimo. Esta extracción podría estar sujeta a un límite de velocidad. Para extraer la imagen de Docker aws-otel-collector en Amazon ECR, parchee el DaemonSet aws-otel-eks-ci:

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 Amazon ECR es compatible con las arquitecturas ARM y AMD64. Sustituya 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, consulte las etiquetas de imágenes cloudwatch-agent en Amazon ECR.

4.    (Opcional) Para los roles de IAM para las cuentas de servicio, cree un proveedor de OIDC y un rol y una política de IAM. A continuación, asocie 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: Sustituya ACCOUNT_ID por su ID de cuenta e IAM_ROLE_NAME por el rol de IAM que utiliza para las cuentas de servicio.

Eliminar ADOT

Para eliminar ADOT, ejecute este comando:

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

Utilice ADOT para configurar las métricas de Información de contenedores en un clúster de EKS Fargate

Para las aplicaciones que se ejecutan en Amazon EKS y AWS Fargate, puede usar ADOT para configurar Información de contenedores. La arquitectura de red de EKS Fargate no permite que los pods lleguen directamente al kubelet del trabajador para recuperar las métricas de los recursos. En primer lugar, el recopilador de ADOT llama al servidor de la API de Kubernetes para establecer un proxy de la conexión al kubelet en un nodo de trabajo. A continuación, recopila las métricas de los asesores del kubelet para las cargas de trabajo de ese nodo.

El recopilador de ADOT 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

Cada métrica está asociada a estos conjuntos de dimensiones y se recopila en el espacio de nombres de CloudWatch denominado ContainerInsights:

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

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

Para implementar ADOT en su EKS Fargate, siga estos pasos:

1.    Asocie una cuenta de servicio de Kubernetes a un rol de IAM. Cree 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-NAME
REGION=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

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: Sustituya CLUSTER_NAME por el nombre de su clúster y REGION por su región de AWS.

2.    Para implementar el recopilador de ADOT como un StatefulSet de Kubernetes, ejecute el siguiente comando:

ClusterName=<my-cluster-name>Region=<my-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: Asegúrese de tener un perfil de Fargate coincidente para aprovisionar los pods de StatefulSet en AWS Fargate. Sustituya my-cluster-name por el nombre de su clúster y my-cluster-region por la región de AWS en la que se encuentra su clúster.

3.    Para comprobar que el pod del recopilador de ADOT se está ejecutando, ejecute el siguiente comando:

kubectl get pods -n fargate-container-insights

4.    (Opcional) De forma predeterminada, la imagen aws-otel-collector se extrae de Docker Hub como usuario anónimo. Esta extracción podría estar sujeta a un límite de velocidad. Para extraer la imagen de Docker aws-otel-collector en Amazon ECR, parchee el StatefulSet adot-collector:

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"}]}}}}'

Eliminar ADOT

Para eliminar ADOT, ejecute este comando:

eksctl delete iamserviceaccount --cluster CLUSTER_NAME --name adot-collector

ClusterName=<my-cluster-name>Region=<my-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 -
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año