如何對 Amazon EKS 中 EBS 磁碟區掛載問題進行疑難排解?

3 分的閱讀內容
0

我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集中安裝 Amazon Elastic Block Store (Amazon EBS) 磁碟區。但是,我收到「等待磁碟區連接或掛載 Pod 超時過期」錯誤。

解決方法

開始疑難排解之前,請確認您具有下列先決條件:

  • ebs-csi-控制器-sa 服務帳戶 IAM 角色所需的 AWS 身分與存取管理 (IAM) 許可。
    注意:若要疑難排解服務帳戶的問題,請參閱檢查 Amazon EBS CSI 驅動程式控制器服務帳戶的 IAM 角色和角色許可一節。
  • 與 Pod 位於相同命名空間中的有效 PersistentVolumeClaim (PVC) (來自 GitHub 網站)。
  • 使用樹狀佈建程式 Kubernetes.io/aws-ebs (來自 Kubernetes 網站) 的有效 EBS 儲存區類別定義。或者,使用 EBS 容器儲存介面 (CSI) 驅動程式佈建程式 ebs.csi.aws.com (來自 GitHub 網站) 的儲存區類別定義 。

確認 Amazon EBS CSI 驅動程式控制器和節點 Pod 是否正在執行

EBS CSI 驅動程式包含做為部署執行的控制器 Pod,以及做為常駐程式集執行的節點 Pob。若要檢查叢集是否執行這些 Pod,請執行下列命令:

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

**注意:**視窗工作節點和 AWS Fargate 不支援 EBS CSI 驅動程式。

請確定已安裝的 EBS CSI 驅動程式版本與叢集的 Kubernetes 版本相容 (來自 GitHub 網站)。

檢查 PVC 在綁定到 EBS 持續性磁碟區時是否遇到問題

若要檢視 PVC 是否遇到問題,請執行下列命令以檢視事件。在下列範例命令中,為您的環境將 PVC\ _NAMENAMESPACE 取代為正確的值:

kubectl describe pvc PVC_NAME -n NAMESPACE

如果您使用動態磁碟區佈建,請檢視傳回的事件,以判斷磁碟區佈建成功或失敗。您也可以看到 PVC 繫結到的對應持續性磁碟區名稱,如下列範例所示:

Name:          ebs-claim
Namespace:     default
StorageClass:  ebs-sc
Status:        Bound
Volume:        pvc-5cbd76de-6f15-41e4-9948-2bba2574e205
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
               volume.kubernetes.io/selected-node: ip-10-0-2-57.ec2.internal
. . . . .
. . . . .
Events:
  Type    Reason                 Age                    From                                                                                      Message
  ----    ------                 ----                   ----                                                                                      -------
. . . . .
  Normal  Provisioning           5m22s                  ebs.csi.aws.com_ebs-csi-controller-57d4cbb9cc-dr9cd_8f0373e8-4e58-4dd0-b83c-da6f9ad5d5ce  External provisioner is provisioning volume for claim "default/ebs-claim"
  Normal  ProvisioningSucceeded  5m18s                  ebs.csi.aws.com_ebs-csi-controller-57d4cbb9cc-dr9cd_8f0373e8-4e58-4dd0-b83c-da6f9ad5d5ce  Successfully provisioned volume pvc-5cbd76de-6f15-41e4-9948-2bba2574e205

如果佈建失敗,請在事件中找到錯誤訊息。

檢視亞馬遜 EBS CSI 控制器 Pod 的日誌

若要查看掛載失敗的原因,請檢查控制器 Pod 日誌。如果磁碟區在建立期間失敗,請參閱ebs-外掛程式csi-佈建程式日誌。若要擷取ebs-外掛程式容器日誌,請執行下列命令:

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

若要擷取csi-佈建程式容器日誌,請執行下列命令:

kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-provisioner

如果 EBS 磁碟區無法連接至 Pod,請檢視 csi- Attacher 日誌。若要擷取 csi-Attacher 容器日誌,請執行下列命令:

kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-attacher

檢查 Amazon EBS CSI 驅動程式控制器服務帳戶的 IAM 角色和角色的許可

**注意:**若要提高 EBS CSI 驅動程式的偵錯效率,請設定偵錯日誌選項 (來自 GitHub 網站)。

請確定 EBS CSI 驅動程式控制器服務帳戶已註解正確的 IAM 角色。此外,請確保 IAM 角色具有必要的許可。

下列問題導致 PVC 事件或 ebs-csi-控制器日誌中發生未經授權的錯誤:

1、 若要判斷 ebs-csi-控制器 Pod 的服務帳戶是否具有正確的註解,請執行下列命令:

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

2、 確認下列註解存在:

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

3、 確認您已為叢集建立 IAM OpenID 連線 (OIDC) 供應商。此外,請確認 IAM 角色具有執行 EBS API 呼叫的必要](https://docs.aws.amazon.com/eks/latest/userguide/csi-iam-role.html)許可[。請確定 IAM 角色的信任政策信任服務帳戶 ebs-csi-控制器-sa

3、確認 AWS CloudTrail 是否進行建立磁碟區附加磁碟區分離磁碟區呼叫。若要這麼做,請檢視 CloudTrail 日誌。此外,請檢視日誌以判斷哪個主體進行呼叫。這可協助您判斷控制器或工作者節點 IAM 角色是否使用服務帳戶 IAM 角色。

驗證持續性磁碟區的節點相似性

每個持續性磁碟區都有一個節點相似性,可將持續性磁碟區的連接限制在單一可用區域內的節點。這是因為只能將 EBS 磁碟區連接至在建立 EBS 磁碟區的相同可用區域中執行的 Pod 或節點。如果一個可用區域中節點的排程 Pod 使用不同可用區域中的 EBS 持續性磁碟區,則您會收到下列錯誤:

「FailedScheduling: 1 node(s) had volume node affinity conflict」

為了避免這種情況,請使用狀態集 (來自 Kubernetes 網站) 而不是部署。這會在與 Pod 相同的可用區域中,為狀態集的每個 Pod 建立唯一的 EBS 磁碟區。

若要驗證持續性磁碟區的節點相似性,請執行下列命令。將 PERSISTENT_VOLUME_NAME 取代為您的磁碟區名稱:

kubectl describe pv PERSISTENT_VOLUME_NAME

**注意:**您無法將 EBS 磁碟區掛接到在兩個不同工作節點上執行的兩個不同 Pod。您可以將 EBS 磁碟區附加至在一個節點上執行的 Pod,但無法同時將其連接至另一個節點。如果您嘗試將 EBS 磁碟區連接到不同背景工作節點上的兩個 Pod,則 Pod 會失敗,並且您會收到此錯誤:

「Warning FailedAttachVolume 2m38s attachdetach-controller Multi-Attach error for volume "pvc-1cccsdfdc8-fsdf6-43d6-a1a9-ea837hf7h57fa" Volume is already exclusively attached to one node and can't be attached to another」

確保您的 EBS 控制器 Pod 具有與 Amazon Elastic Compute Cloud (Amazon EC2) API 的連線能力

如果您在 ebs-csi-控制器日誌中看到連線逾時的錯誤,表示 EBS CSI 控制器可能未連線至 Amazon EC2 API。如果在建立 PVC 時,控制器 Pod 出現連線問題,則您會看到以下錯誤:

「Warning ProvisioningFailed persistentvolumeclaim/storage-volume-1 failed to provision volume with StorageClass "ebs-sc": rpc error: code = DeadlineExceeded desc = context deadline exceeded」

若要解決此錯誤,請檢查 EBS 控制器 Pod 的子網路是否連線 EC2 API。如果您使用 HTTP/HTTPS Proxy 執行私人叢集,請確認您的 EBS CSI 控制器 Pod 可以使用 HTTP/HTTPS Proxy。EBS CSI 驅動程式的 Helm 安裝支援設定 HTTP/HTTPS Proxy (來自 Kubernetes 網站)。

此訊息也可能與 OIDC 的問題有關。若要解決 OIDC 問題,請參閱如何針對 Amazon EKS 中的 OIDC 供應商和 IRSA 進行疑難排解?

AWS 官方
AWS 官方已更新 1 年前