Come posso risolvere i problemi relativi ai montaggi del mio volume EBS in Amazon EKS?
Ultimo aggiornamento: 22/08/2022
Durante il montaggio dei volumi Amazon Elastic Block Store (Amazon EBS) nel mio cluster Amazon Elastic Kubernetes Service (Amazon EKS) ricevo il seguente errore nei pod:"Timeout scaduto in attesa dei volumi per fissare o montare il pod"
Risoluzione
Prima di iniziare con i passaggi successivi per la risoluzione dei problemi, verifica di avere:
- Le autorizzazioni AWS Identity and Access Management (IAM) richieste per il ruolo IAM dell'account di servizio "ebs-csi-controller-sa".
- Un PersistentVolumeClaim (PVC) valido, è presente nello stesso spazio dei nomi del pod.
- Una definizione valida della classe di archiviazione EBS utilizzando il provisioner in-tree "kubernetes.io/aws-ebs" o il provisioner del driver Amazon EBS Container Storage Interface (CSI) "ebs.csi.aws.com".
Verifica che il controller del driver Amazon EBS CSI e i pod dei nodi siano in esecuzione
Il driver Amazon EBS CSI è costituito da pod controller che vengono eseguiti come pod di distribuzione e pod nodo eseguiti come daemonset. Esegui i seguenti comandi per verificare se questi pod sono in esecuzione nel tuo cluster:
kubectl get all -l app.kubernetes.io/name=aws-ebs-csi-driver -n kube-system
Nota: il driver Amazon EBS CSI non è supportato sui nodi (worker) Windows o EKS Fargate.
Assicurati che la versione del driver Amazon EBS CSI installata sia compatibile con la versione Kubernetes del tuo cluster.
Verifica se il PVC ha riscontrato problemi durante l'associazione al volume persistente EBS
Per verificare se il PVC ha riscontrato problemi, esegui il seguente comando per visualizzare gli eventi. Nel seguente comando di esempio, sostituisci pvc-name e spazio dei nomi con i valori corretti per il tuo ambiente.
kubectl describe pvc <pvc-name> -n <namespace>
Se utilizzi il provisioning dinamico dei volumi, esamina gli eventi restituiti per determinare se il provisioning dei volumi ha avuto esito positivo o negativo. Inoltre, puoi visualizzare il nome del volume persistente corrispondente a cui è associato il PVC, come mostrato nell'esempio seguente:
Name: ebs-claim
Namespace: default
StorageClass: ebs-sc
Status: Bound
Volume: pvc-5cbd76de-6f15-41e4-9948-2bba2574e205
Annotations: pv.kubernetes.io/bind-completed: yes
pv.kubernetes.io/bound-by-controller: yes
volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
volume.kubernetes.io/selected-node: ip-10-0-2-57.ec2.internal
. . . . .
. . . . .
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
. . . . .
Normal Provisioning 5m22s ebs.csi.aws.com_ebs-csi-controller-57d4cbb9cc-dr9cd_8f0373e8-4e58-4dd0-b83c-da6f9ad5d5ce External provisioner is provisioning volume for claim "default/ebs-claim"
Normal ProvisioningSucceeded 5m18s ebs.csi.aws.com_ebs-csi-controller-57d4cbb9cc-dr9cd_8f0373e8-4e58-4dd0-b83c-da6f9ad5d5ce Successfully provisioned volume pvc-5cbd76de-6f15-41e4-9948-2bba2574e205
Se il provisioning non è riuscito, trova il messaggio di errore negli eventi.
Esamina i registri dei pod del controller CSI di Amazon EBS
Controlla i registri dei pod del controller per comprendere la causa dei montaggi non riusciti. Se durante la sua creazione il volume presenta un errore, fai riferimento ai registri ebs-plugin e csi-provisioner. Esegui i seguenti comandi per recuperare i registri del container ebs-plugin:
kubectl logs deployment/ebs-csi-controller -n kube-system -c ebs-plugin
kubectl logs daemonset/ebs-csi-node -n kube-system -c ebs-plugin
Esegui il seguente comando per recuperare i registri del container csi-provisioner:
kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-provisioner
Se i volumi EBS non riescono a collegarsi al pod, esamina i registri csi-attacher per capire il motivo. Esegui il seguente comando per recuperare i registri del container csi-attacher:
kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-attacher
Verifica che l'account di servizio del controller del driver CSI di Amazon EBS sia annotato con il ruolo IAM corretto e che il ruolo IAM disponga delle autorizzazioni richieste
Gli errori non autorizzati negli eventi PVC o nei registri ebs-csi-controller sono causati da quanto segue:
- Autorizzazioni mancanti nel ruolo IAM.
- Il ruolo IAM associato all'account di servizio non è corretto.
1. Esegui il seguente comando per determinare se l'account di servizio utilizzato dai pod ebs-csi-controller dispone dell'annotazione corretta:
kubectl describe sa ebs-csi-controller-sa -n kube-system
Verifica che sia presente la seguente annotazione:
eks.amazonaws.com/role-arn = arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole
2. Verifica che il provider IAM OIDC per il cluster sia stato creato e che il ruolo IAM disponga delle autorizzazioni necessarie per eseguire chiamate API EBS. Inoltre, verifica che la policy di attendibilità del ruolo IAM consideri attendibile l'account di servizio ebs-csi-controller-sa.
3. Controlla i registri AWS CloudTrail del tuo account per verificare che le chiamate CreateVolume, AttachVolume e DetachVolume siano in corso. Esamina anche i registri di CloudTrail per determinare quale principale ha effettuato le chiamate. Queste informazioni consentono di determinare se il ruolo IAM dell'account di servizio viene utilizzato dal controller o dal ruolo IAM del nodo (worker).
Verifica l'affinità dei nodi del volume persistente
Ogni volume persistente viene creato con un'affinità di nodo che limita il collegamento di volumi persistenti ai nodi all'interno di una singola zona di disponibilità. Questo perché i volumi EBS possono essere collegati solo a pod o nodi in esecuzione nella stessa zona di disponibilità in cui sono stati creati. Se i pod pianificati su nodi in una zona di disponibilità tentano di utilizzare il volume persistente EBS in una zona di disponibilità diversa, viene visualizzato un errore simile al seguente:
FailedScheduling: 1 node(s) had volume node affinity conflict
Per evitare che questo avvenga, utilizza StatefulSets invece di Deployment, in modo che venga creato un volume EBS univoco per ogni pod degli StatefulSets nella stessa zona di disponibilità del pod.
Puoi verificare l'affinità dei nodi del volume persistente eseguendo il seguente comando. Nel seguente comando di esempio, sostituisci persistent-volume-name con il nome del tuo volume.
kubectl describe pv <persistent-volume-name>
Nota: tieni presente che non puoi montare un volume EBS su due pod diversi in esecuzione su due diversi nodi (worker). Il volume EBS può essere collegato a pod in esecuzione su un nodo ma non può essere collegato a un altro nodo contemporaneamente. Se tenti di collegare il volume EBS a due diversi pod su nodi (worker) diversi, il pod genera un errore simile al seguente:
Warning FailedAttachVolume 2m38s attachdetach-controller Multi-Attach error for volume "pvc-1cccsdfdc8-fsdf6-43d6-a1a9-ea837hf7h57fa" Volume is already exclusively attached to one node and can't be attached to another
Assicurati che i tuoi controller pod EBS abbiano la connettività all'API EC2
Se vengono visualizzati errori che indicano timeout di connessione nei registri del controller EBS-CSI, il controller EBS CSI potrebbe non essere connesso all'API EC2. Se i controller pod presentano problemi di connettività all'API EC2, durante la creazione del PVC viene visualizzato un errore simile al seguente:
Warning ProvisioningFailed persistentvolumeclaim/storage-volume-1 failed to provision volume with StorageClass "ebs-sc": rpc error: code = DeadlineExceeded desc = context deadline exceeded
Per correggere questo errore, verifica che le sottoreti dei pod del controller EBS abbiano connettività all'API EC2. Se stai eseguendo un cluster privato con un proxy HTTP/HTTPS, verifica che i pod del controller EBS CSI siano configurati per utilizzare il proxy HTTP/HTTPS. L'installazione dell'helm del driver EBS CSI supporta la configurazione di un proxy HTTP/HTTPS.
Questo articolo è stato utile?
Hai bisogno della fattura o di supporto tecnico?