Come posso risolvere lo stato CrashLoopBackOff dei pod dell'agente CloudWatch o dell'Agente Amazon EKS Pod Identity?
I pod dell'agente Amazon CloudWatch o dell'Agente Amazon EKS Pod Identity del mio cluster Amazon Elastic Kubernetes Service (Amazon EKS) sono bloccati nello stato CrashLoopBackOff.
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Controlla i log
Innanzitutto, controlla i log dell'agente CloudWatch e dell'Agente EKS Pod Identity per raccogliere informazioni sul problema.
Per controllare i log dell'agente CloudWatch, esegui questo comando:
kubectl logs cloudwatch-agent-pod-name -n namespace
Nota: sostituisci cloudwatch-agent-pod-name con il nome del tuo pod dell'agente CloudWatch e namespace con il nome del tuo namespace.
Per controllare i log dell'Agente EKS Pod Identity, esegui questo comando:
kubectl logs pod-identity-agent-pod-name -n namespace
Nota: sostituisci pod-identity-agent-pod-name con il nome del tuo pod dell'Agente EKS Pod Identity e namespace con il nome del tuo namespace.
Nell'output del comando, cerca i messaggi di errore che mostrano il motivo per cui il pod si blocca, ad esempio problemi di autorizzazione, problemi di rete o problemi di configurazione.
Risolvi i problemi relativi alle autorizzazioni dell'agente CloudWatch
Errore Cannot create provider
Devi utilizzare il ruolo dell'account AWS del servizio AWS Identity and Access Management (AWS IAM) per consentire ai nodi worker di Amazon EKS di inviare metriche e log a CloudWatch. Se il ruolo IAM è mancante o è configurato in maniera non corretta nel namespace amazon-cloudwatch richiesto, ricevi il seguente errore:
"Error: cannot create provider: failed to retrieve credentials: failed to assume role"
Per risolvere il problema, crea un ruolo dell'account di servizio con il nome cloudwatch-agent.
Per creare un ruolo dell'account di servizio personalizzato, esegui questo comando:
eksctl create iamserviceaccount \ --cluster cluster-name \ --namespace amazon-cloudwatch \ --name service-account-name \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --override-existing-serviceaccounts \ --approve
Nota: sostituisci cluster-name con il nome del tuo cluster Amazon EKS e service-account-name con il nome dell'account di servizio personalizzato.
Quindi crea una ConfigMap per l'agente CloudWatch. Se utilizzi un ruolo dell'account di servizio personalizzato, sostituisci cloudwatch-agent con il nome del ruolo dell'account di servizio.
Errori Not authorized to perform: sts:AssumeRole
Se il ruolo dell'account di servizio utilizzato dall'agente CloudWatch non è in grado di autenticarsi, ricevi uno dei seguenti errori:
"Error: AccessDenied: User: arn:aws:sts::[Account-ID]:assumed-role/[Role-Name]/[Session-Name] is not authorized to perform: sts:AssumeRole on resource [Role-ARN]"
-oppure-
"Error: AccessDenied: Not authorized to perform sts:AssumeRole"
Assicurati di aver collegato la policy CloudWatchAgentServerPolicy al ruolo dell'account di servizio. Per identificare i problemi di autenticazione, controlla in AWS CloudTrail gli eventi PutLogEvents e DescribeLogStreams. Assicurati di utilizzare l'account di servizio cloudwatch-agent o il nome dell'account di servizio personalizzato corretto nel file YAML di distribuzione.
Per verificare la configurazione dell'account di servizio, esegui questo comando:
kubectl get serviceaccount cloudwatch-agent -n amazon-cloudwatch -o yaml
Nell'output, assicurati che i metadati eks.amazonaws.com/role-arn siano simili all'esempio seguente:
metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::AWS_ACCOUNT_ID:role/role-name
Gli account di servizio per l'agente CloudWatch devono avere le seguenti regole:
rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["list", "watch"] - apiGroups: [ "" ] resources: [ "services" ] verbs: [ "list", "watch" ] - apiGroups: ["apps"] resources: ["replicasets", "daemonsets", "deployments", "statefulsets"] verbs: ["list", "watch"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["list", "watch"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", "events"] verbs: ["create", "get"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get","update"] - nonResourceURLs: ["/metrics"] verbs: ["get", "list", "watch"]
Per verificare le regole nell'account di servizio, esegui questo comando:
kubectl auth can-i --list --as=system:serviceaccount:amazon-cloudwatch:cloudwatch-agent
Risolvi i problemi relativi alle autorizzazioni dell'Agente EKS Pod Identity
Errori Not authorized to perform: eks-auth:AssumeRoleForPodIdentity o Error fetching credentials
Se l'Agente EKS Pod Identity non è in grado di assumere il ruolo IAM del nodo Amazon EKS, ricevi uno dei seguenti errori:
"Error: AccessDenied: User: arn:aws:sts::[Account-ID]:assumed-role/[Role-Name]/[Session-Name] is not authorized to perform: eks-auth:AssumeRoleForPodIdentity on resource [Cluster]"
-oppure-
"Error: "error","msg":"Error fetching credentials: error getting credentials to cache: unable to fetch credentials from EKS Auth: operation error EKS Auth: AssumeRoleForPodIdentity, https response error StatusCode: 403, RequestID: fc66d1ec-33f1-43b0-a617-df1a52adcb63, AccessDeniedException: ","operation":"AssumeRoleForPodIdentity","request-id":"fc66d1ec-33f1-43b0-a617-df1a52adcb63","service":"EKS Auth""
Per risolvere il problema, assicurati che la policy IAM collegata al ruolo consenta l'azione AssumeRoleForPodIdentity. È consigliabile utilizzare la policy gestita da AWS AmazonEKSWorkerNodePolicy. In alternativa, puoi aggiungere una policy personalizzata simile all'esempio seguente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks-auth:AssumeRoleForPodIdentity" ], "Resource": "*" } ] }
Inoltre, verifica che le policy di controllo dei servizi (SCP) dell'organizzazione non blocchino l'azione AssumeRoleForPodIdentity.
Importante: se crei il pod e l'account di servizio contemporaneamente all'associazione di identità del pod, potresti riscontrare problemi. Per risolverli, attendi almeno 10 secondi dopo aver creato il ruolo per associarlo al container.
Risolvi i problemi di rete dell'agente CloudWatch
Errori Failed to send logs o Error occurs in PutLogEvents
Se l'agente CloudWatch non riesce a raggiungere l'endpoint di CloudWatch Logs, ricevi uno dei seguenti errori:
"2023-03-18T12:00:00Z E! [outputs.cloudwatchlogs] Failed to send logs: RequestError: send request failed caused by: Post "https://logs.us-west-2.amazonaws.com/": dial tcp 52.94.76.32:443: i/o timeout"
-oppure-
"2024-11-22T17:00:48Z E! {"caller":"cwlogs@v0.103.0/cwlog_client.go:135","msg":"cwlog_client: Error occurs in PutLogEvents","kind":"exporter","data_type":"metrics","name":"awsemf/containerinsights","error":"RequestError: send request failed\ncaused by: Post \"https://logs.us-east-1.amazonaws.com/\""
Il problema si verifica in genere a causa di restrizioni di rete o gruppi di sicurezza non configurati correttamente. Per risolverlo, assicurati che i nodi abbiano accesso a Internet in uscita tramite un gateway Internet. Per le sottoreti private, verifica di aver configurato correttamente il gateway NAT. Configura l'endpoint del cloud privato virtuale (VPC) per i servizi CloudWatch. L'endpoint VPC deve utilizzare la convenzione di denominazione com.amazonaws.Region.logs e il gruppo di sicurezza dell'endpoint deve consentire il traffico in entrata dal gruppo di sicurezza del nodo.
Per accertarti che i gruppi di sicurezza del nodo consentano il traffico HTTPS in uscita, verifica la seguente configurazione:
- Tipo: HTTPS
- Protocollo: TCP
- Porta: 443
- Intervallo di destinazione: 0.0.0.0/0
Risolvi i problemi di rete dell'Agente EKS Pod Identity
Errore Error retrieving service account token
I gruppi di sicurezza del pod devono consentire il traffico HTTP in uscita sulla porta TCP 80 verso l'indirizzo IP del servizio di metadati dell'istanza (169.254.169.254). In caso contrario, ricevi il seguente errore:
"Error retrieving service account token: Get "http://169.254.169.254/latest/meta-data/iam/security-credentials/": dial tcp 169.254.169.254:80: connect: connection timed out"
Per risolvere il problema, assicurati che i gruppi di sicurezza del pod utilizzino la seguente configurazione:
- Tipo: HTTPS
- Protocollo: TCP
- Porta: 80
- Intervallo di destinazione: 169.254.169.254/32
Se i pod utilizzano un proxy, devi aggiungere 169.254.170.23 per IPv4 e [fd00:ec2::23] per IPv6. Aggiorna le variabili di ambiente (env) no_proxy o NO_PROXY nel file YAML di distribuzione del pod.
Esempio di file YAML di distribuzione del pod:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app namespace: my-namespace spec: template: spec: containers: - name: my-container image: my-app-image env: - name: HTTP_PROXY value: "http://proxy.example.com:3128" - name: HTTPS_PROXY value: "http://proxy.example.com:3128" - name: NO_PROXY value: "localhost,127.0.0.1,169.254.170.23,[fd00:ec2::23]"
Quindi, per applicare le modifiche, esegui questo comando:
kubectl apply -f deployment.yaml
Per verificare l'impostazione NO_PROXY, esegui questo comando:
kubectl exec -it pod-name -n namespace -- env | grep -i no_proxy
Nota: sostituisci pod-name con il nome del pod e namespace con il nome del namespace.
Assicurati che l'output sia simile all'esempio seguente:
NO_PROXY=localhost,127.0.0.1,169.254.170.23,[fd00:ec2::23]
Risolvi i problemi di configurazione dell'agente CloudWatch
Per identificare i problemi relativi alla configurazione o alle risorse del pod, controlla lo stato dettagliato del pod eseguendo questo comando:
kubectl describe pod pod-name -n namespace
Quindi esegui questi passaggi per risolvere il problema in base all'errore che ricevi.
Amazon/cloud-watch-agent:1 247345.36b249270" already present on machine error
Se hai configurato cloudwatch-agent in modo errato, ricevi il seguente errore:
"Normal Pulled 14m (x307 over 26h) kubelet Container image "amazon/cloudwatch-agent:1.247345.36b249270" already present on machine Warning BackOff 4m10s (x7130 over 26h) kubelet Back-off restarting failed container aws-cloudwatch-metrics in pod aws-cloudwatch-metrics-4jz88_kube-system(ad6f68f0-7df0-435f-b101-2be05df84eb2)"
Per risolvere il problema, verifica di aver configurato i **file di configurazione di **cloudwatch-agent con la Regione AWS, i log e le metriche corretti. Inoltre, controlla i campi che non sono validi o che hanno parametri mancanti.
Per verificare se stai utilizzando la versione corretta dell'immagine, completa i seguenti passaggi:
-
Per elencare tutti i pod che eseguono l'agente CloudWatch, esegui questo comando:
kubectl get pods -n amazon-cloudwatchNota: se utilizzi un namespace personalizzato, sostituisci amazon-cloudwatch con il nome del namespace.
-
Per verificare la versione dell'immagine, esegui questo comando:
kubectl describe pod pod-name -n amazon-cloudwatchNota: sostituisci pod-name con il nome del tuo pod. Se utilizzi un namespace personalizzato, sostituisci amazon-cloudwatch con il nome del namespace.
-
Nell'output, controlla il numero di versione in corrispondenza del valore Image:
Containers: cloudwatch-agent: Image: public.ecr.aws/cloudwatch-agent/cloudwatch-agent:1.300017.0b337Per sapere qual è l'ultima versione dell'agente CloudWatch, consulta Releases (Release) sul sito web GitHub.
-
Se utilizzi una versione precedente, esegui questo comando per aggiornare la versione dell'immagine:
kubectl set image daemonset/aws-cloudwatch-agent \ -n amazon-cloudwatch \ cloudwatch-agent=public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest-versionNota: sostituisci latest-version con l'ultima versione dell'immagine.
-
Per riavviare la distribuzione, esegui questo comando:
kubectl rollout restart daemonset aws-cloudwatch-agent -n amazon-cloudwatch
Se utilizzi il componente aggiuntivo Amazon CloudWatch Observability EKS, aggiornalo all'ultima versione.
Errore OOM
Se il container non ha più memoria disponibile, ricevi il seguente errore:
"Warning OOMKilled kubelet Container was killed due to OOM
Warning Failed kubelet Container failed to start: Back-off restarting failed container"
Per risolvere il problema, controlla le richieste di risorse e le quote (limiti) che hai definito nel file di distribuzione del pod.
Esempio di file di distribuzione del pod:
kubectl get pod cloudwatch-agent-xyz123 -n amazon-cloudwatch -o yaml | grep -A10 'resources:' If limits are too low, update them in the DaemonSet: resources: requests: cpu: 100m memory: 200Mi limits: cpu: 200m memory: 400Mi Apply the changes: kubectl apply -f cloudwatch-agent-daemonset.yaml
Per aggiornare le richieste e le quote, esegui questo comando:
kubectl edit daemonset aws-cloudwatch-agent -n amazon-cloudwatch resources: requests: cpu: 100m memory: 200Mi limits: cpu: 200m memory: 400Mi
Per applicare le modifiche, esegui questo comando:
kubectl rollout restart daemonset aws-cloudwatch-agent -n amazon-cloudwatch
Per assicurarti che i nodi dispongano di risorse sufficienti, esegui questo comando:
kubectl top nodes
Se l'utilizzo della CPU o della memoria è elevato, esegui questo comando per scalare il cluster:
kubectl scale nodegroup --name nodegroup-name --replicas=new-size
Nota: sostituisci nodegroup-name con il nome del tuo gruppo di nodi e new-size con la nuova dimensione del gruppo di nodi.
Risolvi i problemi di configurazione dell'Agente EKS Pod Identity
Errore Unable to start server
Se non hai configurato correttamente l'Agente EKS Pod Identity, potresti ricevere il seguente errore:
"{"bind-addr":"[fd00:ec2::23]:80","level":"info","msg":"Starting server...","time":"2024-02-05T17:52:40Z"}{"bind-addr":"[fd00:ec2::23]:80","level":"fatal","msg":"Unable to start server: listen tcp [fd00:ec2::23]:80: socket: address family not supported by protocol","time":"2024-02-05T17:52:40Z"}2024/02/05 17:52:40 running command: exit status 1"
Per risolvere il problema, accertati che siano rispettati i requisiti dell'Agente Amazon EKS Pod Identity.
Assicurati di utilizzare l'ultima versione del componente aggiuntivo per ridurre i problemi di compatibilità tra versioni. Per verificare l'ultima versione disponibile, esegui questo comando AWS CLI describe-addon-versions:
aws eks describe-addon-versions --kubernetes-version 1.31 --addon-name eks-pod-identity-agent
Nota: sostituisci 1.31 con la versione del tuo cluster.
Per aggiornare il componente aggiuntivo, esegui questo comando update-addon:
aws eks update-addon --cluster-name my-cluster --addon-name eks-pod-identity-agent --addon-version version-number --resolve-conflicts PRESERVE
Nota: sostituisci my-cluster con il nome del tuo cluster e version-number con la versione del componente aggiuntivo.
- Argomenti
- Containers
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 10 mesi fa