Come posso attivare le metriche di Container Insights su un cluster Amazon EKS?
Desidero configurare Amazon CloudWatch Container Insights per visualizzare le metriche del mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).
Risoluzione
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 cloudwatch-agent/cloudwatch-agent.
Prima di iniziare, assicurati di soddisfare i prerequisiti per Container Insights in CloudWatch. Per i cluster AWS Fargate, devi definire un profilo Fargate per pianificare i pod. Inoltre, il ruolo Identity and Access Management (IAM) del pod Amazon EKS deve consentire ai componenti eseguiti sull'infrastruttura Fargate di effettuare chiamate ad API AWS. 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 cluster EKS
L'agente CloudWatch crea un gruppo di log denominato aws/containerinsights/Cluster_Name/performance, quindi invia gli eventi del log delle prestazioni al gruppo di log. Quando configuri Container Insights per raccogliere le metriche, devi distribuire l'immagine del container dell'agente CloudWatch come DaemonSet da Docker Hub. Per impostazione predefinita, l'immagine del container viene distribuita come utente anonimo.
Nota: Docker potrebbe limitare il numero di immagini che puoi estrarre.
Per utilizzare l'agente CloudWatch per configurare Container Insights, completa i seguenti passaggi:
-
Esegui questo comando per creare un namespace 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 -
Esegui questo comando per creare un account di servizio per l'agente CloudWatch denominato 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/cwagent/cwagent-serviceaccount.yaml -
Esegui questo comando per creare 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 Crea un file per l'agente ConfigMap CloudWatch.
-
Esegui questo comando per distribuire 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) Esegui questo comando per applicare una patch al DaemonSet cloudwatch-agent in modo che estragga l'agente CloudWatch da 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: l'immagine Docker dell'agente CloudWatch su 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 cloudwatch-agent/cloudwatch-agent.
-
Per i ruoli IAM per gli account di servizio, crea un provider OIDC, nonché una policy e un ruolo IAM. Quindi esegui questo comando per associare 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 utilizzi per gli account di servizio.
Risolvi i problemi relativi all'agente CloudWatch
Completa i seguenti passaggi:
-
Esegui questo comando per recuperare l'elenco dei pod:
kubectl get pods -n amazon-cloudwatch -
Esegui questo comando per controllare gli eventi nella parte inferiore dell'output:
kubectl describe pod pod-name -n amazon-cloudwatch -
Esegui questo comando per controllare i log:
kubectl logs pod-name -n amazon-cloudwatch -
Se visualizzi un errore CrashLoopBackOff per l'agente CloudWatch, verifica di aver configurato correttamente le autorizzazioni IAM.
Elimina l'agente CloudWatch
Esegui questo comando 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
Nota: se elimini il namespace, vengono eliminate anche le risorse associate.
Utilizza Distro per OpenTelemetry per configurare le metriche di Container Insights sul cluster EKS
AWS Distro èer OpenTelemetry crea un gruppo di log denominato aws/containerinsights/Cluster_Name/performance, quindi invia gli eventi del log delle prestazioni al gruppo di log.
Completa i seguenti passaggi:
-
Esegui questo comando per distribuire AWS OpenTelemetry Collector come DaemonSet:
curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-container-insights-infra.yaml | kubectl apply -f -Nota: per ulteriori informazioni, consulta Container Insights EKS Infrastructure Metrics (Metriche dell’infrastruttura EKS di Container Insights).
-
Esegui questo comando per verificare che il raccoglitore sia in esecuzione:
kubectl get pods -l name=aws-otel-eks-ci -n aws-otel-eks -
(Facoltativo) Esegui questo comando per applicare una patch al DaemonSet aws-otel-eks-ci in modo che estragga l'immagine Docker aws-otel-collector su 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: L'immagine Docker dell'agente CloudWatch su ECR supporta le architetture ARM e AMD64. Sostituisci il tag dell'immagine più recente in base alla versione e all'architettura dell'immagine.
-
(Facoltativo) Per i ruoli IAM per gli account di servizio, crea un provider OIDC, nonché una policy e un ruolo IAM. Quindi esegui questo comando per associare 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 utilizzi per gli account di servizio.
Elimina Distro per OpenTelemetry
Esegui questo comando per eliminare Distro per OpenTelemetry:
curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-container-insights-infra.yaml |kubectl delete -f -
Utilizza Distro per OpenTelemetry per impostare le metriche di Container Insights su un cluster EKS Fargate
Per le applicazioni eseguite su EKS e Fargate, puoi utilizzare Distro per OpenTelemetry per configurare Container Insights.
AWS OpenTelemetry Collector 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
AWS OpenTelemetry Collector raccoglie ogni metrica nel namespace di CloudWatch denominato ContainerInsights. Dalla console CloudWatch, scegli Metriche, quindi scegli Tutte le metriche. Puoi accedere a ContainerInsights in Spazio dei nomi personalizzato.
Ogni metrica è associata ai seguenti set di dimensioni:
- ClusterName, LaunchType
- ClusterName, Namespace, LaunchType
- ClusterName, Namespace, PodName, LaunchType
Per ulteriori informazioni, consulta Container Insights EKS Fargate (Container Insights per EKS Fargate).
Per distribuire Distro per OpenTelemetry in EKS Fargate, completa i seguenti passaggi:
-
Crea un namespace denominato fargate-container-insights.
-
Utilizza il seguente script per creare 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-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 \ --approveNota: sostituisci CLUSTER_NAME con il nome del cluster e REGION con la tua Regione AWS.
-
Esegui questo comando per distribuire AWS OpenTelemetry Collector come StatefulSet 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: sostituisci your-cluster-name con il nome del tuo cluster e your-cluster-region con la Regione in cui si trova il cluster. Verifica di avere un profilo Fargate corrispondente per il provisioning dei pod StatefulSet su Fargate.
-
Esegui questo comando per verificare che il pod Distro per Open Telemetry Collector sia in esecuzione:
kubectl get pods -n fargate-container-insights -
(Facoltativo) Esegui questo comando per applicare una patch allo StatefulSet adot-collector in modo che estragga l'immagine Docker aws-otel-collector su 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"}]}}}}'
Elimina Distro per OpenTelemetry
Esegui questo comando per eliminare Distro per 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: sostituisci your-cluster-name con il nome del tuo cluster e your-cluster-region con la Regione in cui si trova il cluster.
- Lingua
- Italiano
