如何對 Amazon EKS 中 Amazon EFS 磁碟區掛載問題進行疑難排解?
我想要針對在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集中掛載 Amazon Elastic File System (Amazon EFS) 磁碟區時發生的錯誤進行疑難排解。
解決方法
當您在 Amazon EKS 叢集中掛載 Amazon EFS 磁碟區時,可能會在 Pod 出現下列其中一個錯誤:
- 「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 (輸出:mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ 失敗,伺服器給出的原因: 沒有此類檔案或目錄)」
- 「Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct (輸出:無法解析 "fs-xxxxxx.efs.us-west-2.amazonaws.com" – 請檢查您的檔案系統 ID 是否正確)」
- 「mount.nfs4: access denied by server while mounting 127.0.0.1:/ (mount.nfs4︰掛載 127.0.0.1:/ 時伺服器拒絕存取)」
- 「mount.nfs: Connection timed out (mount.nfs:連線逾時)」
- 「Unable to attach or mount volumes: timed out waiting for the condition (無法連接或掛載磁碟區:等待條件逾時)」
開始疑難排解步驟之前,請確認您具有下列先決條件:
- 在每個工作者節點子網路中使用掛接目標建立的 Amazon EFS 檔案系統。
- 使用 efs.csi.aws.com 佈建程式的有效 EFS 儲存類別 (來自 GitHub 網站) 定義。
- 有效的 PersistentVolumeClaim (PVC) 定義和 PersistentVolume 定義。如果您使用的是動態佈建 (來自 GitHub 網站),則不需要這樣做。
- ](https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html#efs-install-driver)安裝在叢集中的 [Amazon EFS CSI 驅動程式。
確認掛載目標是否設定正確
請務必在執行 EKS 節點的每個可用區域中建立 EFS 掛載目標。例如,假設您的工作節點分佈在 us-east-1a 和 us-east-1b。在此情況下,請在您要掛載的 EFS 檔案系統的兩個可用區域中建立掛載目標。如果未正確建立掛載目標,則掛載 EFS 檔案系統的 Pod 會傳回類似於以下訊息的錯誤:
「Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct (輸出:無法解析 "fs-xxxxxx.efs.us-west-2.amazonaws.com" – 請檢查您的檔案系統 ID 是否正確)」
確認與您的 EFS 檔案系統和工作節點相關聯的安全群組是否允許 NFS 通訊
EFS 檔案系統的[安全群組必須具有輸入規則](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#adding-security-group-rules),允許叢集 VPC 的 CIDR 傳輸 NFS 流量。允許連接埠 2049 用於輸入流量。
與 Pod 無法掛接 EFS 磁碟區的工作者節點相關聯的安全群組必須具有輸出規則。具體而言,此輸出規則必須允許將 NFS 流量 (連接埠 2049) 傳輸至 EFS 檔案系統。
如果安全群組不允許 NFS 流量,則掛載檔案系統的 Pod 會傳回下列錯誤:
- 「mount.nfs: Connection timed out (mount.nfs:連線逾時)」
- 「Unable to attach or mount volumes: timed out waiting for the condition (無法連接或掛載磁碟區:等待條件逾時)」
如果要將 Pod 掛載到子目錄,確認是否在 EFS 檔案系統中建立子目錄
當您在持續性磁碟區中新增子路徑時,EFS CSI 驅動程式不會在檔案系統中建立子目錄路徑。目錄必須已存在,掛載作業才能成功。如果子路徑不存在於檔案系統中,則 Pod 會失敗並顯示以下錯誤:
「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 (輸出:mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ 失敗,伺服器給出的原因: 沒有此類檔案或目錄)」
確認叢集的 VPC 是使用 Amazon DNS 伺服器
使用 EFS CSI 驅動程式掛接 EFS 時,EFS 掛載協助程式會要求您使用適用於虛擬私人雲端的 Amazon DNS 伺服器。
**注意:**EFS 服務的檔案系統 DNS 有 AWS 架構限制。只有 Amazon 提供的 DNS 可以解析 EFS 服務的檔案系統 DNS。
若要驗證 DNS 伺服器,請登入 Worker 節點並執行下列命令:
nslookup fs-4fxxxxxx.efs.region.amazonaws.com AMAZON\_PROVIDED\_DNS\_IP
**注意:**以您的 AWS 區域取代 region (區域)。將 AMAZON_PROVIDED_DNS_IP 替換為您的 DNS IP 地址。依預設,這是虛擬私人雲端網路範圍 (10.0.0.0) 加上兩個。
如果叢集虛擬私人雲端使用自訂 DNS 伺服器,則將此 DNS 伺服器設定為將所有 *.amazonaws.com 要求轉寄至 Amazon DNS 伺服器。如果這些請求未轉傳,則 Pod 會失敗並顯示類似於以下訊息的錯誤:
「Output: Failed to resolve "fs-4 fxxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct (輸出:無法解析 "fs-4 fxxxxxx.efs.us-west-2.amazonaws.com" – 請檢查您的檔案系統 ID 是否正確)」
使用限制性檔案系統政策時,請確認持續性磁碟區定義中有「iam」掛載選項
在某些情況下,EFS 檔案系統政策會設定為將掛載權限限制為特定 IAM 角色。在此情況下,EFS 掛載協助程式會要求在掛載作業期間通過 -o iam 掛載選項。納入 spec.mountOptions 屬性,藉此允許 CSI 驅動程式加入 iam 掛載選項 (來自 GitHub 網站)。
下列範例是永久性磁碟區規格:
apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv1 spec: mountOptions: - iam . . . . . .
如果您未使用限制性檔案系統原則新增** iam** 掛載選項,則 Pod 會失敗並顯示類似下列訊息的錯誤:
「mount.nfs4: access denied by server while mounting 127.0.0.1:/ (mount.nfs4︰掛載 127.0.0.1:/ 時伺服器拒絕存取)」
確認 Amazon EFS CSI 驅動程式控制器服務帳戶已使用正確的 IAM 角色註釋,且 IAM 角色具有必要的許可
若要確認 efs-csi-controller Pod 所使用的服務帳戶具有正確的註解,請執行下列命令:
kubectl describe sa efs-csi-controller-sa -n kube-system
確認下列註解存在:
eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS\_EFS\_CSI\_DriverRole
確認您已完成下列步驟:
- 您已為叢集建立 IAM OIDC 提供者。
- 與 efs-csi-csi-sa 服務帳戶相關聯的 IAM 角色具有執行 EFS API 呼叫的必要權限 (來自 GitHub 網站)。
- IAM 角色的信任政策信任服務帳戶 efs-csi-controller-sa。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": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } }\] }
確認 EFS CSI 驅動程式 Pod 是否正在執行
EFS CSI 驅動程式由作為部署執行的控制器 Pod,以及作為 DaemonSet 執行的節點 Pod 組成。執行以下命令,確認這些 Pod 是否在您的叢集中執行:
kubectl get all -l app.kubernetes.io/name=aws-efs-csi-driver -n kube-system
確認 Pod 無法掛載檔案系統的 EC2 工作節點的 EFS 掛載操作
登入到排程 Pod 的 Amazon EKS 工作節點。然後,使用 EFS 掛載協助程式,嘗試手動將 EFS 檔案系統掛載到工作節點。若要測試掛載作業,請執行下列命令:
sudo mount -t -efs -o tls file-system-dns-name efs-mount-point/
如果工作者節點可以掛載檔案系統,請檢閱 CSI 控制器和 CSI 節點 Pod 中的 efs-plugin 日誌。
檢查 EFS CSI 驅動程式 Pod 日誌
檢查 CSI 驅動程式 Pod 日誌,以確定掛載失敗的原因。如果磁碟區無法掛載,則請檢閱 efs-plugin 日誌。若要擷取 EFS 外掛程式容器日誌,請執行下列命令:
kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 7 個月前
- AWS 官方已更新 5 個月前