Come posso attivare le metriche di Container Insights su un cluster Amazon EKS?

8 minuti di lettura
0

Desidero configurare Amazon CloudWatch Container Insights per visualizzare le metriche del mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Quando si utilizza Container Insights con Amazon EKS, Container Insights utilizza una versione containerizzata dell'agente CloudWatch per trovare tutti i container in esecuzione in un cluster. Container Insights utilizza anche il raccoglitore AWS Distro per OpenTelemetry (ADOT) per trovare container in un cluster. Container Insights raccoglie quindi i dati sulle prestazioni a ogni livello dello stack delle prestazioni, come i log eventi delle prestazioni che utilizzano un formato metrico incorporato. Successivamente, Container Insights invia questi dati a CloudWatch Logs nel gruppo di log /aws/containerinsights/cluster-name/performance in cui CloudWatch crea metriche aggregate a livello di cluster, nodo e pod. Container Insights supporta anche la raccolta di metriche dai cluster distribuiti su AWS Fargate per Amazon EKS. Per ulteriori informazioni, consulta la pagina Utilizzo di Container Insights.

Nota: Container Insights è supportato solo su istanze Linux. Amazon fornisce un'immagine del container dell'agente CloudWatch su Amazon Elastic Container Registry (Amazon ECR). Per ulteriori informazioni, consulta agente cloudwatch/agente cloudwatch su Amazon ECR.

Risoluzione

Prerequisiti

  • Il tuo cluster Amazon EKS è in esecuzione con nodi nello stato Pronto e il comando kubectl è installato e in esecuzione.
  • La policy CloudWatchAgentServerPolicy gestita da AWS Identity and Access Management (IAM) attiva i nodi worker Amazon EKS per inviare metriche e log a CloudWatch. Per attivare i nodi worker, collega una policy al ruolo IAM dei nodi worker. Oppure, usa un ruolo IAM per gli account di servizio per il cluster e collega la policy a questo ruolo. Per ulteriori informazioni, consulta Ruoli IAM per gli account di servizio.
  • Assicurati di utilizzare un cluster che supporti Kubernetes versione 1.18 o successiva. Questo è un requisito di Container Insights per EKS Fargate. Inoltre, assicurati di definire un profilo Fargate per programmare i pod su Fargate.
  • Il ruolo IAM del pod Amazon EKS deve consentire ai componenti in esecuzione sull'infrastruttura Fargate di eseguire chiamate alle API AWS per tuo conto. Ad esempio, il ruolo IAM deve essere in grado di estrarre immagini dei container da Amazon ECR.

Utilizza l’agente Cloudwatch per configurare le metriche di Container Insights sul tuo cluster EC2

L'agente CloudWatch o ADOT crea prima un gruppo di log denominato aws/containerinsights/Cluster_Name/performance, quindi invia i log eventi delle prestazioni a questo gruppo di log. Quando si configura Container Insights per raccogliere le metriche, è necessario distribuire l'immagine del container dell'agente CloudWatch come DaemonSet da Docker Hub. Per impostazione predefinita, questa operazione viene eseguita come utente anonimo. Questo pull può essere soggetto a un limite di velocità.

1.    Se non disponi di uno spazio dei nomi chiamato amazon-cloudwatch, creane 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.    Crea un account di servizio per l'agente CloudWatch denominato 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.    Crea una configmap come file di configurazione per l'agente 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: sostituisci my-cluster-name con il nome del tuo cluster EKS. Per ulteriori informazioni, consulta Creare un file ConfigMap per l'agente CloudWatch.

4.    Implementa il 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

(Facoltativo) per estrarre l'agente CloudWatch da Amazon Elastic Container Registry, applica una patch al 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: l'immagine Docker di Cloudwatch-agent su Amazon ECR supporta le architetture ARM e AMD64. Sostituisci il tag dell'immagine più recente in base alla versione e all'architettura dell'immagine. Per ulteriori informazioni, consulta i tag delle immagini cloudwatch-agent su Amazon ECR.

5.    Per i ruoli IAM per gli account di servizio, crea un provider OIDC, un ruolo e una policy IAM. Quindi, associa il ruolo IAM all'account di servizio 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: sostituisci ACCOUNT_ID con l'ID del tuo account e IAM_ROLE_NAME con il ruolo IAM che usi per gli account di servizio.

Risolvi i problemi relativi all'agente CloudWatch

1.    Per recuperare l'elenco dei pod, esegui questo comando:

kubectl get pods -n amazon-cloudwatch

2.    Per controllare gli eventi nella parte inferiore dell'output, esegui questo comando:

kubectl describe pod pod-name -n amazon-cloudwatch

3.    Controlla i registri:

kubectl logs pod-name -n amazon-cloudwatch

4.    Se visualizzi un errore CrashLoopBackoff per l'agente CloudWatch, assicurati che le autorizzazioni IAM siano impostate correttamente. Per ulteriori informazioni, consulta Verify prerequisites.

Elimina l'agente CloudWatch

Per eliminare l'agente CloudWatch, esegui questo 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: l'eliminazione dello spazio dei nomi comporta anche l'eliminazione delle risorse associate.

Usa ADOT per configurare le metriche di Container Insights sul tuo cluster EC2

1.    Esegui questo comando per distribuire il raccoglitore ADOT come DaemonSet:

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

Per ulteriori informazioni, consulta la pagina Metriche dell’infrastruttura EKS di Container Insights.

2.    Per confermare che il raccoglitore è in esecuzione, esegui questo comando:

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

3.    (Facoltativo) Per impostazione predefinita, l'immagine aws-otel-collector viene estratta da Docker Hub come utente anonimo. Questo pull può essere soggetto a un limite di velocità. Per estrarre l'immagine Docker di aws-otel-collector su Amazon ECR, applica la patch al DaemonSetaws-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: l'immagine Docker di Cloudwatch-agent su Amazon ECR supporta le architetture ARM e AMD64. Sostituisci il tag dell'immagine più recente in base alla versione e all'architettura dell'immagine. Per ulteriori informazioni, consulta i tag delle immagini cloudwatch-agent su Amazon ECR.

4.    (Facoltativo) Per i ruoli IAM per gli account di servizio, crea un provider OIDC, un ruolo e una policy IAM. Quindi, associa il ruolo IAM all'account di servizio 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: sostituisci ACCOUNT_ID con l'ID del tuo account e IAM_ROLE_NAME con il ruolo IAM che usi per gli account di servizio.

Elimina ADOT

Per eliminare ADOT, esegui il seguente comando:

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

Configura Container Insights su un cluster EKS Fargate utilizzando ADOT

Per le applicazioni eseguite su Amazon EKS e AWS Fargate, puoi utilizzare ADOT per configurare Container Insights. L'architettura di rete EKS Fargate non consente ai pod di raggiungere direttamente il kubelet sul worker per recuperare le metriche delle risorse. ADOT Collector chiama prima il server API Kubernetes per inoltrare la connessione al kubelet su un nodo worker. Quindi raccoglie le metriche advisor di kubelet per i carichi di lavoro su quel nodo.

Il raccoglitore ADOT invia le seguenti metriche a CloudWatch per ogni carico di lavoro eseguito su 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

Ogni metrica è associata ai seguenti set di dimensioni e viene raccolta nello spazio dei nomi CloudWatch denominato ContainerInsights:

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

Per ulteriori informazioni, consulta Container Insights EKS Fargate.

Per implementare ADOT in EKS Fargate, completa i seguenti passaggi:

1.    Associa un account di servizio Kubernetes a un ruolo IAM. Crea un ruolo IAM denominato EKS-ADOT-ServiceAccount-Role associato a un account di servizio Kubernetes denominato adot-collector. Il seguente script di supporto richiede 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: sostituisci CLUSTER_NAME con il nome del cluster e REGION con la tua regione AWS.

2.    Esegui il comando seguente per distribuire il raccoglitore ADOT come StatefulSet di Kubernetes:

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: assicurati di avere un profilo Fargate corrispondente per fornire i pod StatefulSet su AWS Fargate. Sostituisci my-cluster-name con il nome del cluster e my-cluster-region con la regione AWS in cui si trova il cluster.

3.    Esegui il comando seguente per verificare che il pod del raccoglitore ADOT sia in esecuzione:

kubectl get pods -n fargate-container-insights

4.    (Facoltativo) Per impostazione predefinita, l'immagine aws-otel-collector viene estratta da Docker Hub come utente anonimo. Questo pull può essere soggetto a un limite di velocità. Per estrarre l'immagine Docker di aws-otel-collector su Amazon ECR, applica la patch allo 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"}]}}}}'

Elimina ADOT

Per eliminare ADOT, esegui il seguente 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 -
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa