全部產品
Search
文件中心

Container Service for Kubernetes:儲存異常問題排查

更新時間:Jun 19, 2024

本文介紹關於儲存相關異常問題診斷流程和排查思路。

診斷流程

流程

  1. 執行以下命令,查看Pod事件,確認Pod無法啟動是由儲存問題導致。

    kubectl describe pods <pod-name>

    若查看Pod處於下圖所示的狀態,說明Pod使用的儲存都已成功掛載到Pod上。此時Pod沒啟動(比如:CrashLoopBackOff)不屬於儲存問題,請提交工單處理。pod

  2. 執行以下命令,查看CSI儲存外掛程式是否正常工作。

    kubectl get pod -n kube-system |grep csi

    預期輸出:

    NAME                       READY   STATUS             RESTARTS   AGE
    csi-plugin-***             4/4     Running            0          23d
    csi-provisioner-***        7/7     Running            0          14d
    說明

    如果出現非Running狀態的Pod,使用kubectl describe pods <pod-name> -n kube-system查看具體Container退出的原因及Pod的Event。

  3. 執行以下命令,查詢CSI儲存外掛程式是否為最新版本。

    kubectl get ds csi-plugin -n kube-system -oyaml |grep image

    預期輸出:

    image: registry.cn-****.aliyuncs.com/acs/csi-plugin:v*****-aliyun

    儲存外掛程式最新版本資訊,請參見csi-plugincsi-provisioner,若您叢集中儲存外掛程式不是最新版本,請升級CSI外掛程式。具體操作,請參見管理組件。其他儲存群組件升級失敗問題排查,請參見組件升級失敗問題排查

  4. 排查Pod Pending問題。

  5. 排查PVC處於非Bound問題。

  6. 如果排查後問題仍未解決,請提交工單處理。

組件升級失敗問題排查

若組件升級失敗,請參考以下操作,進行csi-provisioner和csi-plugin組件升級失敗問題排查。

csi-provisioner

  • 該組件預設是2個副本的Deployment,這兩個副本互斥,無法部署在同一個節點上。出現升級失敗,需要先確認叢集中是否只存在一個可用節點。

  • 該組件的歷史版本(1.14及之前版本)是StatefulSet,如果叢集中存在StatefulSet類型的csi-provisioner,您可以通過執行kubectl delete sts csi-provisioner先刪除sts csi-provisioner,然後登入Container Service管理主控台重新安裝csi-provisioner組件,具體操作,請參見管理組件

csi-plugin

  • 檢查叢集是否存在NotReady的節點,如果存在NotReady的節點, csi-plugin對應的DaemonSet會升級失敗。

  • 若發現組件升級失敗,但所有的Plugin均正常,這是因為組件中心一旦檢查組件升級逾時,就會自動復原。遇到此問題,請提交工單處理。

雲端硬碟異常問題排查

說明
  • 節點掛載雲端硬碟時,節點與雲端硬碟必須是同一地區和同一可用性區域的,不支援跨地區和跨可用性區域使用。

  • 不同規格的ECS支援掛載的雲端硬碟類型也不相同。更多資訊,請參見執行個體規格類型系列

Pod的狀態為非Running

問題現象:

PVC為Bound狀態,Pod為非Running狀態。

問題原因:

  • 沒有滿足條件的節點可以調度。

  • 雲端硬碟掛載出現問題。

  • ECS節點和雲端硬碟類型不符。

解決方案:

PVC的狀態為非Bound

問題現象:

PVC為非Bound狀態,Pod為非Running狀態。

問題原因:

  • 靜態方式:由於PVC和PV之間的Selector無法滿足互相綁定的條件導致。例如:PVC中Selector配置與PV中的不一致,StorageClass Name不一致、PV狀態是Release等問題。

  • 動態方式:由於csi-provisioner組件的某種原因未能建立出對應的雲端硬碟。

解決方案:

NAS異常問題排查

說明
  • 節點掛載NAS時,節點與NAS必須在同一個VPC網路下。若不在同一VPC,請使用雲企業網打通。

  • NAS支援跨可用性區域掛載。

  • 極速型NAS以及CPFS2.0掛載目錄需要以/share開頭。

Pod的狀態為非Running

問題現象:

PVC為Bound狀態,Pod為非Running狀態。

問題原因:

  • 掛載NAS時使用了fsGroups,檔案較多,導致chmod速度較慢。

  • 安全性群組中限制了2049連接埠,導致NAS無法掛載。

  • NAS和節點不在同一個VPC下。

解決方案:

  • 確認是否有fsGroups設定,如有,將其去掉後重啟Pod,嘗試重新掛載。

  • 確認Pod調度的節點是否限制了2049連接埠,如果該連接埠被限制,將2049連接埠放開後,重新掛載。具體操作,請參見添加安全性群組規則

  • 確認NAS和節點在同一VPC下,若不在同一VPC,請使用雲企業網打通。

  • 其他問題,通過命令kubectl describe pods <pod-name>查看Pod的Event。

PVC的狀態為非Bound

問題現象:

PVC為Bound狀態,Pod為非Running狀態。

問題原因:

  • 靜態方式:由於PVC和PV之間的Selector無法滿足互相綁定的條件導致。例如:PVC中Selector配置與PV中的不一致,StorageClass Name不一致、PV狀態是Release等問題。

  • 動態方式:由於csi-provisioner組件的某種原因未能掛載NAS。

解決方案:

  • 靜態方式:請檢查相關的YAML書寫是否正確。更多資訊,請參見使用NAS靜態儲存卷

    說明

    若PV的狀態是Release,則該PV無法被複用,需要將PV中的Service取出,重新建立PV。

  • 動態方式:通過命令kubectl describe pvc <pvc-name> -n <namespace>查看PVC的Event。

OSS異常問題排查

說明
  • 節點掛載OSS時,PV中需要填寫相應的AK/SK資訊,可通過Secret方式使用AK/SK。

  • 跨地區使用OSS,需要將Bucket URL改成公網地址,同一地區建議使用內網地址。

Pod的狀態為非Running

問題現象:

PVC為Bound狀態,Pod狀態為非Running。

問題原因:

  • 掛載NAS時使用了fsGroups,檔案較多,導致chmod速度較慢。

  • 跨地區使用了內網地址,導致無法串連到Bucket Endpoint。

解決方案:

  • 確認是否有fsGroups設定,如果有,將其去掉後,重啟Pod,嘗試重新掛載。

  • 確認是否為跨地區且通過內網訪問Bucket,如果是,請使用公網地址訪問Bucket。

  • 其他問題,通過命令kubectl describe pods <pod-name>查看Pod的Event。

PVC的狀態為非Bound

問題現象:

PVC為非Bound狀態,Pod為非Running狀態。

  • 靜態方式:由於PVC和PV之間的Selector無法滿足互相綁定的條件導致。例如:PVC中Selector配置與PV中的不一致,StorageClass Name不一致、PV狀態是Release等問題。

  • 動態方式:由於csi-provisioner組件的某種原因未能掛載OSS。

解決方案:

  • 靜態方式:請檢查相關的YAML書寫是否正確。更多資訊,請參見通過kubectl命令列方式使用OSS靜態儲存卷

    說明

    若PV的狀態是Release,則該PV無法被複用,需要將PV中的Bucket地址取出重新建立PV。

  • 動態方式:通過命令kubectl describe pvc <pvc-name> -n <namespace>查看PVC的Event。