全部產品
Search
文件中心

Container Service for Kubernetes:雲端硬碟儲存卷FAQ

更新時間:Aug 30, 2025

本文介紹使用雲端硬碟儲存卷的常見問題和解決方案。

問題導航

類型

問題

建立

掛載

使用

擴容

卸載

其他

雲端硬碟建立

動態建立PV失敗且提示InvalidDataDiskCatagory.NotSupported

問題現象

建立PV失敗,PVC Event提示InvalidDataDiskCategory.NotSupported

問題原因

當前可用性區域不支援建立StorageClass中指定類型的雲端硬碟,或者當前可用性區域內指定類型的雲端硬碟庫存不足。

解決方案

動態建立PV失敗且提示The specified AZone inventory is insufficient

問題現象

建立PV失敗,PVC Event提示The specified AZone inventory is insufficient

問題原因

指定的可用性區域內雲端硬碟庫存不足,導致建立雲端硬碟失敗。

解決方案

動態建立PV失敗且提示disk size is not supported

問題現象

動態建立PV失敗,PVC Event提示disk size is not supported

問題原因

在PVC中指定的雲端硬碟容量大小不符合要求,不同類型雲端硬碟有最小容量的限制。關於雲端硬碟的容量要求,請參見雲端硬碟類型

解決方案

調整PVC中聲明的容量大小,使其滿足要求。

動態建立PV失敗且提示waiting for first consumer to be created before binding

問題現象

使用WaitForFirstConsumer的StorageClass建立PV失敗,PVC Event提示persistentvolume-controller waiting for first consumer to be created before binding

問題原因

PVC未檢測到Pod所調度到的節點。

  • 應用的YAML中顯示指定了nodeName,此類Pod不會經過調度器邏輯,導致PVC無法感知。因此通過指定nodeName調度的Pod,無法使用WaitForFirstConsumer的StorageClass。

  • 不存在引用當前PVC的Pod。

解決方案

  • 刪除應用YAML中的nodeName相關欄位,使用其他調度方式。

  • 建立使用當前PVC的Pod。

動態建立PV失敗且提示no topology key found on CSINode node-XXXX

問題現象

建立PV失敗,PVC Event提示no topology key found on CSINode node-XXXX

問題原因

  • 原因1:node-XXXX對應節點的csi-plugin啟動失敗。

  • 原因2:掛載使用了系統不支援的Driver,系統預設支援Disk、NAS、OSS。

解決方案

  1. 查看Pod狀態是否正常。

    kubectl get pods -n kube-system -o wide | grep node-XXXX
    • 狀態異常:通過命令kubectl logs csi-plugin-xxxx -nkube-system -c csi-plugin查看異常日誌。多數情況是因為節點連接埠被佔用,您可參考以下步驟處理。

      • 關閉佔用連接埠的進程。

      • 在csi-plugin上增加SERVICE_PORT的環境變數,指定新的連接埠。

        kubectl set env -n kube-system daemonset/csi-plugin --containers="csi-plugin" SERVICE_PORT="XXX"
    • 狀態正常:跳轉下一步。

  2. 掛載使用系統預設的Driver,即Disk、NAS、OSS等。詳情請參見儲存目錄下的操作文檔。

動態建立PV失敗且提示selfLink was empty, can't make reference

問題現象

建立PV失敗,PVC Event提示selfLink was empty, can't make reference

問題原因

  1. 叢集版本和CSI組件版本不匹配。

  2. 叢集使用Flexvolume儲存外掛程式。

解決方案

  1. 升級CSI組件版本。一般組件版本需要和叢集版本保持一致。例如,Kubernetes版本為1.20的叢集需要匹配安裝的CSI版本為1.20及以上版本。

  2. 如您的叢集使用Flexvolume儲存外掛程式,請遷移Flexvolume至CSI

PVC的容量申請低於20 GiB時,動態建立PV失敗

根據云盤類型的差異,各類型雲端硬碟支援的容量範圍不同。如果使用ACK提供的預設StorageClass(如alicloud-disk-topology-alltype、alicloud-disk-essd等),預設情況下,自動建立的雲端硬碟(如ESSD PL1雲端硬碟)的容量限制為最低20 GiB。如果您的儲存需求低於20 GiB,建議手動建立StorageClass並指定雲端硬碟類型,確保動態建立的雲端硬碟為支援低於20 GiB容量的雲端硬碟(如ESSD AutoPL雲端硬碟、ESSD PL0雲端硬碟等)。

雲端硬碟掛載

啟動掛載了雲端硬碟的Pod時提示had volume node affinity conflict

問題現象

啟動掛載了雲端硬碟的Pod,Pod無法啟動,Pod Event提示had volume node affinity conflict

問題原因

所有的PV中都存在nodeaffinity屬性,當PV中nodeaffinity屬性和Pod的nodeaffinity屬性不一致時會出現上述報錯,調度器因屬性衝突無法調度。

解決方案

修改PV或者Pod的nodeaffinity屬性,使二者的nodeaffinity屬性保持一致。

啟動掛載了雲端硬碟的Pod時提示can't find disk

問題現象

啟動掛載了雲端硬碟的Pod,Pod無法啟動,Pod Event提示can't find disk

問題原因

  • 配置PV時,輸入了錯誤的雲端硬碟ID,或者其他Region的雲端硬碟ID。

  • 您的帳號無許可權操作該雲端硬碟,可能不是當前帳號的雲端硬碟。

解決方案

  • 如果是靜態掛載的雲端硬碟,請檢查使用的雲端硬碟是否滿足要求。

    • 雲端硬碟所在的Region與叢集所在的Region一致。

    • 雲端硬碟ID資訊複製無誤。

    • 雲端硬碟與當前叢集處於同一個帳號下。

  • 如果是動態掛載的雲端硬碟,請檢查CSI組件的許可權。

    確認當前叢集是否存在Addon Token。

    • 如果存在,檢查叢集中的CSI組件版本,將其直接升級到最新版後再重試。

    • 如果不存在,預設使用的是節點的Worker Role使用者自訂的AccessKey,需要檢查對應的Policy許可權。

啟動掛載了雲端硬碟的Pod時提示Previous attach action is still in process

問題現象

啟動掛載了雲端硬碟的Pod時提示Previous attach action is still in process,數秒後Pod啟動成功。

問題原因

當前ECS不支援多塊雲端硬碟同時掛載到一台虛擬機器上。因此,當有多個掛載了雲端硬碟的Pod被調度到同一台宿主機時,雲端硬碟掛載會串列操作。出現如上提示資訊,說明此刻當前節點正在被其他雲端硬碟掛載。

解決方案

無需處理,會自動重試,直至成功。

啟動掛載了雲端硬碟的Pod時提示InvalidInstanceType.NotSupportDiskCategory

問題現象

啟動掛載了雲端硬碟的Pod時提示InvalidInstanceType.NotSupportDiskCategory

問題原因

雲端硬碟類型與ECS執行個體規格不匹配,即Pod調度到的ECS節點不支援該類型的雲端硬碟,因此掛載失敗。

解決方案

您可以嘗試以下方法解決問題:

  • 查看ECS節點的執行個體規格,確儲存在支援該類型雲端硬碟的ECS節點,同時確保已配置調度將Pod調度到該節點。

  • 如果當前ECS節點的執行個體規格均不支援該類型的雲端硬碟,請使用其他類型的雲端硬碟。

說明

關於雲端硬碟類型和ECS執行個體規格的匹配關係,請參見執行個體規格類型系列

啟動掛載了雲端硬碟的Pod時提示diskplugin.csi.alibabacloud.com not found in the list of registered CSI drivers

問題現象

啟動Pod的時候,出現以下警告。

Warning  FailedMount       98s (x9 over 3m45s)  kubelet, cn-zhangjiakou.172.20.XX.XX  MountVolume.MountDevice failed for volume "d-xxxxxxx" : kubernetes.io/csi: attacher.MountDevice failed to create newCsiDriverClient: driver name diskplugin.csi.alibabacloud.com not found in the list of registered CSI drivers

問題原因

  • 一般出現在新增的節點。由於CSI的Pod是和業務Pod一起啟動,且CSI註冊需要一定時間,所以業務Pod開始掛載的時候,CSI還沒有註冊完成,導致出現警告。

  • 當前節點的CSI組件註冊失敗,可能是因為某些原因導致CSI組件沒有正常啟動。

解決方案

  • 如果是新增節點的警示,無需處理,等待系統重試即可。

  • 如果CSI組件註冊失敗,請檢查CSI組件狀態和CSI組件日誌。如果CSI組件正常,請加入DingTalk使用者群(DingTalk群號:35532895)處理。

啟動掛載了雲端硬碟的Pod時提示Multi-Attach error for volume

問題現象

啟動了掛載雲端硬碟的Pod,Pod Event提示warning failedAttachVolume xxx xxx Multi-Attach error for volume "xxx",通過kubectl describe pvc <pvc-name>觀察到有多個Pod引用同一個PVC。

問題原因

  • 原因1:未開啟多重掛載的雲端硬碟只能同時被一個Pod掛載,不能同時被多個Pod掛載使用。

  • 原因2:之前使用PVC的Pod已經刪除,但是PVC對應的雲端硬碟未能正常卸載。

    通過ECS管理主控台查看該PVC對應雲端硬碟當前被掛載的節點,並查看該節點上csi-plugin的Pod日誌,存在Path is mounted, no remove: /var/lib/kubelet/plugins/kubernetes.io/csi/diskplugin.csi.alibabacloud.com/xxx/globalmount資訊。同時,通過以下命令,確認csi-plugin是否直接掛載了/var/runHostPath:

    kubectl get ds -n kube-system csi-plugin -ojsonpath='{.spec.template.spec.volumes[?(@.hostPath.path=="/var/run/")]}'

    若輸出不為空白,則存在直接掛載,並確認存在該問題。

解決方案

  • 原因1解決方案

    確保多Pod不能引用同一個PVC,解決Pod引用PVC的問題。

  • 原因2解決方案:

    請通過以下命令手動修複csi-plugin的YAML檔案,修複之後問題即可解決。

    kubectl patch -n kube-system daemonset csi-plugin -p '
    spec:
      template:
        spec:
          containers:
            - name: csi-plugin
              volumeMounts:
                - mountPath: /host/var/run/efc
                  name: efc-metrics-dir
                - mountPath: /host/var/run/ossfs
                  name: ossfs-metrics-dir
                - mountPath: /host/var/run/
                  $patch: delete
          volumes:
            - name: ossfs-metrics-dir
              hostPath:
                path: /var/run/ossfs
                type: DirectoryOrCreate
            - name: efc-metrics-dir
              hostPath:
                path: /var/run/efc
                type: DirectoryOrCreate
            - name: fuse-metrics-dir
              $patch: delete'

啟動掛載了雲端硬碟的Pod時提示Unable to attach or mount volumes: unmounted volumes=[xxx], unattached volumes=[xxx]: timed out waiting for the condition

問題現象

啟動了掛載儲存的Pod,Pod Event提示Unable to attach or mount volumes: unmounted volumes=[xxx], unattached volumes=[xxx]: timed out waiting for the condition

問題原因

該Event是kubelet報出的錯誤資訊,kubelet會迴圈檢查所有節點的Pod所使用的儲存卷是否Ready,如果儲存卷沒有Ready,會出現上述報錯資訊。

該Event報錯並沒有實際意義,僅說明在目前時間點掛載還未完成,可能原因如下。

  • 原因1:掛載報錯,由於報錯時間過長,有效Event已到期被覆蓋,殘留的只有上面Kubelet報錯的Event。

  • 原因2:Kubelet擷取configmap/serviceaccount defaulttoken逾時導致報錯,屬於節點網路問題,只能更換節點重試。

  • 原因3:在Pod模板中配置了securityContext.fsGroup參數時,雲端硬碟儲存卷掛載時將自動調整卷內檔案的所有者。根據檔案數量,這可能導致較長的準備時間。

  • 原因4:如為靜態掛載的儲存卷,需確認儲存卷中的driver欄位是否正確,例如是否存在拼字問題。如果該欄位錯誤,可能導致kubelet無法找到並調用正確的driver,從而阻塞儲存卷Ready。

解決方案

  • 原因1解決方案:刪除Pod,使其重啟。找到真正報錯的Event,根據真正報錯的Event定位具體問題。

  • 原因2解決方案:將Pod重新調度到其他節點。具體操作,請參見調度應用至指定節點

  • 原因3解決方案:對於1.20及以上版本的Kubernetes叢集,可將fsGroupChangePolicy配置為OnRootMismatch,這樣只有在初次開機時才會自動調整檔案的所有者。後續Pod升級重建等情境下,掛載儲存卷的時間將恢複正常。關於fsGroupChangePolicy參數的更多資訊,請參見為Pod或容器配置資訊安全內容。若仍不能滿足需求,建議利用initContainer自行實現調整許可權相關操作。

  • 原因4解決方案:檢查並填寫正確的driver name,例如:

    • diskplugin.csi.alibabacloud.com

    • nasplugin.csi.alibabacloud.com

    • ossplugin.csi.alibabacloud.com

啟動掛載了雲端硬碟的Pod時提示validate error Device /dev/nvme1n1 has error format more than one digit locations

問題現象

啟動掛載了雲端硬碟的Pod,Pod無法啟動,Pod Event提示validate error Device /dev/nvme1n1 has error format more than one digit locations

問題原因

節點使用了g7se、r7se、c7se或任意八代ECS規格,且叢集版本和CSI組件版本過低,不支援NVMe類型的節點進行雲端硬碟掛載。

解決方案

請確保您的ACK叢集版本不低於1.20,並將CSI組件版本升級至v1.22.9-30eb0ee5-aliyun及以上。升級組件具體操作,請參見管理組件

說明

Flexvolume類型組件不支援。請加入DingTalk使用者群(DingTalk群號:35532895)諮詢,將Flexvolume組件遷移至CSI組件。

啟動掛載了雲端硬碟的Pod時提示ecs task is conflicted

問題現象

啟動掛載了雲端硬碟的Pod,啟動失敗,Pod Event提示ecs task is conflicted

問題原因

部分ECS任務需要串列,當有多個請求同時發送到ECS時,會出現ECS任務衝突報錯。

解決方案

以下方案選擇一種:

  • 等待一段時間,CSI會自動重試。若您其他任務已經完成,CSI重試時會成功掛載雲端硬碟。

  • 參見使用雲端硬碟並行掛載處理。

啟動掛載了雲端硬碟的Pod時提示wrong fs type, bad option, bad superblock on /dev/xxxxx missing codepage or helper program, or other error

問題現象

啟動掛載了雲端硬碟的Pod,出現Pod無法啟動,Pod Event提示如下。

wrong fs type, bad option, bad superblock on /dev/xxxxx  missing codepage or helper program, or other error

問題原因

雲端硬碟的檔案系統損壞,導致雲端硬碟無法掛載。

解決方案

一般由於業務不正常的拔盤導致,請參考以下步驟處理。

  1. 檢查應用使用雲端硬碟時是否滿足以下要求。

    • 不存在多個Pod掛載同一塊雲端硬碟。

    • 在拔盤過程中請勿寫入資料。

  2. 登入Pod所在的宿主機,通過命令fsck -y /dev/xxxxx修複雲端硬碟上的檔案系統。

    其中/dev/xxxxx為Pod Event對應的報錯提示。修複雲端硬碟檔案系統時,會修改檔案系統的中繼資料。如果無法修複或者修複失敗,表明雲端硬碟上的檔案系統已損壞,無法繼續使用。

啟動掛載了雲端硬碟的Pod時提示exceed max volume count

問題現象

啟動掛載了雲端硬碟的Pod,Pod長期處於Pending狀態,無法完成調度。但根據ECS規格,節點上還可以掛載更多的雲端硬碟。Pod Event提示如下。

0/1 nodes are available: 1 node(s) exceed max volume count.

問題原因

Pod調度受到MAX_VOLUMES_PERNODE環境變數指定數量的限制。

解決方案

  • v1.26.4-e3de357-aliyun及以上版本的csi-plugin組件支援自動設定雲端硬碟掛載數量。您可以執行以下命令,手動刪除kube-system命名空間下csi-plugin daemonset中的MAX_VOLUMES_PERNODE環境變數,以自動根據ECS規格配置雲端硬碟掛載數量。

    kubectl patch -n kube-system daemonset csi-plugin -p '
    spec:
      template:
        spec:
          containers:
          - name: csi-plugin
            env:
            - name: MAX_VOLUMES_PERNODE
              $patch: delete'
  • v1.26.4-e3de357-aliyun以下版本的csi-plugin組件僅支援通過環境變數配置雲端硬碟掛載數量,請根據整個叢集中可掛載資料盤數量最少的節點,手動調整該環境變數。

重要
  • 自動設定數量限制僅發生在csi-plugin Pod啟動時。若您手動在節點上添加或移除了資料盤,請重建該節點上的csi-plugin Pod,以重新觸發自動設定。

  • 自動設定功能暫不支援雲端硬碟靜態儲存卷。若存在該類型的儲存卷,可調度的Pod數量會偏小。

啟動掛載了雲端硬碟的Pod時提示The amount of the disk on instance in question reach its limits

問題現象

啟動掛載了雲端硬碟的Pod,Pod長期處於ContainerCreating狀態,Pod Event提示如下。

MountVolume.MountDevice failed for volume "d-xxxx" : rpc error: code = Aborted desc = NodeStageVolume: Attach volume: d-xxxx with error: rpc error: code = Internal desc = SDK.ServerError
ErrorCode: InstanceDiskLimitExceeded
Message: The amount of the disk on instance in question reach its limits

問題原因

MAX_VOLUMES_PERNODE環境變數設定過大。

解決方案

  • v1.26.4-e3de357-aliyun及以上版本的csi-plugin組件支援自動設定雲端硬碟掛載數量。您可以執行以下命令,手動刪除kube-system命名空間下csi-plugin daemonset中的MAX_VOLUMES_PERNODE環境變數,以自動根據ECS規格配置雲端硬碟掛載數量。

    kubectl patch -n kube-system daemonset csi-plugin -p '
    spec:
      template:
        spec:
          containers:
          - name: csi-plugin
            env:
            - name: MAX_VOLUMES_PERNODE
              $patch: delete'
  • v1.26.4-e3de357-aliyun以下版本的csi-plugin組件僅支援通過環境變數配置雲端硬碟掛載數量,請根據整個叢集中可掛載資料盤數量最少的節點,手動調整該環境變數。

重要
  • 自動設定數量限制僅發生在csi-plugin Pod啟動時。若您手動在節點上添加或移除了資料盤,請重建該節點上的csi-plugin Pod,以重新觸發自動設定。

  • 自動設定功能暫不支援雲端硬碟靜態儲存卷。若存在該類型的儲存卷,可調度的Pod數量會偏小。

如何更改預設建立的雲端硬碟類StorageClass的配置

預設建立的StorageClass不支援更改。

安裝csi-provisioner組件後,叢集內會預設建立alicloud-disk-topology-alltype等StorageClass,請勿修改這些預設產生的儲存類。如果您需要調整StorageClass的配置,例如儲存卷類型、回收策略等,您可以建立新的StorageClass(StorageClass數量不受限制)。具體操作,請參見建立StorageClass

多個容器應用是否可以使用同一個雲端硬碟儲存卷

雲端硬碟為非共用儲存,未開啟多重掛載的雲端硬碟只能同時被一個Pod掛載。更多關於多重掛載的資訊,請參見使用NVMe雲端硬碟多重掛載及Reservation

雲端硬碟使用

應用在讀寫雲端硬碟掛載目錄時提示input/output error

問題現象

雲端硬碟掛載正常,應用順利啟動,但是短時間後,應用突然報錯提示input/output error

問題原因

當前應用使用的雲端硬碟缺失。

解決方案

檢查當前使用雲端硬碟的狀態,根據狀態進行處理。

  1. 根據云盤掛載目錄,通過Pod的VolumeMount定義找到對應的PVC。

  2. 通過kubectl get pvc <pvc-name> 查看PVC狀態,記錄對應的PV。

  3. 根據PV Name查看PV的YAML, 在pv.VolumeHandle欄位中擷取雲端硬碟ID。

  4. ECS管理主控台Block Storage頁面,根據云盤ID,查看當前使用雲端硬碟的狀態。

    • 若雲端硬碟處於待掛載狀態,表明雲端硬碟被卸載,請重啟Pod,重新掛載雲端硬碟。

      說明

      當前Pod處於Running狀態,表明雲端硬碟曾經被成功掛載過,之後被卸載。由此推測是多個Pod引用了同一個雲端硬碟導致的問題,可通過kubectl describe pvc <pvc-name>查看輸出中的UsedBy,確認是否有多個Pod引用當前PVC。

    • 若找不到雲端硬碟,表明雲端硬碟已經被釋放,則無法恢複。

      重要

      掛載ESSD類型雲端硬碟時,建議使用ESSD雲端硬碟自動極速快照功能保護雲端硬碟儲存資料卷的安全。更多資訊,請參見雲端硬碟非預期刪除導致的資料丟失

使用雲端硬碟儲存卷時,如何設定雲端硬碟掛載目錄的使用者存取權限

雲端硬碟本身不支援設定使用者存取權限。如果需要設定掛載目錄的使用者存取權限,請在建立應用時為Pod配置securityContext來修改許可權。更多資訊,請參見為Pod配置卷存取權限和屬主變更策略

說明

配置了securityContext.fsgroup後,掛載雲端硬碟時會自動調整卷內檔案的所有者,根據檔案數量,這可能導致較長的準備時間。對於1.20及以上版本的Kubernetes叢集,您可以將fsGroupChangePolicy配置為OnRootMismatch,實現僅在初次開機容器時才會調整檔案的所有者,後續Pod升級或重建等情境下,掛載時間長度會恢複正常。若仍不能滿足需求,建議利用initContainer自行實現調整許可權相關操作。

雲端硬碟擴容

雲端硬碟儲存卷是否會自動擴容

預設情況下,當雲端硬碟儲存卷的容量耗盡時,並不會自動擴容,您需要手動更新PVC的儲存容量聲明實現擴容雲端硬碟儲存卷。具體操作,請參見線上擴容雲端硬碟儲存卷

如果您有自動擴容的需求,可通過CRD的方式定義雲端硬碟自動擴容策略,在儲存卷的使用率高於某個閾值時,實現自動擴容。具體操作,請參見配置自動擴容

說明

如果叢集版本低於1.16,或者不滿足線上擴容雲端硬碟儲存卷的要求(如雲端硬碟類型是普通雲端硬碟),您可以在ECS側直接擴容雲端硬碟本身,即手動擴容雲端硬碟容量和檔案系統。在ECS側擴容雲端硬碟後,叢集內資源不受影響(即在叢集側查看PVC和PV的容量,仍是擴容前的大小)。

擴容雲端硬碟失敗,提示Waiting for user to (re-)start a pod to finish file system resize of volume on node

問題現象

更新PVC的儲存容量聲明後,PVC的Status的StorageCapacity無變化,且PVC Event報出以下資訊:

 Waiting for user to (re-)start a pod to finish file system resize of volume on node.

問題原因

擴容雲端硬碟分兩部分:一個是調用ResizeDisk介面擴容雲端硬碟容量;另一個是進行檔案系統擴容。出現以上錯誤提示說明底層塊裝置已經擴容成功,但檔案系統擴容失敗,說明節點側存在問題。

解決方案

判斷當前節點的類型。

  • 如果當前節點為ECI節點,請執行kubectl get configmap -n kube-system eci-profile -o jsonpath="{.data.enablePVCController}",確認該配置已設定為true,詳見eci-profile配置項說明

    若仍然無法解決,請提交工單處理。

  • 如果當前節點為ECS節點,請執行kubectl get pods -n kube-system -l app=csi-plugin --field-selector=spec.nodeName=<node-name>命令,擷取當前節點的csi-plugin狀態。

    • 若csi-plugin狀態正常,請加入DingTalk使用者群(DingTalk群號:35532895)諮詢。

    • 若csi-plugin狀態異常,需重啟csi-plugin的Pod,然後重試。若問題仍未解決,請加入DingTalk使用者群(DingTalk群號:35532895)處理。

擴容雲端硬碟失敗,提示only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize

問題現象

更新PVC的儲存容量聲明後,發現如下報錯資訊:

only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize 

問題原因

  • 原因1:當前雲端硬碟儲存卷的PVC和PV是通過靜態方式手動建立的。PVC中的storageClassName的配置為空白,或者叢集中沒有同名的StorageClass。

  • 原因2:PVC引用的StorageClass中,allowVolumeExpansion的配置為false,不支援擴容。

解決方案

  • 原因1解決方案:查看PVC的storageClassName配置,確保叢集存在同名的StorageClass。如果沒有,請根據已有雲端硬碟儲存卷的屬性建立對應的StorageClass並配置allowVolumeExpansion: true

  • 原因2解決方案:StorageClass不支援修改屬性,請建立一個StorageClass,將allowVolumeExpansion配置為true,然後修改PVC引用新的StorageClass,再擴容PVC。

雲端硬碟卸載

刪除掛載了雲端硬碟的Pod時提示The specified disk is not a portable disk

問題現象

卸載雲端硬碟時,提示The specified disk is not a portable disk

問題原因

雲端硬碟的計費方式為訂用帳戶。您申請了訂用帳戶的雲端硬碟,或者在升級ECS時,將ECS關聯的雲端硬碟一起升級為訂用帳戶。

解決方案

將雲端硬碟的計費方式改為隨用隨付。

刪除掛載了雲端硬碟的Pod時提示無法卸載雲端硬碟,kubelet日誌中發現Orphaned pod(不受ACK管理的Pod)

問題現象

Pod卸載失敗,並且Kubelet出現不受ACK管理的Pod日誌。

問題原因

Pod異常退出,導致資料卷掛載點在卸載過程中沒有清理乾淨,最終導致Pod無法刪除。在Kubernetes v1.22之前,kubelet的GC流程對資料卷記憶體回收實現並不完善,需要手動或通過指令碼自動化實現垃圾掛載點的清理工作。

解決方案

在問題節點運行以下指令碼,對垃圾掛載點進行清理。

wget https://raw.githubusercontent.com/AliyunContainerService/kubernetes-issues-solution/master/kubelet/kubelet.sh
sh kubelet.sh

刪除掛載了雲端硬碟的Pod後,Pod無法重新啟動,提示掛載失敗且無法自動回復

問題現象

Pod在刪除之後無法拉起,報出以下異常提示,且無法自動回復。

Warning FailedMount 9m53s (x23 over 40m) kubelet MountVolume.SetUp failed for volume “xxxxx” : rpc error: code = Internal desc = stat /var/lib/kubelet/plugins/kubernetes.io/csi/pv/xxxxx/globalmount: no such file or directory

影響範圍

  • ACK叢集版本為1.20.4-aliyun-1。

  • 應用的儲存介質為雲端硬碟。

  • 使用StatefulSet並且設定了podManagementPolicy: "Parallel"屬性。

問題原因

請參見Pod fails to start after restarting rapidly

解決方案

  • 為叢集新增節點後移除舊節點,將舊節點全部替換為新節點,有故障的Pod將自動回復。具體操作,請參見建立和管理節點池移除節點

  • 調整StatefulSet為orderedready或去除podManagementPolicy: "Parallel" 屬性。

  • 如果當前叢集節點數較少,可以採用以下方案。

    1. 將當前Pod所在的節點添加cordon標籤,設定為不可調度狀態。

    2. 刪除Pod,等待Pod狀態變為Pending。

    3. 去除節點上的cordon標籤,等待Pod重啟。

  • 如果當前叢集節點數較多,則將Pod調度到其他節點後可正常啟動。

刪除掛載了雲端硬碟的Pod時提示target is busy

問題現象

在刪除Pod時,Pod Event或者kubelet日誌(/var/log/messages)報出以下錯誤提示。

unmount failed, output <mount-path> target is busy

問題原因

Pod刪除失敗,說明有進程正在使用該裝置。需要登入到Pod所在宿主機上尋找正在使用該裝置的進程。

解決方案

  1. 找到對應掛載路徑下的塊裝置。

    mount | grep <mount-path>
    /dev/vdtest <mount-path>
  2. 找到使用塊裝置的進程ID。

    fuser -m /dev/vdtest
  3. 終止對應的進程。

    進程終止後,雲端硬碟會被自動卸載。

刪除PVC之後,雲端硬碟依舊殘留

問題現象

刪除叢集中的PVC之後,雲端硬碟在ECS控制台依舊殘留。

問題原因

  • 原因1:PV的回收策略(reclaimPolicy)為Retain,表示刪除PVC後,會保留PV和雲端硬碟。

  • 原因2:PVC、PV同時被刪除或PV在PVC之前被刪除。

解決方案

  • 原因1解決方案:如果reclaimPolicy設定為Retain模式,刪除PVC時,CSI不會刪除PV和雲端硬碟,您需要手動刪除。

  • 原因2解決方案:PV中若存在deleteTimestamp annotation的情況,CSI將不會負責回收雲端硬碟資源。更多資訊,請參見controller。如需刪除雲端硬碟資源,僅刪除PVC即可,被刪除的PVC綁定的PV將會被自動清理。

刪除PVC失敗,刪除後PVC依舊存在

問題現象

在叢集中刪除PVC失敗,使用--force仍然無法刪除。

問題原因

叢集中存在Pod使用該PVC,PVC上的finalizer依舊存在,無法刪除。

解決方案

  1. 查看當前引用此PVC的Pod。

    kubectl describe pvc <pvc-name> -n kube-system
  2. 確認引用該PVC的Pod不再使用後,刪除該Pod,然後再次嘗試刪除PVC。

其他

作為儲存卷使用的雲端硬碟可以轉為訂用帳戶嗎

作為儲存卷的雲端硬碟必須採用隨用隨付方式,不能轉為訂用帳戶。

在ECS控制台的Block Storage頁面,如何判斷哪些雲端硬碟是儲存卷關聯的雲端硬碟

擷取雲端硬碟儲存卷所關聯的雲端硬碟的ID(格式為d-********),然後在ECS控制台的Block Storage頁面,通過雲端硬碟ID確認哪些雲端硬碟是儲存卷關聯的雲端硬碟。

  • 預設情況,動態建立的雲端硬碟PV的名稱即為雲端硬碟ID,您可以在叢集的儲存 > 儲存卷頁面直接查看。

  • 如果雲端硬碟PV的名稱不是雲端硬碟ID,您可以通過kubectl get pv <pv-name> -o yaml命令查看雲端硬碟PV的詳情,volumeHandle欄位的值即為雲端硬碟ID。