全部產品
Search
文件中心

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

更新時間:Sep 11, 2025

掛載和使用儲存卷時,如果遇到Pod狀態異常現象,可依次排查Pod和PVC的狀態和事件,以及CSI儲存群組件情況來確認異常原因,進而解決問題。本文介紹儲存相關異常問題的排查流程,以及常見的儲存問題。

流程

1.檢查Pod異常是否由儲存問題導致

通過Pod或PVC事件,確認Pod無法啟動是由儲存問題導致。

  1. 查看異常Pod的事件。

    kubectl describe pod <pod-name>
    • 若Events中存在相關事件表明是儲存問題(例如樣本的FailedSchedulingMessage中表明是由於Volume與節點不匹配導致調度失敗),請參考下文繼續排查。

      Events:
        Type     Reason            Age    From               Message
        ----     ------            ----   ----               -------
        Warning  FailedScheduling  4m37s  default-scheduler  0/1 nodes are available: 1 node(s) had volume node affinity conflict. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.,
    • 若Events中存在相關事件表明Volume已成功掛載(例如樣本的SuccessfulAttachVolume),此時Pod未啟動(例如CrashLoopBackOff)不屬於儲存問題,請根據Events排查其他問題,或者提交工單處理。

      Events:
        Type    Reason                  Age   From                     Message
        ----    ------                  ----  ----                     -------
        Normal  Scheduled               97s   default-scheduler        Successfully assigned default/disk-test-0 to cn-shanghai.192.168.5.2
        Normal  SuccessfulAttachVolume  97s   attachdetach-controller  AttachVolume.Attach succeeded for volume "d-uf6b8s2l5ypf48*****"
  2. 若Pod事件中未看到儲存相關事件,可查看所有事件。

    kubectl get events
    • 若Events中存在相關事件表明是儲存問題(例如樣本的FailedBinding表明PVC綁定PV失敗),請參考下文繼續排查。

      LAST SEEN   TYPE      REASON                 OBJECT                                                  MESSAGE
      2m56s       Normal    FailedBinding          persistentvolumeclaim/data-my-release-mariadb-0         no persistent volumes available for this claim and no storage class is set
      41s         Normal    ExternalProvisioning   persistentvolumeclaim/pvc-nas-dynamic-create-subpath8   waiting for a volume to be created, either by external provisioner "nasplugin.csi.alibabacloud.com" or manually created by system administrator
      3m31s       Normal    Provisioning           persistentvolumeclaim/pvc-nas-dynamic-create-subpath8   External provisioner is provisioning volume for claim "default/pvc-nas-dynamic-create-subpath8"
    • 若Events中沒有儲存相關事件,請根據Events排查其他問題,或者提交工單處理。

2.檢查儲存群組件是否正常

說明

如果您的叢集目前使用Flexvolume組件,由於Flexvolume已廢棄,請儘快遷移到CSI組件。具體操作,請參見遷移Flexvolume至CSI

  1. 檢查CSI儲存群組件是否正常工作。

    kubectl get pod -n kube-system |grep csi

    返回樣本如下。如果Pod狀態非Running,可執行kubectl describe pods <pod-name> -n kube-system查看具體Container退出的原因及Pod的Event。

    說明

    CSI儲存群組件包括csi-plugin和csi-provisioner,其中csi-provisioner預設安裝託管版。託管版組件由阿里雲負責營運,您在叢集中無法看到相關Pod。

    NAME                     READY   STATUS        RESTARTS   AGE
    csi-plugin-bpz28         4/4     Running       0          3d
    csi-plugin-h2tdg         4/4     Running       0          3d
    csi-plugin-qpnm4         4/4     Running       0          3d
    csi-plugin-wczgm         4/4     Running       0          3d
  2. 檢查CSI儲存群組件是否為最新版本。

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

    在返回資訊的image中可以確認鏡像版本,樣本如下:

    image: registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/csi-plugin:v1.33.1-67e8986-aliyun

    若儲存群組件不是最新版本,請升級csi-plugin和csi-provisioner。儲存群組件最新版本資訊,請參見csi-plugin

    說明

    您也可以在控制台的組件管理頁面,找到csi-plugin和csi-provisioner組件,確認版本資訊並升級組件。

  3. 檢查PV、PVC和StorageClass的YAML,確認驅動配置(driverprovisioner欄位)為使用CSI儲存群組件,與當前叢集使用的儲存群組件一致。

3.檢查PVC是否為Bound狀態

  1. 查看PVC狀態。

    kubectl get pvc
  2. 如果PVC為非Bound狀態,參考以下方式進行排查和處理。

    問題原因

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

    • 動態:由於csi-provisioner組件的某種原因導致。

    解決方案

4.檢查Pod是否為Running狀態

  1. 查看Pod狀態。

    kubectl get pod
  2. 如果PVC為Bound狀態,Pod為非Running狀態,請根據儲存卷類型,參考以下方式進行排查和處理。

    雲端硬碟儲存卷

    重要

    使用雲端硬碟儲存卷時,需確保待掛載雲端硬碟的Pod所調度到的ECS節點的規格支援掛載該類型雲端硬碟,並且Pod和雲端硬碟處於同一地區可用性區域。關於雲端硬碟類型和ECS執行個體規格的匹配關係,請參見執行個體規格類型系列

    問題原因

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

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

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

    解決方案

    • 通過將Pod調度到其他節點快速恢複。具體操作,請參見調度應用至指定節點

    • 通過kubectl describe pods <pod-name>查看Pod的Event。

    • 由於ECS節點和雲端硬碟類型不符導致的,請選擇合適類型的雲端硬碟。更多資訊,請參見執行個體規格類型系列

    • 其他ECS OpenAPI類型問題的處理方法,請參見ErrorCode

    NAS儲存卷

    重要
    • 節點與NAS必須在同一個VPC下。若不在同一VPC,請使用雲企業網打通。

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

    • 極速型NAS的掛載目錄需要以/share開頭。

    問題原因

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

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

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

    解決方案

    • 檢查是否設定fsGroups,如有,去掉後重啟Pod並重新掛載。

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

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

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

    OSS儲存卷

    重要
    • 節點掛載OSS時,PV中需填寫AccessKey資訊,可通過Secret方式使用 。

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

    問題原因

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

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

    解決方案

    • 檢查是否設定fsGroups,如有,去掉後重啟Pod並重新掛載。

    • 檢查是否跨地區且使用內網訪問Bucket,如是,請改用公網地址。

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

常見問題

建立或掛載儲存卷時,PVC提示no volume plugin matched

問題現象

建立或掛載儲存卷時,PVC提示Unable to attach or mount volumes: unmounted volumes=[xxx], unattached volumes=[xxx]: failed to get Plugin from volumeSpec for volume "xxx" err=no volume plugin matched

問題原因

儲存群組件與YAML模板不匹配,建立或掛載儲存卷時,無法找到相應的儲存群組件。

解決方案

檢查叢集中儲存群組件是否存在。

  • 未安裝儲存群組件,請在叢集中安裝儲存群組件。具體操作,請參見管理組件

  • 已安裝儲存群組件,請確定儲存群組件與PV和PVC的YAML模板是否匹配,且滿足如下條件。

    • CSI儲存群組件使用CSI相關文檔進行部署。更多資訊,請參見儲存CSI

    • Flexvolume儲存群組件使用Flexvolume相關文檔進行部署。更多資訊,請參見儲存Flexvolume

      重要

      由於Flexvolume已廢棄,建議儘快遷移到CSI組件。具體操作,請參見遷移Flexvolume至CSI

Pod的Event提示0/x nodes are available: x pod has unbound immediate PersistentVolumeClaims

問題現象

Pod啟動失敗,Pod Event提示如下:

0/x nodes are available: x pod has unbound immediate PersistentVolumeClaims. preemption: 0/x nodes are available: x Preemption is not helpful for scheduling

問題原因

由於自訂StorageClass未建立,導致Pod引用的自訂StorageClass未找到。

解決方案

需要檢查當前Pod引用的StorageClass是否存在,若不存在,需重新建立StorageClass。

PV為Released狀態,無法通過重建PVC綁定

問題現象

PVC誤刪除後,PV為Released狀態,無法通過重建PVC綁定。

問題原因

如果PVC的reclaimPolicyRetain,當PVC被誤刪除時,PV會變為Released狀態。

解決方案

您需要刪除當前PV中的pv.spec.claimRef欄位,然後重新使用靜態卷方式進行綁定。即可將PV變為Bound狀態。

PV為Lost狀態,無法通過重建PVC綁定

問題現象

PVC和PV建立後,PV處於Lost狀態,且無法與PVC綁定。

問題原因

PV中claimRef引用的PVC名稱不存在,導致PV狀態為Lost

解決方案

您需要刪除當前PV中的pv.spec.claimRef欄位,然後重新使用靜態卷方式進行綁定。即可將PV變為Bound狀態。

StorageClass變更是否會影響現有儲存

若PVC、PV的YAML檔案不發生改變,StorageClass的變更不會對現有儲存產生影響。例如,修改StorageClass的ALLOWVOLUMEEXPANSION欄位時,僅在修改PVC的Capacity後才會生效, 如果PVC的YAML檔案不變,此欄位不會影響現有配置。