Risoluzione dei problemi della modalità automatica di EKS - Amazon EKS

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:

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:

Puoi utilizzare i seguenti metodi per risolvere i problemi relativi ai componenti della modalità automatica di EKS:

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.

  1. Conferma di avere kubectl installato e connesso al cluster

  2. (Facoltativo) Utilizza il nome di un’implementazione di Kubernetes per elencare i pod associati.

    kubectl get pods -l app=<deployment-name>
  3. Usa il nome del Kubernetes Pod per determinare l'ID di EC2 istanza del nodo associato.

    kubectl get pod <pod-name> -o wide
  4. 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.

  1. Avvia un container di debug. Il comando seguente utilizza i-01234567890123456 per l’ID di istanza del nodo, -it alloca a tty e allega stdin per l’utilizzo interattivo, e utilizza il profilo sysadmin del file kubeconfig.

    kubectl debug node/i-01234567890123456 -it --profile=sysadmin --image=public.ecr.aws/amazonlinux/amazonlinux:2023

    Di 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#
  2. Dalla shell, puoi ora installare util-linux-core che fornisce il comando nsenter. Utilizza nsenter per inserire il namespace di montaggio di PID 1 (init) sull’host ed eseguire il comando journalctl per eseguire lo streaming dei log da kubelet:

    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.

  • Volumi EBS

    • 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

  • EC2 Istanze

    • 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

  1. Vai alla CloudTrail console

  2. Seleziona “Cronologia degli eventi” dal riquadro di navigazione a sinistra

  3. 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:

  1. Esegui kubectl get nodeclaim per verificare le NodeClaims che sono Ready = False.

    kubectl get nodeclaim
  2. 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 NodeClass con 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 RunInstances chiamata 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.

  1. Fai clic su “Crea e analizza il percorso”

  2. Fornisci un nome per l’analisi (ad esempio “Errore nell’unione del nodo”)

  3. Per “Tipo di origine”, seleziona “Istanze”

  4. Inserisci l’ID dell’istanza del nodo soggetto a errore come “Origine”

  5. Per la “Destinazione del percorso”, seleziona “Indirizzo IP”

  6. Inserisci uno degli indirizzi IP per il server API come “Indirizzo di destinazione”

  7. Espandi la “Sezione di configurazione aggiuntiva dell’intestazione dei pacchetti”

  8. Inserisci una “Porta di destinazione” di 443

  9. Seleziona “Protocollo” come TCP se non è già selezionato

  10. Fai clic su “Crea e analizza il percorso”

  11. 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 nei log di auditi kube-apiserver. Gli eventi includono vari stati di interruzione, errori di pianificazione, problemi di capacità e problemi relativi ai nodi. Analizzando questi log, puoi comprendere meglio:

  • 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:

  1. Vai CloudWatch alla console

  2. Seleziona “Logs Insights” dal riquadro di navigazione a sinistra

  3. Scegli il gruppo di log per i log del piano di controllo del cluster EKS

  4. Incolla la query nell’editor di query

  5. Regola l’intervallo di tempo in base alle esigenze

  6. 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:

Utilizza questi articoli di re:POST per procedure avanzate di AWS risoluzione dei problemi: