本文為您介紹儲存常見問題的分析流程,雲端硬碟儲存卷與NAS儲存卷常見問題的處理方法。
類型 | 問題 |
常見問題分析流程 | |
雲端硬碟儲存卷常見問題 | 雲端硬碟建立常見問題 雲端硬碟掛載常見問題
雲端硬碟卸載常見問題 雲端硬碟擴容常見問題 雲端硬碟使用常見問題 |
NAS儲存卷常見問題 | |
OSS儲存卷常見問題 | OSS掛載問題 OSS使用問題 控制台檢測失敗問題 |
儲存群組件常見問題 | |
雲原生常見問題 | |
Flexvolume遷移CSI常見問題 | |
其他儲存問題 |
常見問題分析流程
通過以下操作查看對應儲存外掛程式的記錄檔,明確問題現象。
執行以下命令,查看PVC或Pod上是否有明顯的Event。
kubectl get events
預期輸出:
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"
執行以下命令,查看叢集是否部署了Flexvolume或CSI儲存外掛程式。
執行以下命令,查看叢集是否部署了Flexvolume儲存外掛程式。
kubectl get pod -n kube-system |grep flexvolume
預期輸出:
NAME READY STATUS RESTARTS AGE flexvolume-*** 4/4 Running 0 23d
執行以下命令,查看叢集是否部署了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
查看使用的資料卷模板是否和叢集儲存外掛程式(Flexvolume或CSI)的模板匹配。
若在此叢集中初次使用資料卷,請檢查您的PV對象及StorageClass對象中定義的Driver名稱屬於CSI還是Flexvolume。Driver名稱必須與當前叢集部署的外掛程式類型一致。
查詢儲存外掛程式是否為最新版本。
執行以下命令,查詢Flexvolume外掛程式的鏡像版本。
kubectl get ds flexvolume -n kube-system -oyaml | grep image
預期輸出:
image: registry.cn-hangzhou.aliyuncs.com/acs/Flexvolume:v1.14.8.109-649dc5a-aliyun
關於Flexvolume外掛程式資訊,請參見Flexvolume(已棄用)。
執行以下命令,查詢CSI外掛程式的鏡像版本。
kubectl get ds csi-plugin -n kube-system -oyaml |grep image
預期輸出:
image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.18.8.45-1c5d2cd1-aliyun
關於CSI外掛程式資訊,請參見csi-plugin及csi-provisioner。
查看日誌。
若雲端硬碟PVC處於Pending狀態,無法成功建立PV,則需要查看Provisioner日誌。
若叢集部署了Flexvolume外掛程式,則執行以下命令查詢alicloud-disk-controller日誌。
podid=`kubectl get pod -nkube-system | grep alicloud-disk-controller | awk '{print $1}'` kubectl logs <PodID> -n kube-system
若叢集部署了CSI外掛程式,則執行以下命令查詢csi-provisioner日誌。
podid=`kubectl get pod -n kube-system | grep csi-provisioner | awk '{print $1}'` kubectl logs <PodID> -n kube-system -c csi-provisioner
說明csi-provisioner的容器組數量為2,上述
kubectl get pod -nkube-system | grep csi-provisioner | awk '{print $1}'
命令操作會輸出2個podid
,請分別執行kubectl logs <PodID> -nkube-system -c csi-provisioner
命令。
若Pod啟動時掛載報錯,則需要查看Flexvolume或csi-plugin日誌。
若叢集部署了Flexvolume外掛程式,則執行以下命令查詢Flexvolume日誌。
kubectl get pod <pod-name> -owide
登入Pod所在節點,在
/var/log/alicloud/flexvolume_**.log
查看Flexvolume日誌。若叢集部署了CSI外掛程式,則執行以下命令查詢csi-plugin日誌。
nodeID=`kubectl get pod <pod-name> -owide | awk 'NR>1 {print $7}'` podID=`kubectl get pods -nkube-system -owide -lapp=csi-plugin | grep $nodeID|awk '{print $1}'` kubectl logs <PodID> -nkube-system
查看Kubelet日誌。
執行以下命令,擷取Pod所在節點。
kubectl get pod <pod-name> -owide | awk 'NR>1 {print $7}'
登入到該節點上查看/var/log/message記錄檔。
快速恢複
眾多Pod掛載不上資料卷情境的問題,可以通過將Pod調度到其他節點快速恢複。具體操作,請參見調度應用至指定節點。
csi-plugin組件升級失敗
由於csi-plugin是Daemonset組件,如果當前叢集存在NotReady或者其他非Running狀態的節點,就會導致升級失敗。您需要手動處理故障節點,然後重新升級。具體操作,請參見管理CSI組件。
CSI組件啟動失敗
問題現象
csi-provisioner、csi-plugin組件啟動失敗,csi-plugin、csi-provisioner的main container日誌報錯403 - Forbidden
。
問題原因
由於節點上metadata server開啟了安全強化,CSI暫不支援安全強化功能,導致無法訪問元資訊。
解決方案
請提交工單諮詢ECS團隊,關閉節點的中繼資料安全強化。
叢集節點數量不符合要求導致csi-provisioner組件升級失敗
問題現象
csi-provisioner組件前置檢查失敗,報錯叢集節點數量不符合要求。
csi-provisioner前置檢查成功,升級成功。但是查看csi-provisioner Pod crash,發現日誌中出現類似下方
403 Forbidden
的日誌。time="2023-08-05T13:54:00+08:00" level=info msg="Use node id : <?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n <head>\n <title>403 - Forbidden</title>\n </head>\n <body>\n <h1>403 - Forbidden</h1>\n </body>\n</html>\n"
問題原因
現象1原因:
csi-provisioner為了保證高可用,它包含主從Pod,並且主從Pod必須在不同的節點上。如果當前叢集只有1個節點,會導致該組件升級失敗。
現象2原因:
csi-provisioner所在節點開啟了安全強化模式,該模式禁止了節點上metadata server的訪問,導致此報錯資訊。
解決方案
現象1解決方案:
您需要更新csi-provisioner組件。具體操作,請參見管理CSI組件。
現象2解決方案:
關閉節點上的安全強化模式,CSI必須要訪問到節點的中繼資料。
StorageClass屬性變更導致csi-provisioner組件升級失敗
問題現象
csi-provisioner組件前置檢查失敗,報錯StorageClass屬性不符合預期。
問題原因
預設StorageClass的屬性被變更過,您刪除重建過同名的StorageClass。StorageClass屬性都是不可變的,否則會導致該組件升級失敗。
解決方案
您需要刪除叢集中預設的StorageClass,包括alicloud-disk-essd,alicloud-disk-available,alicloud-disk-efficiency,alicloud-disk-ssd,alicloud-disk-topology,刪除過程不會對現有應用造成任何影響。刪除後,請嘗試重新安裝csi-provisioner組件。安裝後,系統會自動重新建立StorageClass,無需您額外處理。
如果您需要自訂的StorageClass,請建立新的StorageClass名稱使用,請勿修改預設的StorageClass。
StorageClass變更是否會影響現有儲存?
若儲存的PVC、PV的YAML檔案不發生改變,StorageClass的變更不會對現有儲存產生影響。例如,修改 StorageClass中的ALLOWVOLUMEEXPANSION
欄位時,僅修改PVC的Capacity後才會生效, 如果PVC的YAML檔案不變,此欄位不會影響現有配置。
csi-provisioner組件日誌出現failed to renew lease xxx timed out waiting for the condition報錯
問題現象
通過kubectl logs csi-provisioner-xxxx -nkube-system
命令查看CSI日誌,發現failed to renew lease xxx timed out waiting for the condition
報錯。
問題原因
csi-provisioner是高可用多副本組件,多Pod組件之間需通過K8s Lease選主,選主過程中需要訪問APIServer來擷取指定的Lease,擷取到Lease的組件就稱為leader,為叢集提供服務。當前報錯由於csi-provisioner訪問叢集內的APIServer失敗導致。
解決方案
請排查叢集網路和APIserver狀態是否正常。如無法解決,請提交工單處理。
儲存群組件導致的OOM問題
csi-provisioner是中心化的儲存群組件,Sidecar主要是緩衝Pod、PV、PVC等資訊,隨著叢集規模增加,會造成記憶體OOM。當發生OOM時,您需要根據叢集規模自行調整Limit大小,具體操作如下。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁面,找到並選中csi-provisioner組件,單擊組件右下方的表徵圖,然後選擇查看YAML。
根據叢集規模修改組件的YAML檔案,自行調整Limit大小。
建立或掛載儲存卷時,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已經處於已廢棄的狀態。如果您的ACK叢集是早期的版本(版本小於1.18),建議您將Flexvolume外掛程式遷移為CSI外掛程式。關於遷移的具體操作,請參見Flexvolume遷移至CSI。
csi-plugin的Pod監控上出現大量流量
問題現象
在叢集Pod監控上,csi-plugin的Pod出現大量流量。
問題原因
csi-plugin負責當前節點上NAS儲存卷的掛載。由於NAS走的是網路流量,當節點存在NAS掛載點(即存在使用NAS的Pod)時,Pod發起的NAS請求流量就會經過csi-plugin的Namespace,從而被叢集監控記錄。造成csi-plugin出現大量網路流量。
解決方案
此種情況無需解決。因為流量只是被記錄,並不會翻倍,也不會額外佔用網路頻寬,所以可以忽略。
Pod的Event提示0/x nodes are available: x pod has unbound immediate PersistentVolumeClaims
問題現象
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,您需要檢查當前Pod引用的StorageClass是否存在,若不存在,需重新建立StorageClass。
PV為Released狀態,無法通過重建PVC綁定
問題現象
PVC誤刪除後,PV為Released狀態無法通過重建PVC綁定。
問題原因
如果PVC的reclaimPolicy是Retain,當PVC被誤刪除時,PV會變為Released狀態。
解決方案
您需要刪除當前PV中的pv.spec.claimRef
欄位,然後重新使用靜態卷方式進行綁定。即可將PV變為Bound狀態。
關於如何綁定NAS靜態卷的具體操作,請參見使用NAS靜態儲存卷。
關於如何綁定OSS靜態卷的具體操作,請參見使用OSS靜態儲存卷。
關於如何綁定雲端硬碟靜態卷的具體操作,請參見使用雲端硬碟靜態儲存卷。
PV為Lost狀態,無法通過重建PVC綁定
問題現象
PVC和PV建立後,PV處於Lost狀態,且無法與PVC綁定。
問題原因
PV中claimRef
引用的PVC名稱不存在,導致PV狀態為Lost。
解決方案
您需要刪除當前PV中的pv.spec.claimRef
欄位,然後重新使用靜態卷方式進行綁定。即可將PV變為Bound狀態。
關於如何綁定NAS靜態卷的具體操作,請參見使用NAS靜態儲存卷。
關於如何綁定OSS靜態卷的具體操作,請參見使用OSS靜態儲存卷。
關於如何綁定雲端硬碟靜態卷的具體操作,請參見使用雲端硬碟靜態儲存卷。
Flexvolume遷移CSI常見問題
Container ServiceACK早期的儲存外掛程式為Flexvolume,隨著Kubernetes版本的迭代,Flexvolume已經處於已廢棄的狀態。您的ACK叢集如果是早期的版本(版本小於1.18),建議您將Flexvolume外掛程式遷移為CSI外掛程式。關於遷移的具體操作,請參見Flexvolume遷移至CSI。
其他儲存類問題
當您遇到mountOption拼字有誤、PVC引用的StorageClass未建立、未建立掛載點網域名稱等儲存類問題時,建議您優先使用CNFS作為容器儲存卷,可以避免此類問題。關於CNFS更多內容,請參見容器網路檔案系統CNFS概述。
容器多個應用是否可以使用同一個儲存卷?
雲端硬碟:不支援
雲端硬碟為阿里雲儲存團隊提供的非共用儲存,只能同時被一個Pod掛載,不支援多個應用使用。
NAS、OSS:支援
NAS、OSS為共用儲存,可以同時為多個Pod提供共用儲存服務,即一個PVC可以同時被多個應用使用。關於NAS並發寫入的一些限制條件,請參見如何避免多進程或多用戶端並發寫同一記錄檔可能出現的異常?和如何解決向NFS檔案系統中寫入資料延遲問題?
關於如何掛載NAS儲存卷,請參見建立CNFS管理NAS檔案系統(推薦)、使用NAS靜態儲存卷、使用NAS動態儲存裝置卷。
關於如何掛載OSS儲存卷,請參見使用OSS靜態儲存卷;通過CNFS實現OSS動態儲存裝置卷掛載的具體操作,請參見對OSS生命週期管理。
如何更改雲端硬碟預設建立的StorageClass的配置?
預設建立的StorageClass不支援更改。
csi-provisioner組件安裝後,叢集內會預設建立alicloud-disk-topology-alltype等StorageClass,請勿修改這些預設產生的儲存類。關於雲端硬碟StorageClass的更多資訊,請參見儲存類(StorageClass)。如果您需要調整StorageClass的配置,例如儲存卷類型、效能、回收策略等,您可以建立新的StorageClass(StorageClass數量不受限制)。具體操作,請參見建立StorageClass。