Come posso risolvere gli errori relativi alle API quando aggiorno la mia versione del cluster in Amazon EKS?
Ho ricevuto uno stato Errore o Avvertenza indicante che il mio cluster utilizza un'API obsoleta che devo correggere prima del prossimo aggiornamento.
Breve descrizione
Durante l'aggiornamento della versione di un cluster, la scheda Approfondimenti sull'aggiornamento della console Amazon EKS mostra lo stato dei vari componenti Kubernetes. Durante il processo di aggiornamento dei diversi componenti, vengono visualizzati i seguenti stati:
- Lo stato Errore indica che il cluster rifiuta le chiamate che fanno riferimento alla versione dell'API specifica dopo l'aggiornamento del cluster.
- Lo stato Avvertenza indica la presenza di un problema, ma non richiede alcuna azione immediata. Questo stato può verificarsi quando è pianificata la rimozione della risorsa Kubernetes in una versione precedente di almeno 2 versioni rispetto alla versione corrente del cluster.
- Lo stato Superato indica che il componente ha superato tutti i controlli e le convalide dell'aggiornamento. Non è necessaria alcuna azione.
- Lo stato Sconosciuto indica che il sistema di aggiornamento non è in grado di determinare lo stato del componente, probabilmente a causa della mancanza di informazioni o di uno stato inconcludente durante il processo. Potrebbe essere necessario intervenire.
Prima di aggiornare il cluster, esamina i componenti con lo stato Errore o Avvertenza per comprendere e risolvere eventuali problemi.
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 lo stato delle API
Utilizza la Console di gestione AWS o AWS CLI per verificare lo stato delle API obsolete nel cluster.
Console di gestione AWS
Completa i seguenti passaggi:
- Apri la console Amazon EKS.
- Seleziona il nome del cluster.
- In Informazioni sul cluster, scegli Approfondimenti sull'aggiornamento.
- Esamina eventuali avvertenze o messaggi di errore relativi ad API obsolete in Stato dell'approfondimento.
AWS CLI
Per elencare tutti i dettagli di aggiornamento nel file YAML, esegui questo comando:
[+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --output yaml >> insight.yaml
Nota: sostituisci your-cluster-name e your-region-name con i valori del tuo cluster.
Salva l'output nel formato di file che preferisci.
Per filtrare le informazioni in modo da mostrare solo gli errori, esegui questo comando:
[+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --filter categories=UPGRADE_READINESS,statuses=ERROR
Nota: sostituisci your-cluster-name e your-region-name con i valori del tuo cluster.
L'output viene salvato in formato testo.
Risolvi un errore di stato relativo a un'API obsoleta
Se lo stato della scheda Approfondimenti sull'aggiornamento indica che il cluster ha un'API obsoleta, potresti ricevere un errore. Ad esempio, se si verifica un errore pod disruption budget (PDB) riguardante un'API, potresti ricevere un messaggio simile al seguente:
"EKS using deprecated api version "/apis/policy/v1beta1/poddisruptionbudgets" and needs to replace it with "/apis/policy/v1/poddisruptionbudgets" before upgrading EKS cluster."
Per risolvere l'errore, completa i seguenti passaggi:
-
Esegui questo comando per elencare i PDB utilizzati dal cluster:
kubectl get pdb -A -
Esegui questo comando per vedere l'output in modo da visualizzare i PDB che utilizzano l'ultima versione dell'API o una versione obsoleta:
kubectl get pdb your-pdb-name -n your-namespace -o yamlNota: sostituisci your-pdb-name con il tuo PDB e your-namespace con il tuo namespace.
-
Se uno dei tuoi PDB utilizza una versione obsoleta dell'API, aggiornala per utilizzare l'ultima versione nei tuoi file di configurazione YAML. Per ulteriori informazioni, consulta Specifying a disruption budget for your application (Come specificare un budget di interruzione per l'applicazione) sul sito web Kubernetes.
-
Se non riesci a determinare l'entità che chiama l'API obsoleta perché è un agente utente specifico, come kube-apiserver, newrelic o kube-controller-manager, controlla il file di log kube-api-server-audit del cluster EKS per determinarla.
Nota: il cluster EKS deve avere i log di audit di Cloudwatch abilitati per eseguire questa query. -
Apri la console Amazon CloudWatch.
-
Scegli Logs Insights, quindi seleziona il gruppo di log dal menu. Ad esempio,-/aws/eks/eksworkshop/cluster.
-
Filtra l'ora e la data per mostrare l'Ora dell'ultima richiesta.
Query:fields @logStream, @timestamp, responseStatus.code, @message | filter @logStream like /^kube-apiserver-audit/ | filter requestURI like /\/apis\/autoscaling\/v2beta2\/horizontalpodautoscalers/ ### ---> Replace this with your Deprecated API's | sort @timestamp desc | limit 1000Output:
{ "kind":"Event", "apiVersion":"audit.k8s.io/v1", "level":"Request", "auditID":"bd2b2b0c-8556-4468-8b35-91e2e78759a6", "stage":"ResponseComplete", "requestURI":"/apis/autoscaling/v2beta2/horizontalpodautoscalers?allowWatchBookmarks=true\u0026resourceVersion=118801277\u0026timeout=5m51s\u0026timeoutSeconds=351\u0026watch=true", "verb":"watch", "user":{ "username":"system:serviceaccount:newrelic:newrelic-kube-state-metrics", "uid":"9b97a09a-cf70-4fe2-8fd8-6c87110ce672", "groups":[ "system:serviceaccounts", "system:serviceaccounts:newrelic", "system:authenticated" ], "extra":{ "authentication.kubernetes.io/pod-name":[ "newrelic-kube-state-metrics-5bb6ccc94d-8nj9v" ], "authentication.kubernetes.io/pod-uid":[ "5b156744-00b6-4dfb-a998-a32140409b8e" ] } }, "sourceIPs":[ "10.62.98.22" ], "userAgent":"v2.6.0", "objectRef":{ "resource":"horizontalpodautoscalers", "apiGroup":"autoscaling", "apiVersion":"v2beta2" }, "responseStatus":{ "metadata":{ }, "code":200 }, "requestReceivedTimestamp":"2024-12-13T20:13:04.438616Z", "stageTimestamp":"2024-12-13T20:18:55.441744Z", "annotations":{ "authorization.k8s.io/decision":"allow", "authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"newrelic-kube-state-metrics\" of ClusterRole \"newrelic-kube-state-metrics\" to ServiceAccount \"newrelic-kube-state-metrics/newrelic\"", "k8s.io/deprecated":"true", "k8s.io/removed-release":"1.26" } } -
Per aggiornare l'API obsoleta con l'API più recente, esegui una di queste azioni:
Se il nome utente mostra cluster-autoscaler, aggiorna l'autoscaler del cluster alla versione più recente.
Se il nome utente mostra newrelic-kube-state-metric, aggiorna il cluster alla versione più recente di kube-state-metrics se installato separatamente. Oppure, se kube-state-metrics è in bundle, aggiorna il nuovo plugin relic.
Nota: AWS analizza l'API obsoleta negli ultimi 30 giorni. Dopo aver aggiornato cluster-autoscaler o newrelic-kube-state-metric, AWS potrebbe impiegare fino a 30 giorni per analizzare l'API obsoleta e aggiornare lo stato nella scheda Approfondimenti sull'aggiornamento.
- Argomenti
- Containers
- Lingua
- Italiano
