本文介紹關於儲存相關異常問題診斷流程和排查思路。
診斷流程
執行以下命令,查看Pod事件,確認Pod無法啟動是由儲存問題導致。
kubectl describe pods <pod-name>
若查看Pod處於下圖所示的狀態,說明Pod使用的儲存都已成功掛載到Pod上。此時Pod沒啟動(比如:CrashLoopBackOff)不屬於儲存問題,請提交工單處理。
執行以下命令,查看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。執行以下命令,查詢CSI儲存外掛程式是否為最新版本。
kubectl get ds csi-plugin -n kube-system -oyaml |grep image
預期輸出:
image: registry.cn-****.aliyuncs.com/acs/csi-plugin:v*****-aliyun
儲存外掛程式最新版本資訊,請參見csi-plugin和csi-provisioner,若您叢集中儲存外掛程式不是最新版本,請升級CSI外掛程式。具體操作,請參見管理組件。其他儲存群組件升級失敗問題排查,請參見組件升級失敗問題排查。
排查Pod Pending問題。
雲端硬碟的Pod Pending問題處理,請參見下文雲端硬碟Pod的狀態為非Running。
NAS的Pod Pending問題處理,請參見下文NAS Pod的狀態為非Running。
OSS的Pod Pending問題處理,請參見下文OSS Pod的狀態為非Running。
排查PVC處於非Bound問題。
雲端硬碟的PVC非Bound問題處理,請參見下文雲端硬碟PVC的狀態為非Bound。
NAS的PVC非Bound問題處理,請參見下文NAS PVC的狀態為非Bound。
OSS的PVC非Bound問題處理,請參見下文OSS PVC的狀態為非Bound。
如果排查後問題仍未解決,請提交工單處理。
組件升級失敗問題排查
若組件升級失敗,請參考以下操作,進行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節點和雲端硬碟類型不符。
解決方案:
通過將Pod調度到其他節點快速恢複。具體操作,請參見調度應用至指定節點。
通過命令
kubectl describe pods <pod-name>
查看Pod的Event。根據不同Event提示資訊處理。
雲端硬碟掛載問題處理,請參見雲端硬碟儲存卷FAQ。
雲端硬碟卸載問題處理,請參見雲端硬碟儲存卷FAQ。
若沒有相關Event資訊,請提交工單處理。
由於ECS節點和雲端硬碟類型不符導致的,請選擇合適類型的雲端硬碟。更多資訊,請參見執行個體規格類型系列。
其他ECS OpenAPI類型問題的處理方法,請參見ErrorCode。
PVC的狀態為非Bound
問題現象:
PVC為非Bound狀態,Pod為非Running狀態。
問題原因:
靜態方式:由於PVC和PV之間的Selector無法滿足互相綁定的條件導致。例如:PVC中Selector配置與PV中的不一致,StorageClass Name不一致、PV狀態是Release等問題。
動態方式:由於csi-provisioner組件的某種原因未能建立出對應的雲端硬碟。
解決方案:
靜態方式:請檢查相關的YAML書寫是否正確。更多資訊,請參見通過kubectl命令列的方式使用雲端硬碟靜態儲存卷。
說明若PV的狀態是Release,則該PV無法被複用,需要將雲端硬碟ID取出重新建立PV。
動態方式:通過命令
kubectl describe pvc <pvc-name> -n <namespace>
查看PVC的Event。根據不同Event提示資訊處理。
雲端硬碟建立問題處理,請參見雲端硬碟儲存卷FAQ。
雲端硬碟擴容問題處理,請參見雲端硬碟儲存卷FAQ。
若沒有相關Event資訊,請提交工單處理。
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。