本文介紹使用雲端硬碟儲存卷的常見問題和解決方案。
問題導航
|
類型 |
問題 |
|
建立 |
|
|
掛載 |
|
|
使用 |
|
|
擴容 |
|
|
卸載 |
|
|
其他 |
雲端硬碟建立
動態建立PV失敗且提示InvalidDataDiskCatagory.NotSupported
問題現象
建立PV失敗,PVC Event提示InvalidDataDiskCategory.NotSupported。
問題原因
當前可用性區域不支援建立StorageClass中指定類型的雲端硬碟,或者當前可用性區域內指定類型的雲端硬碟庫存不足。
解決方案
-
升級CSI組件,使用名稱為alicloud-disk-topology-alltype的StorageClass。或者參考使用雲端硬碟動態儲存裝置卷,建立並使用自訂StorageClass,在StorageClass中聲明多種類型的雲端硬碟。
-
為叢集添加多個可用性區域。更多資訊,請參見雲端硬碟儲存卷的高可用配置建議。
動態建立PV失敗且提示The specified AZone inventory is insufficient
問題現象
建立PV失敗,PVC Event提示The specified AZone inventory is insufficient。
問題原因
指定的可用性區域內雲端硬碟庫存不足,導致建立雲端硬碟失敗。
解決方案
-
升級CSI組件,使用名稱為alicloud-disk-topology-alltype的StorageClass。或者參考使用雲端硬碟動態儲存裝置卷,建立並使用自訂StorageClass,在StorageClass中聲明多種類型的雲端硬碟。
-
為叢集添加多個可用性區域。更多資訊,請參見雲端硬碟儲存卷的高可用配置建議。
動態建立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。
解決方案
-
查看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"
-
-
狀態正常:跳轉下一步。
-
-
掛載使用系統預設的Driver,即Disk、NAS、OSS等。詳情請參見儲存目錄下的操作文檔。
動態建立PV失敗且提示selfLink was empty, can't make reference
問題現象
建立PV失敗,PVC Event提示selfLink was empty, can't make reference。
問題原因
-
叢集版本和CSI組件版本不匹配。
-
叢集使用Flexvolume儲存外掛程式。
解決方案
-
升級CSI組件版本。一般組件版本需要和叢集版本保持一致。例如,Kubernetes版本為1.20的叢集需要匹配安裝的CSI版本為1.20及以上版本。
-
如您的叢集使用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雲端硬碟等)。
-
關於如何建立和使用StorageClass,請參見使用雲端硬碟動態儲存裝置卷。
-
關於各類型雲端硬碟支援的容量範圍,請參見Block Storage效能。
雲端硬碟掛載
啟動掛載了雲端硬碟的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
問題原因
雲端硬碟的檔案系統損壞,導致雲端硬碟無法掛載。
解決方案
一般由於業務不正常的拔盤導致,請參考以下步驟處理。
-
檢查應用使用雲端硬碟時是否滿足以下要求。
-
不存在多個Pod掛載同一塊雲端硬碟。
-
在拔盤過程中請勿寫入資料。
-
-
登入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。
問題原因
當前應用使用的雲端硬碟缺失。
解決方案
檢查當前使用雲端硬碟的狀態,根據狀態進行處理。
-
根據云盤掛載目錄,通過Pod的
VolumeMount定義找到對應的PVC。 -
通過
kubectl get pvc <pvc-name>查看PVC狀態,記錄對應的PV。 -
根據PV Name查看PV的YAML, 在
pv.VolumeHandle欄位中擷取雲端硬碟ID。 -
在ECS管理主控台的Block Storage頁面,根據云盤ID,查看當前使用雲端硬碟的狀態。
-
若雲端硬碟處於待掛載狀態,表明雲端硬碟被卸載,請重啟Pod,重新掛載雲端硬碟。
說明當前Pod處於Running狀態,表明雲端硬碟曾經被成功掛載過,之後被卸載。由此推測是多個Pod引用了同一個雲端硬碟導致的問題,可通過
kubectl describe pvc <pvc-name>查看輸出中的UsedBy,確認是否有多個Pod引用當前PVC。 -
若找不到雲端硬碟,表明雲端硬碟已經被釋放,則無法恢複。
重要掛載ESSD類型雲端硬碟時,建議使用ESSD雲端硬碟自動極速快照功能保護雲端硬碟儲存資料卷的安全。更多資訊,請參見雲端硬碟非預期刪除導致的資料丟失。
-
使用雲端硬碟儲存卷時,如何設定雲端硬碟掛載目錄的使用者存取權限
雲端硬碟本身不支援設定使用者存取權限。如果需要設定掛載目錄的使用者存取權限,請在建立應用時為Pod配置securityContext來修改許可權。更多資訊,請參見為Pod配置卷存取權限和屬主變更策略。
在 Pod 中配置
securityContext.fsgroup會導致kubelet在掛載卷時遞迴修改檔案許可權(chmod/chown)。若檔案數量龐大,將顯著延長掛載時間。對於1.20及以上版本的叢集,建議將
fsGroupChangePolicy配置為OnRootMismatch,僅在首次掛載且卷根目錄許可權不匹配時才執行遞迴的許可權變更,以最佳化掛載效能。若效能仍不滿足要求或需更精細的許可權控制,建議使用initContainer在主應用程式容器啟動前自行執行許可權調整命令。Pod重建時會重新掛載原有雲端硬碟。如果由於其他限制導致Pod無法調度到原可用性區域,Pod會因無法掛載雲端硬碟而一直處於Pending狀態。
雲端硬碟擴容
雲端硬碟儲存卷是否會自動擴容
預設情況下,當雲端硬碟儲存卷的容量耗盡時,並不會自動擴容,您需要手動更新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時提示target is busy
問題現象
在刪除Pod時,Pod Event或者kubelet日誌(/var/log/messages)報出以下錯誤提示。
unmount failed, output <mount-path> target is busy
問題原因
Pod刪除失敗,說明有進程正在使用該裝置。需要登入到Pod所在宿主機上尋找正在使用該裝置的進程。
解決方案
-
找到對應掛載路徑下的塊裝置。
mount | grep <mount-path> /dev/vdtest <mount-path> -
找到使用塊裝置的進程ID。
fuser -m /dev/vdtest -
終止對應的進程。
進程終止後,雲端硬碟會被自動卸載。
刪除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依舊存在,無法刪除。
解決方案
-
查看當前引用此PVC的Pod。
kubectl describe pvc <pvc-name> -n kube-system -
確認引用該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。