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

Ultimo aggiornamento: 22/12/2021

Ricevo i seguenti errori nei pod quando monto volumi Amazon Elastic File System (Amazon EFS) nel cluster Amazon Elastic Kubernetes Service (Amazon EKS):

  • "Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com://path-in-dir:/ failed, reason given by server: No such file or directory" (Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com://path-in-dir:/ non riuscito, motivo indicato dal server: nessun file o directory di questo tipo)
  • "Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct" (Output: impossibile risolvere "fs-xxxxxx.efs.us-west-2.amazonaws.com" - controlla che l'ID del file system sia corretto)
  • "mount.nfs4: access denied by server while mounting 127.0.0.1:/" (mount.nfs4: accesso negato dal server durante il montaggio 127.0.0.1:/)
  • "mount.nfs: Connection timed out" (mount.nfs: timeout della connessione)

In che modo posso risolvere il problema?

Risoluzione

Prima di iniziare i seguenti passaggi per la risoluzione dei problemi, verifica di disporre di quanto segue:

Verifica che le destinazioni di montaggio siano configurate correttamente

Assicurati di creare le destinazioni di montaggio EFS in ogni zona di disponibilità in cui sono in esecuzione i nodi EKS. Ad esempio, se i nodi (worker) sono distribuiti tra us-east-1a e us-east-1b, assicurati di creare destinazioni di montaggio in entrambe le zone di disponibilità per il file system EFS che desideri di montare. Se non si creano correttamente le destinazioni di montaggio, i pod che stanno montando il file system EFS restituiranno un errore simile al seguente:

Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Verifica che il gruppo di sicurezza associato al file system EFS consenta il traffico NFS

Il gruppo di sicurezza associato al file system EFS deve disporre di una regola in ingresso che consenta il traffico NFS (porta 2049) dal CIDR per il VPC del cluster. Se il gruppo di sicurezza delle destinazioni di montaggio EFS non consente il traffico NFS, i pod che montano il file system EFS restituiscono un errore simile al seguente:

"mount.nfs: Connection timed out"

Se stai montando il pod in una sottodirectory, verifica che la sottodirectory sia stata creata nel file system EFS

Quando si aggiungono percorsi secondari in volumi persistenti, il driver CSI di EFS non crea il percorso della sottodirectory nel file system EFS nell'ambito dell'operazione di montaggio. Le directory devono essere già presenti affinché l'operazione di montaggio abbia successo. Se il percorso secondario non è presente nel file system, i pod falliscono con il seguente errore:

Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ failed, reason given by server: No such file or directory

Conferma che il VPC del cluster utilizza il server DNS di Amazon

Quando si utilizza il driver CSI di EFS per montare EFS, l'helper di montaggio EFS nel driver CSI di EFS richiede che il VPC utilizzi il server DNS Amazon per il VPC. Nota: il DNS del file system del servizio EFS presenta una limitazione dell'architettura AWS. Solo il DNS fornito da Amazon può risolvere il DNS del file system del servizio EFS.

Verifica il server DNS accedendo al nodo (worker) ed eseguendo il seguente comando:

nslookup fs-4fxxxxxx.efs.region.amazonaws.com <amazon provided DNS IP>
<amazon provided DNS IP = VPC network(10.0.0.0) range plus two>

Nota: sostituisci il campo region con la tua regione AWS.

Se il VPC per il cluster utilizza un server DNS personalizzato, devi configurare il server DNS personalizzato per inoltrare tutte le richieste *.amazonaws.com al server DNS di Amazon. Se queste richieste non vengono inoltrate, i pod falliscono con un errore simile al seguente:

Output: Failed to resolve "fs-4 fxxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Verifica di avere opzioni di montaggio "iam" nella definizione del volume persistente quando utilizzi una policy restrittiva del file system

In alcuni casi, la policy del file system EFS è configurata per limitare le autorizzazioni di montaggio a ruoli IAM specifici. In questo caso, l'helper di montaggio EFS nel driver CSI di EFS richiede che l'opzione di montaggio -o iam venga eseguita durante l'operazione di montaggio. Includi la proprietà spec.mountOptions in modo che il driver CSI possa aggiungere l'opzione di montaggio iam (dal sito Web GitHub).

Esempio di specifica PersistentVolume:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv1
spec:
  mountOptions:
    - iam
. . . . . .

Se non si aggiunge l'opzione di montaggio iam quando si utilizza una policy restrittiva del file system, i pod falliscono con un errore simile al seguente:

mount.nfs4: access denied by server while mounting 127.0.0.1:/

Verifica che l'account di servizio del controller del driver CSI di Amazon EFS sia annotato con il ruolo IAM corretto e che il ruolo IAM disponga delle autorizzazioni richieste

Esegui il comando seguente per verificare che l'account di servizio utilizzato dai pod efs-csi-controller abbia l'annotazione corretta:

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

Verifica che sia presente la seguente annotazione:

eks\.amazonaws\.com/role-arn"="arn:aws:iam::111122223333:role/AmazonEKS_EFS_CSI_Driver_Policy

Verifica che il provider IAM OIDC per il cluster sia stato creato e che il ruolo IAM disponga delle autorizzazioni necessarie (dal sito Web GitHub) per eseguire chiamate API EFS. Inoltre, verifica che la policy di attendibilità del ruolo IAM consideri attendibile l'account di servizio efs-csi-controller-sa.

Verifica che i pod del driver CSI di EFS siano in esecuzione

Il driver CSI di EFS è costituito da pod del controller che vengono eseguiti come distribuzione e pod del nodo che vengono eseguiti come daemonset. Esegui i seguenti comandi per verificare che questi pod siano in esecuzione nel tuo cluster:

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

Verifica l'operazione di montaggio EFS dal nodo (worker) EC2 in cui il pod non riesce a montare il file system

Accedi al nodo (worker) di Amazon EKS in cui è pianificato il pod. Quindi, utilizza l'helper di montaggio EFS per provare a montare manualmente il file system EFS sul nodo (worker). È possibile eseguire il seguente comando per testare:

sudo mount -t -efs -o tls file-system-dns-name efs-mount-point/

Se il nodo (worker) è in grado di montare il file system, rivedi i registri efs-plugin dai pod del controller CSI e del nodo CSI.

Controlla i registri dei pod del driver CSI di EFS

Controlla i registri dei pod del driver CSI per determinare la causa dei fallimenti di montaggio. Se non riesci a montare il volume, rivedi i registri efs-plugin. Esegui i seguenti comandi per recuperare i registri del container efs-plugin:

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

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?