Salta al contenuto

Come posso risolvere i problemi relativi al montaggio dei miei volumi Amazon EFS in Amazon EKS?

7 minuti di lettura
0

Ricevo un errore quando provo a montare i miei volumi Amazon Elastic File System (Amazon EFS) nel mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Risoluzione

Prerequisiti:

  • Assicurati che il file system di Amazon EFS abbia una destinazione di montaggio in ciascuna delle sottoreti dei nodi worker per la zona di disponibilità.
  • Verifica di utilizzare efs.csi.aws.com per la definizione della classe di archiviazione di Amazon EFS. Per ulteriori informazioni, consulta EFS storage class (Classe di archiviazione di EFS) sul sito web GitHub.
  • Verifica di utilizzare PersistentVolumeClaim e PersistentVolume. Per ulteriori informazioni, consulta PersistentVolumeClaim e PersistentVolume sul sito web GitHub.
    Nota: se utilizzi il provisioning dinamico, non hai bisogno di utilizzare PersistentVolumeClaim e PersistentVolume. Per informazioni, consulta Dynamic Provisioning (Provisioning dinamico) sul sito web GitHub.
  • Assicurati di aver installato il componente aggiuntivo del driver CSI di Amazon EFS nel cluster EKS.

Verifica di aver configurato correttamente la rete dai nodi worker EKS all'API Amazon EFS

Assicurati di avere accesso all'API Amazon EFS dai nodi worker EFS e dai pod del controller EFS.

Se non configuri la rete per raggiungere l'API Amazon EFS, potresti ricevere uno dei seguenti messaggi di errore:

  • "failed to provision volume with StorageClass "xxxx": rpc error: code = DeadlineExceeded desc = context deadline exceeded"
  • "Could not start amazon-efs-mount-watchdog, unrecognized init system "bash" Mount attempt x/3 failed due to timeout after 15 sec"
  • "Unable to attach or mount volumes: timed out waiting for the condition"

Se utilizzi un cluster privato senza accesso a Internet in uscita, devi includere l'endpoint del cloud privato virtuale (VPC) com.amazonaws.region.elasticfilesystem nel VPC. Crea una regola in entrata per il gruppo di sicurezza dell'endpoint del VPC che consenta il traffico verso la porta 443 dalle sottoreti dei nodi worker e dei pod. Verifica che la policy associata all'endpoint del VPC disponga delle autorizzazioni richieste.

Verifica di aver configurato correttamente le destinazioni di montaggio di Amazon EFS

Assicurati di aver creato le destinazioni di montaggio di Amazon EFS in ogni zona di disponibilità in cui vengono eseguiti i nodi EKS. Ad esempio, se hai distribuito i nodi worker in us-east-1a e us-east-1b, crea destinazioni di montaggio in entrambe le zone di disponibilità per il file system di EFS che desideri montare.

Se non configuri correttamente le destinazioni di montaggio, potresti ricevere il seguente messaggio di errore:

"Output: Failed to resolve "fs-xxxxxx.efs.us-east-1.amazonaws.com" - The file system mount target ip address cannot be found"

Verifica che il gruppo di sicurezza associato al file system di Amazon EFS e ai nodi worker consenta il traffico NFS

Se il gruppo di sicurezza non consente il traffico, potresti ricevere uno dei seguenti messaggi di errore:

  • "Could not start amazon-efs-mount-watchdog, unrecognized init system "bash" Mount attempt x/3 failed due to timeout after 15 sec"
  • "failed to provision volume with StorageClass "xxxx": rpc error: code = DeadlineExceeded desc = context deadline exceeded"
  • "Unable to attach or mount volumes: timed out waiting for the condition"

Il gruppo di sicurezza del file system di Amazon EFS deve avere una regola in entrata che consenta il traffico del file system di rete (NFS) proveniente dal Classless Inter-Domain Routing (CIDR) per il VPC del cluster. Autorizza la porta 2049 per il traffico in entrata.

Il gruppo di sicurezza associato ai nodi worker in cui i pod non riescono a montare il volume EFS deve avere una regola in uscita. La regola in uscita deve consentire il traffico NFS dalla porta 2049 al file system di EFS.

Verifica di aver creato il percorso della sottodirectory nel file system di Amazon EFS

Quando aggiungi percorsi secondari in volumi persistenti, il driver CSI di EFS non crea il percorso della sottodirectory nel file system. La sottodirectory deve essere già presente nel file system affinché l'operazione di montaggio abbia esito positivo. Se la sottodirectory non è presente nel file system, potresti ricevere il seguente messaggio di 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"

Per verificare se la sottodirectory esiste nel file system di EFS, monta il file system di EFS su un'istanza EC2 e verificane il contenuto. Se la sottodirectory non esiste, utilizza il comando mkdir per crearla.

Verifica che il cloud privato virtuale del cluster utilizzi il server Amazon DNS

Quando monti il volume EFS con il driver CSI di Amazon EFS, devi utilizzare il server Amazon DNS per il VPC.

Nota: solo il DNS fornito da Amazon può risolvere il DNS del file system del servizio Amazon EFS.

Per verificare il server DNS, accedi al nodo worker ed esegui questo comando:

nslookup fs-4fxxxxxx.efs.region.amazonaws.com AMAZON_PROVIDED_DNS_IP

Nota: sostituisci region con la tua Regione AWS. Sostituisci AMAZON_PROVIDED_DNS_IP con l'indirizzo IP del tuo DNS.

Se il server DNS personalizzato non inoltra le richieste, potresti ricevere il seguente messaggio di errore:

"Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - The file system mount target ip address cannot be found"

Se il VPC del cluster utilizza un server DNS personalizzato, configura il server DNS per inoltrare tutte le richieste *.amazonaws.com al server Amazon DNS.

Verifica di avere le opzioni di montaggio iam nella definizione PersistentVolume quando utilizzi una policy restrittiva del file system

Se non aggiungi l'opzione di montaggio iam con una policy restrittiva del file system, i pod generano il seguente errore:

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

Se hai configurato il file system di Amazon EFS per limitare le autorizzazioni di montaggio a ruoli AWS Identity and Access Management (AWS IAM) specifici, utilizza il montaggio -o iam. Includi la proprietà spec.mountOptions per consentire al driver CSI di aggiungere l'opzione di montaggio IAM.

Esempio:

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

Verifica di aver annotato l'account di servizio del controller del driver CSI di Amazon EFS con il ruolo IAM corretto che ha le autorizzazioni richieste

Per verificare che l'account di servizio utilizzato dai pod efs-csi-controller abbia l'annotazione corretta, esegui questo comando:

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

Esempio di output:

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

Per verificare che l'account abbia i ruoli e le autorizzazioni AWS Identity and Access Management (AWS IAM) corretti, verifica il provider IAM OIDC del cluster. Verifica che il ruolo IAM associato all'account di servizio efs-csi-controller-sa abbia le autorizzazioni necessarie per eseguire chiamate API EFS. Quindi verifica che la policy di attendibilità del ruolo IAM consideri attendibile l'account di servizio efs-csi-controller-sa.

Esempio di policy di attendibilità dei ruoli IAM:

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Effect": "Allow",  
      "Principal": {  
        "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"  
      },  
      "Action": "sts:AssumeRoleWithWebIdentity",  
      "Condition": {  
        "StringLike": {  
          "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-*",  
          "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"  
        }  
      }  
    }  
  ]  
}

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

Esegui questo comando per verificare che i pod siano attivi nel cluster:

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

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

Accedi al nodo worker Amazon EKS del pod. Quindi utilizza l'helper di montaggio di EFS per provare a montare manualmente il file system di EFS sul nodo worker. Per verificare l'operazione di montaggio, esegui questo comando:

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

Se il nodo worker riesce a montare il file system, esamina i log efs-plugin dei pod dei nodi CSI e del controller CSI.

Verifica i log dei pod del driver CSI di EFS per determinare la causa degli errori di montaggio

Se il montaggio del volume non riesce, consulta i log di efs-plugin. Per recuperare i log del container efs-plugin, esegui questi comandi:

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin  
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin
AWS UFFICIALEAggiornata 5 mesi fa