全部產品
Search
文件中心

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

更新時間:Dec 07, 2024

本文介紹在ACK叢集中使用雲端硬碟儲存卷遇到的常見問題及處理方法。

類型

問題

雲端硬碟建立

雲端硬碟掛載

雲端硬碟卸載

雲端硬碟擴容

雲端硬碟使用

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

動態建立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

問題原因

ECS庫存不足,導致建立雲端硬碟失敗。

解決方案

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

問題現象

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

問題原因

在PVC中指定的雲端硬碟大小不符合規範,不同類型雲端硬碟有最小容量的限制,例如,高效雲端硬碟和SSD雲端硬碟要求最小20 GiB。更多限制資訊,請參見雲端硬碟類型

解決方案

調整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未檢測到Pods被調度到的節點。

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

  • 是否存在引用當前PVC的Pod,若沒有,則需要建立。

解決方案

  • 刪除應用中的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 -nkube-system -owide | grep node-XXXX
    • 狀態異常:通過命令kubectl logs csi-plugin-xxxx -nkube-system -c csi-plugin查看異常日誌,多數節點Port被佔用。您可參考以下步驟處理。

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

      • 使用以下命令,在ds csi-plugin上增加SERVICE_PORT的env參數。

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

  2. 掛載使用系統預設的Driver,即Disk、NAS、OSS。如需支援特殊儲存類型的Driver,請提交工單申請。

動態建立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儲存外掛程式,請慢慢遷移至CSI儲存外掛程式。具體操作,請參見通過csi-compatible-controller組件遷移Flexvolume至CSI

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

問題現象

在啟動掛載雲端硬碟的Pod的時候,出現Pod無法啟動的情況並報錯had volume node affinity conflict

問題原因

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

解決方案

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

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

問題現象

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

問題原因

  • 您寫入了其他Region的DiskID。

  • 您在編寫PV的時候輸入了錯誤的DiskID。

  • 您的帳號無許可權操作DiskID,可能不是當前帳號的DiskID。

解決方案

確認當前雲端硬碟是靜態掛載還是動態掛載。

  • 如果是靜態掛載的雲端硬碟,則需要檢查DiskID的來源是否滿足如下條件。

    • DiskID所在的Region與叢集所在的Region一致。

    • DiskID資訊複製無誤。

    • DiskID與當前叢集處於同一個帳號下。

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

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

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

    • 如果不存在,預設使用的是節點的Worker Role使用者自訂的AK和SK,需要檢查對應的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執行個體不支援掛載的雲端硬碟類型。

解決方案

請參考執行個體規格類型系列確認當前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

問題原因

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

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

解決方案

  1. 此種警示情況,無需處理,等待系統重試即可。

  2. 需要檢查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任務衝突報錯。

解決方案

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

  2. 若問題仍未解決,請提交工單給ECS團隊處理。

啟動掛載了雲端硬碟的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數量會偏小。

刪除掛載了雲端硬碟的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. 檢查PVC、PV是否聲明了叢集中已經存在的StorageClass。如果未聲明,說明使用的是靜態PVC和PV。

  2. 檢查StorageClass中的reclaimPolicy是否為Retain模式。

  3. PVC、PV同時被刪除或PV在PVC之前被刪除。

解決方案

  1. CSI不會刪除靜態建立的PVC、PV,您需要登入Container Service管理主控台或調用OpenAPI手動刪除。

  2. 如果reclaimPolicy設定為Retain模式,CSI同樣不負責處理,您需要登入Container Service管理主控台或調用OpenAPI手動刪除。

  3. 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。

動態擴容雲端硬碟失敗,PVC Event提示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.

問題原因

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

解決方案

判斷當前節點的類型。

  • 如果當前節點為ECI節點,請執行kubectl get configmap -n kube-system eci-profile -ojsonpath="{.data.enablePVCController}",確認該配置已設定為true,詳見eci-profile配置項說明。若仍然無法解決,請提交工單給ECI團隊處理。

  • 如果當前節點為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)處理。

動態擴容雲端硬碟失敗,Edit PVC時報錯提示only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize

問題現象

通過命令列或控制台編輯PVC Storage之後,發現如下報錯資訊:

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

問題原因

原因1:當前雲端硬碟儲存卷的PVC和PV是通過靜態方式手動建立的,靜態掛載的雲端硬碟不支援動態擴容。

原因2:叢集當前PVC引用的StorageClass中allowVolumeExpansion的值為false,不支援動態擴容。

解決方案

解決方案1:通過手動方式擴容雲端硬碟靜態儲存卷。具體操作,請參見手動擴容雲端硬碟儲存卷

解決方案2:將PVC引用的StorageClass中allowVolumeExpansion對應的值改為true,然後再擴容PVC。

應用在讀寫雲端硬碟掛載目錄時提示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管理主控台,根據云盤ID,查看當前使用雲端硬碟的狀態。

    • 若雲端硬碟處於Available狀態,表明雲端硬碟被拔出,可通過重啟Pod重新掛載雲端硬碟。

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

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

      重要

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