Come posso abilitare i parametri di Container Insights su un cluster EKS?

Ultimo aggiornamento: 13/05/2022

Voglio configurare Amazon CloudWatch Container Insights e vedere i parametri del mio cluster Amazon Elastic Kubernetes Service (Amazon EKS). In che modo posso farlo?

Breve descrizione

Se utilizzato con Amazon EKS, Container Insights utilizza una versione containerizzata dell'agente CloudWatch o del raccoglitore AWS Distro for OpenTelemetry (ADOT) per trovare tutti i container in esecuzione in un cluster. Raccoglie quindi i dati sulle prestazioni a ogni livello dello stack di prestazioni. Container Insights raccoglie dati come gli eventi del registro delle prestazioni utilizzando un formato metrico incorporato. Quindi invia questi dati a CloudWatch Logs nel gruppo di log /aws/containerinsights/cluster-name/performance. A partire da questi dati, CloudWatch crea parametri aggregati a livello di cluster, nodo e pod. Container Insights supporta anche la raccolta di parametri dai cluster distribuiti su AWS Fargate per Amazon EKS. Per ulteriori informazioni su Container Insights, consulta Utilizzo di Container Insights.

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

Risoluzione

Prerequisiti

Prima di completare questi passaggi, rivedi i prerequisiti:

  • Il cluster 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) è in atto per consentire ai nodi worker di Amazon EKS di inviare parametri e log a CloudWatch. Puoi farlo collegando una policy al ruolo IAM dei tuoi nodi worker. Oppure, usa un ruolo IAM per gli account di servizio per il cluster e allega la policy a questo ruolo. Per ulteriori informazioni, consulta Ruoli IAM per gli account di servizio.
  • Stai eseguendo un cluster che supporta Kubernetes versione 1.18 o successiva. Questo è un requisito di Container Insights per EKS Fargate. Hai anche definito un profilo Fargate per programmare i pod su Fargate.
  • Il ruolo di esecuzione del pod EKS è in atto per consentire ai componenti in esecuzione sull'infrastruttura Fargate di effettuare chiamate alle API AWS per tuo conto. Ad esempio, l'estrazione di immagini di container da Amazon ECR.

Configurazione dei parametri di Container Insights sul cluster EC2 EKS utilizzando l'agente CloudWatch

L'agente CloudWatch o AWS Distro per OpenTelemetry crea un gruppo di log denominato aws/containerinsights/Cluster_Name/performance. Quindi inviano gli eventi del registro delle prestazioni a questo gruppo di log.

Per configurare Container Insights per raccogliere i parametri, completa questi passaggi per implementare per impostazione predefinita l'immagine di container dell'agente CloudWatch come Daemonset da Docker Hub come utente anonimo. Questo pull potrebbe essere soggetto a un limite di frequenza.

1.    Crea uno spazio dei nomi chiamato amazon-cloudwatch, se non ne hai già 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 un 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 un'ulteriore personalizzazione della configurazione dell'agente CloudWatch, consulta Creazione di una ConfigMap per l'agente CloudWatch.

4.    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 ECR supporta le architetture ARM e AMD64. Sostituisci il tag immagine più recente in base alla versione e all'architettura dell'immagine. Per maggiori informazioni, consulta i tag immagine di cloudwatch-agent su Amazon ECR.

5.    Per i ruoli IAM per gli account di servizio, crea un provider OIDC e un ruolo e una policy IAM. Quindi, associa il ruolo IAM all'account di servizio cloudwatch-agent. Sostituisci ACCOUNT_ID e IAM_ROLE_NAME con l'ID account AWS e il ruolo IAM utilizzato per gli account di servizio.

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

Risoluzione dei problemi relativi all'agente CloudWatch

1.    Esegui questo comando per ottenere l'elenco dei pod:

kubectl get pods -n amazon-cloudwatch

2.    Esegui questo comando e controlla gli eventi nella parte inferiore dell'output:

kubectl describe pod pod-name -n amazon-cloudwatch

3.    Esegui questo comando per controllare i log:

kubectl logs pod-name -n amazon-cloudwatch

4.    Se visualizzi un errore CrashLoopBackOff per l'agente CloudWatch, assicurati che le tue autorizzazioni IAM siano impostate correttamente.

Per ulteriori informazioni, consulta Verifica dei prerequisiti.

Eliminazione dell'agente CloudWatch

Usa questi comandi per eliminare l'agente 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
kubectl delete -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
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 delete -f -

Configurazione dei parametri di Container Insights sul cluster EKS EC2 utilizzando ADOT

1.    Esegui questo comando per implementare il raccoglitore ADOT come DaemonSet. Per ulteriori personalizzazioni, consulta Parametri dell'infrastruttura EKS di Container Insights

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

2.    Verifica che il raccoglitore sia in esecuzione:

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 potrebbe essere soggetto a un limite di frequenza. Per estrarre l'immagine docker di aws-otel-collector su Amazon ECR, applica la patch al 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: l'immagine docker di cloudwatch-agent su ECR supporta le architetture ARM e AMD64. Sostituisci il tag immagine più recente in base alla versione e all'architettura dell'immagine. Per maggiori informazioni, consulta i tag immagine di cloudwatch-agent su Amazon ECR.

5.    Facoltativo: per i ruoli IAM per gli account di servizio, crea un provider OIDC e un ruolo e una policy IAM. Quindi, associa il ruolo IAM all'account di servizio aws-otel-sa. Sostituisci ACCOUNT_ID e IAM_ROLE_NAME con l'ID account AWS e il ruolo IAM utilizzato per gli account di servizio.

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

Eliminazione di ADOT

Per eliminare AWS Distro per OpenTelemetry, esegui questo comando:

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

Configurazione dei parametri di 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 di EKS Fargate non consente ai pod di raggiungere direttamente il kubelet sul worker per recuperare i parametri delle risorse. ADOT Collector chiama il server API Kubernetes per inoltrare la connessione al kubelet su un nodo network. Quindi raccoglie i parametri advisor di kubelet per i carichi di lavoro su quel nodo.

Nota: una singola istanza di ADOT Collector non è sufficiente per raccogliere i parametri delle risorse da tutti i nodi di un cluster.

ADOT Collector invia questi parametri 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 parametro è associato ai seguenti set di dimensioni ed è raccolto nello spazio dei nomi CloudWatch denominato ContainerInsights.

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

Per maggiori dettagli, visita la pagina EKS Fargate di Container Insights.

Completa questi passaggi per implementare ADOT nel tuo EKS Fargate:

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. Assicurati di modificare le variabili CLUSTER_NAME e REGION. Questo script helper richiede eksctl.

#!/bin/bash
CLUSTER_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

2.    Implementa ADOT Collector come StatefulSet Kubernetes utilizzando questo comando. Sostituisci my-cluster-name con il nome del tuo cluster EKS e my-cluster-region con il nome della regione.

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 -

3.    Verifica che il pod ADOT Collector 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 potrebbe essere soggetto a un limite di frequenza. Per estrarre l'immagine docker di aws-otel-collector su Amazon ECR, applica la patch al DaemonSet aws-otel-eks-ci:

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

Eliminazione di ADOT

Esegui questi comandi per eliminare ADOT.

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 -

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?