Wie behebe ich Probleme mit meinen Amazon EFS-Volume-Mounts in Amazon EKS?

Lesedauer: 7 Minute
0

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:

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
AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr