Contribuisci a migliorare questa pagina
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Risoluzione dei problemi della modalità automatica di EKS
Con la modalità automatica EKS, AWS si assume maggiori responsabilità per EC2 le istanze presenti nel tuo AWS account. EKS si assume la responsabilità del runtime dei container sui nodi, del sistema operativo sui nodi e di determinati controller. Ciò include un controller per l’archiviazione a blocchi, uno per il bilanciamento del carico e uno di elaborazione.
È necessario utilizzare AWS e APIs Kubernetes per risolvere i problemi dei nodi. Puoi:
-
Utilizzare una risorsa
NodeDiagnosticdi Kubernetes per recuperare i log dei nodi utilizzando Agente di monitoraggio del nodo. Per le altri fasi, consulta Recuperare i log dei nodi per un nodo gestito usando kubectl e S3. -
Usa il comando AWS EC2 CLI
get-console-outputper recuperare l'output della console dai nodi. Per le altri fasi, consulta Ottieni l'output della console da un'istanza EC2 gestita utilizzando la AWS EC2 CLI. -
Usa i container di debug di Kubernetes per recuperare i log dei nodi. Per le altri fasi, consulta Ottieni i log dei nodi utilizzando i container di debug e kubectl CLI.
Nota
EKS Auto Mode utilizza istanze EC2 gestite. Non è possibile accedere direttamente alle istanze EC2 gestite, anche tramite SSH.
Potresti riscontrare i seguenti problemi che hanno soluzioni specifiche per i componenti della modalità automatica di EKS:
-
Pod bloccati nello stato
Pending, che non vengono pianificati sui nodi Auto Mode. Per le soluzioni, consulta Risolvere i problemi relativi alla mancata pianificazione dei Pod sul nodo Auto Mode. -
EC2 istanze gestite che non entrano a far parte del cluster come nodi Kubernetes. Per le soluzioni, consulta Risolvere i problemi del nodo che non si unisce al cluster.
-
Errori e problemi con i
NodePools,PersistentVolumeseServicesche utilizzano i controller inclusi in modalità automatica di EKS. Per le soluzioni, consulta Risolvere i problemi relativi ai controller inclusi in Auto Mode. -
La sicurezza avanzata dei Pod impedisce la condivisione di volumi tra Pod. Per le soluzioni, consulta Condivisione di volumi tra pod.
Puoi utilizzare i seguenti metodi per risolvere i problemi relativi ai componenti della modalità automatica di EKS:
-
Ottieni l'output della console da un'istanza EC2 gestita utilizzando la AWS EC2 CLI
-
Ottieni i log dei nodi utilizzando i container di debug e kubectl CLI
-
Visualizza le risorse associate alla modalità automatica EKS nella console AWS
-
Rilevare i problemi di connettività dei nodi con il VPC Reachability Analyzer
Agente di monitoraggio del nodo
modalità automatica di EKS include l’agente di monitoraggio dei nodi di Amazon EKS. Puoi utilizzare questo agente per visualizzare le informazioni di risoluzione dei problemi e di debug relative ai nodi. L’agente di monitoraggio dei nodi pubblica gli events di Kubernetes e le conditions del nodo. Per ulteriori informazioni, consulta Enable node auto repair and investigate node health issues.
Ottieni l'output della console da un'istanza EC2 gestita utilizzando la AWS EC2 CLI
Questa procedura aiuta a risolvere problemi in fase di avvio o a livello di kernel.
Innanzitutto, devi determinare l'ID dell' EC2 istanza associata al tuo carico di lavoro. In secondo luogo, utilizzate la AWS CLI per recuperare l'output della console.
-
Conferma di avere
kubectlinstallato e connesso al cluster -
(Facoltativo) Utilizza il nome di un’implementazione di Kubernetes per elencare i pod associati.
kubectl get pods -l app=<deployment-name> -
Usa il nome del Kubernetes Pod per determinare l'ID di EC2 istanza del nodo associato.
kubectl get pod <pod-name> -o wide -
Usa l'ID dell' EC2 istanza per recuperare l'output della console.
aws ec2 get-console-output --instance-id <instance id> --latest --output text
Ottieni i log dei nodi utilizzando i container di debug e kubectl CLI
Il modo consigliato per recuperare i log da un nodo della modalità automatica di EKS prevede l’utilizzo della risorsa NodeDiagnostic. Per la procedura, consulta Recuperare i log dei nodi per un nodo gestito usando kubectl e S3.
Tuttavia, puoi eseguire lo streaming dei log in tempo reale da un’istanza utilizzando il comando kubectl debug node. Questo comando avvia un nuovo Pod sul nodo di cui desideri eseguire il debug, che puoi quindi utilizzare in modo interattivo.
-
Avvia un container di debug. Il comando seguente utilizza
i-01234567890123456per l’ID di istanza del nodo,-italloca attye allegastdinper l’utilizzo interattivo, e utilizza il profilosysadmindel file kubeconfig.kubectl debug node/i-01234567890123456 -it --profile=sysadmin --image=public.ecr.aws/amazonlinux/amazonlinux:2023Di seguito viene riportato un output di esempio.
Creating debugging pod node-debugger-i-01234567890123456-nxb9c with container debugger on node i-01234567890123456. If you don't see a command prompt, try pressing enter. bash-5.2# -
Dalla shell, puoi ora installare
util-linux-coreche fornisce il comandonsenter. Utilizzansenterper inserire il namespace di montaggio di PID 1 (init) sull’host ed eseguire il comandojournalctlper eseguire lo streaming dei log dakubelet:yum install -y util-linux-core nsenter -t 1 -m journalctl -f -u kubelet
Per motivi di sicurezza, l’immagine del container di Amazon Linux non installa molti file binari per impostazione predefinita. Puoi utilizzare il comando yum whatprovides per identificare il pacchetto da installare al fine di fornire un determinato file binario.
yum whatprovides ps
Last metadata expiration check: 0:03:36 ago on Thu Jan 16 14:49:17 2025. procps-ng-3.3.17-1.amzn2023.0.2.x86_64 : System and process monitoring utilities Repo : @System Matched from: Filename : /usr/bin/ps Provide : /bin/ps procps-ng-3.3.17-1.amzn2023.0.2.x86_64 : System and process monitoring utilities Repo : amazonlinux Matched from: Filename : /usr/bin/ps Provide : /bin/ps
Visualizza le risorse associate alla modalità automatica EKS nella console AWS
È possibile utilizzare la AWS console per visualizzare lo stato delle risorse associate al cluster EKS Auto Mode.
-
-
Visualizza i volumi della modalità automatica di EKS cercando la chiave del tag
eks:eks-cluster-name
-
-
Sistemi di bilanciamento del carico
-
Visualizza i bilanciatori del carico della modalità automatica di EKS cercando la chiave del tag
eks:eks-cluster-name
-
-
-
Visualizza le istanze della modalità automatica di EKS cercando la chiave del tag
eks:eks-cluster-name
-
Visualizza gli errori IAM nel tuo AWS account
-
Vai alla CloudTrail console
-
Seleziona “Cronologia degli eventi” dal riquadro di navigazione a sinistra
-
Applica i filtri dei codici di errore:
-
AccessDenied
-
UnauthorizedOperation
-
InvalidClientTokenId
-
Cerca gli errori relativi al cluster EKS. Utilizza i messaggi di errore per aggiornare le voci di accesso EKS, il ruolo IAM del cluster o il ruolo IAM del nodo. Potresti dover allegare una nuova policy a questi ruoli con autorizzazioni per la modalità automatica di EKS.
Risolvere i problemi relativi alla mancata pianificazione dei Pod sul nodo Auto Mode
Se i pod rimangono nello stato Pending e non vengono pianificati su un nodo Auto Mode, verifica se il pod o il manifesto di implementazione dispone di un nodeSelector. Se è presente un nodeSelector, assicurati che utilizzi eks.amazonaws.com/compute-type: auto per essere pianificato sui nodi creati dalla modalità automatica di EKS. Per ulteriori informazioni sulle etichette dei nodi utilizzate dalla modalità automatica di EKS, consulta Controllare se un carico di lavoro viene implementato sui nodi di EKS Auto Mode.
Risolvere i problemi del nodo che non si unisce al cluster
EKS Auto Mode configura automaticamente le nuove EC2 istanze con le informazioni corrette per unirsi al cluster, inclusi l'endpoint del cluster e l'autorità di certificazione (CA) del cluster. Tuttavia, queste istanze possono ancora non riuscire a unirsi al cluster EKS sotto forma di nodo. Esegui i seguenti comandi per identificare le istanze che non si sono unite al cluster:
-
Esegui
kubectl get nodeclaimper verificare leNodeClaimsche sonoReady = False.kubectl get nodeclaim -
Esegui
kubectl describe nodeclaim <node_claim>e cerca su Stato per trovare eventuali problemi che impediscono al nodo di unirsi al cluster.kubectl describe nodeclaim <node_claim>
Messaggi di errore comuni:
-
Error getting launch template configs -
Potresti ricevere questo errore se stai impostando tag personalizzati nella
NodeClasscon le autorizzazioni del ruolo IAM del cluster predefinite. Per informazioni, consulta Informazioni su identità e accesso in modalità automatica di EKS. -
Error creating fleet -
Potrebbe esserci qualche problema di autorizzazione con la
RunInstanceschiamata dall'API. EC2 Verifica AWS CloudTrail la presenza di errori e verifica Ruolo IAM del cluster della modalità automatica di Amazon EKS le autorizzazioni IAM richieste.
Rilevare i problemi di connettività dei nodi con il VPC Reachability Analyzer
Nota
Viene addebitato un costo per ogni analisi eseguita da VPC Reachability Analyzer. Per i dettagli sui prezzi, consulta Prezzi di Amazon VPC
Un motivo per cui un’istanza non si è unita al cluster è un problema di connettività di rete che impedisce di raggiungere il server API. Per diagnosticare questo problema, puoi utilizzare VPC Reachability Analyzer per eseguire un’analisi della connettività tra un nodo che non riesce a unirsi al cluster e al server API. Avrai bisogno di due informazioni:
-
ID di istanza di un nodo che non è in grado di unirsi al cluster
-
Indirizzo IP dell’endpoint del server dell’API Kubernetes
Per ottenere l'ID dell'istanza, dovrai creare un carico di lavoro sul cluster per far sì che EKS Auto Mode avvii un' EC2 istanza. Questo crea anche un oggetto NodeClaim nel cluster che avrà l’ID dell’istanza. Esegui kubectl get nodeclaim -o yaml per stampare tutte le NodeClaims del cluster. Ciascuna NodeClaim contiene l’ID dell’istanza come campo e di nuovo nel providerID:
kubectl get nodeclaim -o yaml
Di seguito viene riportato un output di esempio.
nodeName: i-01234567890123456 providerID: aws:///us-west-2a/i-01234567890123456
Puoi determinare l’endpoint del server dell’API Kubernetes eseguendo kubectl get endpoint kubernetes -o yaml. Gli indirizzi si trovano nel campo degli indirizzi:
kubectl get endpoints kubernetes -o yaml
Di seguito viene riportato un output di esempio.
apiVersion: v1 kind: Endpoints metadata: name: kubernetes namespace: default subsets: - addresses: - ip: 10.0.143.233 - ip: 10.0.152.17 ports: - name: https port: 443 protocol: TCP
Con queste due informazioni, puoi eseguire l’analisi s. Per prima cosa, accedi a VPC Reachability Analyzer in Console di gestione AWS.
-
Fai clic su “Crea e analizza il percorso”
-
Fornisci un nome per l’analisi (ad esempio “Errore nell’unione del nodo”)
-
Per “Tipo di origine”, seleziona “Istanze”
-
Inserisci l’ID dell’istanza del nodo soggetto a errore come “Origine”
-
Per la “Destinazione del percorso”, seleziona “Indirizzo IP”
-
Inserisci uno degli indirizzi IP per il server API come “Indirizzo di destinazione”
-
Espandi la “Sezione di configurazione aggiuntiva dell’intestazione dei pacchetti”
-
Inserisci una “Porta di destinazione” di 443
-
Seleziona “Protocollo” come TCP se non è già selezionato
-
Fai clic su “Crea e analizza il percorso”
-
L’esecuzione dell’analisi potrebbe richiedere alcuni minuti. Se i risultati dell’analisi mostrano una mancata raggiungibilità, indicheranno dove si trovava l’errore nel percorso di rete in modo da poter risolvere il problema.
Condivisione di volumi tra pod
I nodi EKS Auto Mode sono SELinux configurati con una modalità di applicazione che fornisce un maggiore isolamento tra i Pod in esecuzione sullo stesso nodo. Quando SELinux è abilitata, alla maggior parte dei pod non privilegiati verrà applicata automaticamente la propria etichetta di sicurezza multicategoria (MCS). Questa etichetta MCS è unica per ogni Pod ed è progettata per garantire che un processo in un Pod non possa manipolare uno in un altro Pod o sull’host. Anche se un Pod etichettato viene eseguito come root e ha accesso al filesystem host, non sarà in grado di manipolare i file, effettuare chiamate di sistema sensibili sull’host, accedere al runtime del container oppure ottenere il materiale delle chiavi segrete di kubelet.
Per questo motivo, potresti riscontrare problemi durante il tentativo di condividere dati tra Pod. Ad esempio, una PersistentVolumeClaim con una modalità di accesso di ReadWriteOnce non consentirà comunque a più Pod di accedere contemporaneamente al volume.
Per abilitare questa condivisione tra i Pod, puoi usare i Pod seLinuxOptions per configurare la stessa etichetta MCS su quei Pod. In questo esempio, assegniamo le tre categorie c123,c456,c789 al Pod. Ciò non entrerà in conflitto con le categorie assegnate automaticamente ai Pod sul nodo, poiché a esse verranno assegnate solo due categorie.
securityContext: seLinuxOptions: level: "s0:c123,c456,c789"
Visualizzare gli eventi di Karpenter nei log del piano di controllo
Per i cluster EKS con i log del piano di controllo abilitati, puoi ottenere informazioni sulle azioni e sul processo decisionale di Karpenter interrogando i log. Ciò può essere particolarmente utile per risolvere i problemi della modalità automatica di EKS relativi al provisioning, al dimensionamento e alla terminazione dei nodi. Per visualizzare gli eventi relativi a Karpenter, utilizza la seguente query Logs Insights: CloudWatch
fields @timestamp, @message | filter @logStream like /kube-apiserver-audit/ | filter @message like 'DisruptionBlocked' or @message like 'DisruptionLaunching' or @message like 'DisruptionTerminating' or @message like 'DisruptionWaitingReadiness' or @message like 'Unconsolidatable' or @message like 'FailedScheduling' or @message like 'NoCompatibleInstanceTypes' or @message like 'NodeRepairBlocked' or @message like 'Disrupted' or @message like 'Evicted' or @message like 'FailedDraining' or @message like 'TerminationGracePeriodExpiring' or @message like 'TerminationFailed' or @message like 'FailedConsistencyCheck' or @message like 'InsufficientCapacityError' or @message like 'UnregisteredTaintMissing' or @message like 'NodeClassNotReady' | sort @timestamp desc
Questa query filtra gli eventi specifici relativi a Karpenter
-
Perché Karpenter intraprende determinate azioni.
-
Qualsiasi problema che impedisca il corretto provisioning, il dimensionamento o la terminazione dei nodi.
-
Potenziali problemi di capacità o compatibilità con i tipi di istanze.
-
Eventi del ciclo di vita dei nodi come interruzioni, espulsioni o terminazioni.
Per utilizzare questa query:
-
Vai CloudWatch alla console
-
Seleziona “Logs Insights” dal riquadro di navigazione a sinistra
-
Scegli il gruppo di log per i log del piano di controllo del cluster EKS
-
Incolla la query nell’editor di query
-
Regola l’intervallo di tempo in base alle esigenze
-
Eseguire la query
I risultati mostreranno una cronologia degli eventi correlati a Karpenter, aiutandoti a risolvere i problemi e a comprendere il comportamento della modalità automatica di EKS nel cluster. Per esaminare le azioni di Karpenter su un nodo specifico, puoi aggiungere il seguente filtro di riga che specifica l’ID dell’istanza alla suddetta query:
|filter @message like /[.replaceable]`i-12345678910123456`/
Nota
Per utilizzare questa query, è necessario abilitare la registrazione del piano di controllo sul cluster EKS. Se non hai ancora eseguito questa operazione, consulta Inviare log del piano di controllo a CloudWatch Logs.
Risolvere i problemi relativi ai controller inclusi in Auto Mode
Se hai un problema con un controller, dovresti cercare:
-
Se le risorse associate a quel controller sono valide e formattate correttamente.
-
Se le risorse AWS IAM e Kubernetes RBAC sono configurate correttamente per il tuo cluster. Per ulteriori informazioni, consulta Informazioni su identità e accesso in modalità automatica di EKS.
Risorse correlate
Utilizza questi articoli di re:POST per procedure avanzate di AWS risoluzione dei problemi: