Wie behebe ich Probleme mit meinen Amazon EFS-Volume-Mounts in Amazon EKS?
Ich möchte Fehler beim Mounten von Amazon Elastic File System (Amazon EFS)-Volumes in meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster beheben.
Lösung
Wenn Sie Ihr Amazon EFS-Volume in Ihrem Amazon EKS-Cluster mounten, wird in Ihren Pods möglicherweise einer der folgenden Fehler angezeigt:
- "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" („Ausgabe: mount.nfs4: Das Einbinden von fs-18xxxxxx.efs.us-east-1.amazonaws.com: /path-in-dir:/ist fehlgeschlagen, vom Server angegebener Grund: Keine solche Datei oder kein solches Verzeichnis“)
- "Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct" („Ausgang: fs-xxxxxx.efs.us-west-2.amazonaws.com“ konnte nicht aufgelöst werden – überprüfen Sie, ob Ihre Dateisystem-ID korrekt ist.“)
- "mount.nfs4: access denied by server while mounting 127.0.0.1:/" („mount.nfs4: Zugriff vom Server beim Mounten von 127.0.0.1 verweigert:/“)
- „mounte.nfs: Connection timed out" („mounte.nfs:Zeitlimit für Verbindung überschritten“)
- "Unable to attach or mount volumes: timed out waiting for the condition" („Volumes können nicht angehängt oder gemountet werden: Beim Warten auf die Bedingung ist das Zeitlimit abgelaufen“)
Bevor Sie mit den Schritten zur Fehlerbehebung beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:
- Ein Amazon EFS-Dateisystem, das mit einem Mount-Ziel in jedem der Worker-Knoten-Subnetze erstellt wurde.
- Eine gültige EFS-Speicherklassendefinition (von der GitHub-Website), die den efs.csi.aws.com Provisioner verwendet.
- Eine gültige PersistentVolumeClaim (PVC) -Definition und eine PersistentVolume-Definition. Dies ist nicht erforderlich, wenn Sie dynamisches Provisioning verwenden (von der GitHub-Website).
- Der Amazon EFS CSI-Treiber ist im Cluster installiert.
Stellen Sie sicher, dass die Mount-Ziele korrekt konfiguriert sind
Stellen Sie sicher, dass Sie die EFS-Mount-Ziele in jeder Availability Zone erstellen, in der die EKS-Knoten ausgeführt werden. Nehmen wir zum Beispiel an, dass Ihre Worker-Knoten über us-east-1a und us-east-1b verteilt sind. Erstellen Sie in diesem Fall Mountziele in beiden Availability Zones für das EFS-Dateisystem, das Sie mounten möchten. Wenn Sie die Mount-Ziele nicht korrekt erstellen, geben die Pods, die das EFS-Dateisystem mounten, einen Fehler zurück, der der folgenden Meldung ähnelt:
"Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct." („Ausgang:„fs-xxxxxx.efs.us-west-2.amazonaws.com“ konnte nicht aufgelöst werden. Überprüfen Sie, ob Ihre Dateisystem-ID korrekt ist.“
Stellen Sie sicher, dass die Ihrem EFS-Dateisystem und Ihren Worker-Knoten zugeordnete Sicherheitsgruppe NFS-Verkehr zulässt
Die Sicherheitsgruppe Ihres EFS-Dateisystems muss über eine eingehende Regel verfügen, die NFS-Datenverkehr vom CIDR für die VPC Ihres Clusters zulässt. Erlaube Port 2049 für eingehenden Datenverkehr.
Die Sicherheitsgruppe, die Ihren Worker-Knoten zugeordnet ist, auf denen die Pods das EFS-Volume nicht mounten können, muss über eine Regel für ausgehenden Datenverkehr verfügen. Insbesondere muss diese ausgehende Regel NFS-Verkehr (Port 2049) zum EFS-Dateisystem zulassen.
Wenn die Sicherheitsgruppe keinen NFS-Verkehr zulässt, geben die Pods, die das Dateisystem mounten, die folgenden Fehler zurück:
- „mounte.nfs: Connection timed out" („mounte.nfs:Zeitlimit für Verbindung überschritten“)
- "Unable to attach or mount volumes: timed out waiting for the condition" („Volumes können nicht angehängt oder gemountet werden: Beim Warten auf die Bedingung ist das Zeitlimit abgelaufen“)
Stellen Sie sicher, dass das Unterverzeichnis in Ihrem EFS-Dateisystem erstellt wurde, wenn Sie den Pod in ein Unterverzeichnis mounten
Wenn Sie Unterpfade in persistenten Volumes hinzufügen, erstellt der EFS-CSI-Treiber den Unterverzeichnispfad im Dateisystem nicht. Die Verzeichnisse müssen bereits vorhanden sein, damit der Mount-Vorgang erfolgreich ist. Wenn der Unterpfad im Dateisystem nicht vorhanden ist, schlagen die Pods mit dem folgenden Fehler fehl:
"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" („Ausgabe: mount.nfs4: Das Einbinden von fs-18xxxxxx.efs.us-east-1.amazonaws.com: /path-in-dir:/ist fehlgeschlagen, vom Server angegebener Grund: Keine solche Datei oder kein solches Verzeichnis“)
Stellen Sie sicher, dass die VPC des Clusters den Amazon DNS-Server verwendet
Wenn Sie den EFS mit dem EFS-CSI-Treiber mounten, erfordert der EFS-Mount-Helper, dass Sie den Amazon DNS-Server für die VPC verwenden.
Hinweis: Das Dateisystem-DNS des EFS-Dienstes unterliegt einer AWS-Architekturbeschränkung. Nur das von Amazon bereitgestellte DNS kann das Dateisystem-DNS des EFS-Dienstes auflösen.
Um den DNS-Server zu überprüfen, melden Sie sich beim Worker-Knoten an und führen Sie den folgenden Befehl aus:
nslookup fs-4fxxxxxx.efs.region.amazonaws.com AMAZON\_PROVIDED\_DNS\_IP
Hinweis: Ersetzen Sie die Region durch Ihre AWS-Region. Ersetzen Sie AMAZON\ _PROVIDED\ _DNS\ _IP durch Ihre DNS-IP-Adresse. Standardmäßig ist dies der VPC-Netzwerkbereich (10.0.0.0) plus zwei.
Wenn die Cluster-VPC einen benutzerdefinierten DNS-Server verwendet, konfigurieren Sie diesen DNS-Server so, dass er alle***.amazonaws.com**-Anforderungen an den Amazon DNS-Server weiterleitet. Wenn diese Anfragen nicht weitergeleitet werden, schlagen die Pods mit einem Fehler fehl, der der folgenden Meldung ähnelt:
"Output: Failed to resolve "fs-4 fxxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct." („Ausgang:„fs-4 fxxxxxx.efs.us-west-2.amazonaws.com“ konnte nicht gelöst werden. Überprüfen Sie, ob Ihre Dateisystem-ID korrekt ist.“)
Vergewissern Sie sich, dass die persistente Volume-Definition die Mount-Optionen „iam“ enthält, wenn Sie eine restriktive Dateisystemrichtlinie verwenden
In einigen Fällen ist die EFS-Dateisystemrichtlinie so konfiguriert, dass sie die Mount-Berechtigungen auf bestimmte IAM-Rollen beschränkt. In diesem Fall erfordert der EFS-Mount-Helper, dass die Mount-Option\ -o iam während des Mount-Vorgangs übergeben wird. Fügen Sie die Eigenschaft spec.mountOptions hinzu, damit der CSI-Treiber dieiam-Mount-Option hinzufügen kann (von der GitHub-Website).
Das folgende Beispiel ist einePersistentVolume-Spezifikation:
apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv1 spec: mountOptions: - iam . . . . . .
Wenn Sie die Optioniam mount nicht mit einer restriktiven Dateisystemrichtlinie hinzufügen, schlagen die Pods mit einem Fehler fehl, der der folgenden Meldung ähnelt:
"mount.nfs4: access denied by server while mounting 127.0.0.1:/" („mount.nfs4: Zugriff vom Server beim Mounten von 127.0.0.1 verweigert:/“)
Stellen Sie sicher, dass das Amazon EFS-CSI-Treiber-Controller-Dienstkonto mit der richtigen IAM-Rolle versehen ist und dass die IAM-Rolle über die erforderlichen Berechtigungen verfügt.
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob das von denefs-csi-controller-Pods verwendete Dienstkonto die richtige Anmerkung enthält:
kubectl describe sa efs-csi-controller-sa -n kube-system
Stellen Sie sicher, dass die folgende Anmerkung vorhanden ist:
eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS\_EFS\_CSI\_DriverRole
Stellen Sie sicher, dass Sie die folgenden Schritte ausgeführt haben:
- Sie haben den IAM-OIDC-Anbieter für den Cluster erstellt.
- Die IAM-Rolle, die dem Dienstkonto efs-csi-controller-sa zugeordnet ist, verfügt über die erforderlichen Berechtigungen (von der GitHub-Website), um EFS-API-Aufrufe auszuführen.
- Die Vertrauensrichtlinie der IAM-Rolle vertraut dem Dienstkonto efs-csi-controller-sa. Die Vertrauensrichtlinie der IAM-Rolle muss wie das folgende Beispiel aussehen:
{ "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": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } }\] }
Stellen Sie sicher, dass die EFS-CSI-Treiber-Pods ausgeführt werden
Der EFS-CSI-Treiber besteht aus Controller-Pods, die als Deployment ausgeführt werden, und Node-Pods, die als DaemonSet ausgeführt werden. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob diese Pods in Ihrem Cluster ausgeführt werden:
kubectl get all -l app.kubernetes.io/name=aws-efs-csi-driver -n kube-system
Überprüfen Sie den EFS-Mount-Vorgang vom EC2-Worker-Knoten aus, auf dem der Pod das Dateisystem nicht mounten kann
Melden Sie sich beim Amazon EKS-Worker-Knoten an, auf dem der Pod geplant ist. Verwenden Sie dann den EFS-Mount-Helper, um zu versuchen, das EFS-Dateisystem manuell auf dem Worker-Knoten zu mounten. Führen Sie den folgenden Befehl aus, um den Mount-Vorgang zu testen:
sudo mount -t -efs -o tls file-system-dns-name efs-mount-point/
Wenn der Worker-Knoten das Dateisystem mounten kann, überprüfen Sie dieEFS-Plugin-Protokolle des CSI-Controllers und der CSI-Knoten-Pods.
Überprüfen Sie die EFS-CSI-Treiber-Pod-Logs
Überprüfen Sie die Protokolle des CSI-Treiber-Pods, um die Ursache für die Mount-Fehler zu ermitteln. Wenn das Volume nicht gemountet werden kann, überprüfen Sie dieEFS-Plugin-Protokolle. Führen Sie die folgenden Befehle aus, um dieEFS-Plugin-Container-Logs abzurufen:
kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 10 Monaten