Come faccio a risolvere i problemi relativi ai montaggi dei volumi Amazon EFS in Amazon EKS?

7 minuti di lettura
0

Desidero montare volumi Amazon Elastic Block Store (Amazon EBS) nel mio cluster Amazon Elastic Kubernetes Service (Amazon EKS). Tuttavia, ricevo l'errore "Timeout scaduto in attesa che i volumi vengano allegati o montati per il pod".

Risoluzione

Prima di iniziare la risoluzione dei problemi, verifica di disporre dei seguenti prerequisiti:

  • Le autorizzazioni AWS Identity and Access Management (IAM) richieste per il ruolo IAM dell'account di servizio ebs-csi-controller-sa.
    Nota: Per risolvere i problemi con il tuo account di servizio, consulta la sezione Verificare il ruolo IAM dell'account di servizio del controller del driver di Amazon EBS e le autorizzazioni del ruolo.
  • Un PersistentVolumeClaim (PVC) valido (dal sito Web GitHub) nello stesso namespace del pod.
  • Una definizione valida della classe di archiviazione EBS che utilizza il provisioner integrato nell'albero kubernetes.io/aws-ebs (dal sito Web di Kubernetes). Oppure, una definizione di classe di archiviazione che utilizza il provider di driver EBS Container Storage Interface (CSI) ebs.csi.aws.com (dal sito Web GitHub).

Verifica che il driver, il controller e il nodo dei pod di Amazon EBS CSI siano in esecuzione

Il driver EBS CSI è composto da controller pod che vengono eseguiti come distribuzione e nodi di pod che vengono eseguiti come set di daemon. Per verificare se il tuo cluster esegue questi pod, utilizza il seguente comando:

kubectl get all -l app.kubernetes.io/name=aws-ebs-csi-driver -n kube-system

Nota: I nodi di lavoro Windows e AWS Fargate non supportano il driver EBS CSI.

Assicurati che la versione del driver EBS CSI installata sia compatibile con la versione Kubernetes del tuo cluster (dal sito Web di GitHub).

Verificare se il PVC ha riscontrato problemi durante il collegamento al volume persistente EBS

Per verificare se il PVC presenta problemi, esegui il seguente comando per visualizzare gli eventi. Nel seguente comando di esempio, sostituisci PVC_NAME e NAMESPACE con i valori corretti relativi al 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 è riuscito o meno. Puoi anche 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, individua il messaggio di errore negli eventi.

Consulta i log dei controller pod CSI di Amazon EBS

Per scoprire la causa degli errori di montaggio, controlla i registri del controller pod. Se il volume presenta un errore durante la creazione, fai riferimento ai log ebs-plugin e csi-provisioner. Per recuperare i log del container ebs-plugin, esegui i seguenti comandi:

kubectl logs deployment/ebs-csi-controller -n kube-system -c ebs-plugin
kubectl logs daemonset/ebs-csi-node -n kube-system -c ebs-plugin

Per recuperare i log del container csi-provisioner, esegui i seguenti comandi:

kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-provisioner

Se i volumi EBS non si collegano al pod, controlla i log csi-attacher. Per recuperare i log del container csi-attacher, esegui il seguente comando:

kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-attacher

Verificare il ruolo IAM dell'account di servizio del controller del driver di Amazon EBS CSI e le autorizzazioni del ruolo

**Nota:**Per aumentare l'efficienza di debug del driver EBS CSI, imposta le opzioni del registro di debug (dal sito Web di GitHub).

Assicurati che l'account di servizio del controller del driver EBS CSI sia annotato con il ruolo IAM corretto. Inoltre, assicurati che il ruolo IAM disponga delle autorizzazioni richieste.

I seguenti problemi provocano errori relativi alla mancata autorizzazione negli eventi PVC o nei log ebs-csi-controller:

1.   Per determinare se l'account di servizio dei pod ebs-csi-controller ha l'annotazione corretta, esegui il seguente comando:

kubectl describe sa ebs-csi-controller-sa -n kube-system

2.    Verifica che sia presente la seguente annotazione:

eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole

3.    Verifica di aver creato il provider IAM OpenID Connect (OIDC) per il cluster. Inoltre, verifica che il ruolo IAM disponga delle autorizzazioni necessarie per eseguire chiamate API EBS. Assicurati che i criteri di attendibilità del ruolo IAM faccia affidamento sull'account di servizio ebs-csi-controller-sa.

3.    Verifica che AWS CloudTrail effettui le chiamate createVolume, attachVolume e DetachVolume. Per farlo, esamina i log di CloudTrail. Inoltre, esamina i log per determinare quale principale effettua le chiamate. Ciò consente di determinare se il ruolo IAM del controller o del nodo di lavoro utilizza il ruolo IAM dell'account di servizio.

Verifica l'affinità tra i nodi del volume persistente

Ogni volume persistente ha un'affinità tra i nodi che limita il collegamento di volumi persistenti ai nodi all'interno di una singola zona di disponibilità. Questo perché puoi collegare i volumi EBS solo ai pod o ai nodi che vengono eseguiti nella stessa zona di disponibilità in cui li hai creati. Se i pod pianificati per i nodi in una zona di disponibilità utilizzano il volume persistente EBS in una zona di disponibilità diversa, verrà visualizzato questo errore:

"FailedScheduling: 1 nodo presentava un conflitto di affinità tra i nodi del volume"

Per evitare ciò, usa StatefulSets (dal sito Web Kubernetes) anziché la distribuzione. In questo modo creerai un volume EBS univoco per ogni pod di StatefulSets nella stessa zona di disponibilità del pod.

Per verificare l'affinità tra i nodi del volume persistente, esegui il seguente comando. Sostituisci PERSISTENT_VOLUME_NAME con il nome del tuo volume:

kubectl describe pv PERSISTENT_VOLUME_NAME

Nota: Non è possibile montare un volume EBS su due pod diversi che funzionano su due nodi di lavoro diversi. Puoi collegare il volume EBS ai pod che funzionano su un nodo, ma non puoi collegarlo contemporaneamente a un altro nodo. Se provi a collegare il volume EBS a due pod su nodi di lavoro diversi, il pod non funzionerà e riceverai questo errore:

"Avviso FailedAttachVolume 2m38s attachdetach-controller Errore Multi-Attach per il volume "pvc-1cccsdfdc8-fsdf6-43d6-a1a9-ea837hf7h57fa" Il volume è già collegato esclusivamente a un nodo e non può essere collegato a un altro"

Assicurati che i controller EBS siano connessi all'API Amazon Elastic Compute Cloud (Amazon EC2)

Se visualizzi errori relativi ai timeout di connessione nei log ebs-csi-controller, il controller EBS CSI potrebbe non essere connesso all'API Amazon EC2. Se i controller pod presentano problemi di connettività durante la creazione del PVC, verrà visualizzato questo errore:

"Avviso ProvisioningFailed persistentvolumeclaim/storage-volume-1 non è riuscito a effettuare il provisioning del volume con StorageClass "ebs-sc": errore rpc: codice = deadlineExceeded desc = scadenza contestuale superata"

Per risolvere questo errore, verifica che le sottoreti dei pod del controller EBS siano connesse all'API EC2. Se gestisci un cluster privato con un proxy HTTP/HTTPS, verifica che i tuoi controller EBS CSI possano utilizzare il proxy HTTP/HTTPS. L'installazione helm del driver EBS CSI supporta la configurazione di un proxy HTTP/HTTPS (dal sito Web di Kubernetes).

Questo messaggio potrebbe anche riferirsi a un problema con OIDC. Per risolvere i problemi OIDC, consulta Come faccio a risolvere un provider OIDC e IRSA in Amazon EKS?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa