組件介紹
建立叢集時,預設會安裝以下CSI儲存群組件:
組件 | 說明 | 部署形式 |
csi-plugin | 實現資料卷的掛載、卸載、格式化等功能。 | DaemonSet |
csi-provisioner | 實現資料卷的動態建立,動態擴容,建立快照等能力。預設支援Block Storage,NAS, OSS三類儲存卷的建立。 | Deployment |
說明 建立叢集將預設安裝csi-provisioner託管版。託管版組件由阿里雲負責營運,您在叢集中無法看到相關Pod。
升級csi-plugin和csi-provisioner
您可以在控制台查看csi-plugin和csi-provisioner組件版本並升級組件。
重要 如果叢集通過csi-compatible-controller組件遷移Flexvolume至CSI,且該流程未完成時,無法自動升級csi-plugin和csi-provisioner組件,建議您先完成遷移後再升級組件,或者在遷移過程中手動升級CSI組件。具體操作,請參見升級組件。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
單擊儲存頁簽,在csi-plugin及csi-provisioner組件地區,查看目前的版本是否需要升級,並升級組件。
常見問題
組件異常問題
CSI組件啟動失敗,鏡像拉取失敗,報錯exec /usr/bin/plugin.csi.alibabacloud.com: exec format error
問題現象
csi-plugin組件的Pod內csi-plugin Container報錯exec /usr/bin/plugin.csi.alibabacloud.com: exec format error。
問題原因
csi-plugin預設支援amd64和arm64多架構,如果當前Pod所在節點屬於amd64或arm64架構,則可能是當前節點的鏡像拉取未完成所導致,即鏡像中繼資料已存在,但是實際鏡像未拉取成功,導致二進位失效。鏡像拉取失敗的可能原因是由於在拉取鏡像過程中強制關機導致,您可以查看當前節點對應ECS執行個體的Action Trail確認是否有關機命令。
解決方案
擴容新節點,然後排水當前節點。
如果不想使用新節點,則需要執行以下操作:
排水當前節點的應用,然後將當前節點從叢集中移除。
登入該節點,刪除節點中所有的Container(如有)。
刪除/var/lib/containerd目錄下的所有檔案。
將該節點重新加入叢集。
儲存群組件導致的OOM問題
csi-provisioner組件對應Pod中的Sidecar容器主要用於緩衝Pod、PV、PVC等資訊,隨著叢集規模增加,會造成記憶體OOM。
csi-plugin的Pod監控上出現大量流量
問題現象
在叢集Pod監控上,csi-plugin的Pod出現大量流量。
問題原因
csi-plugin負責當前節點上NAS儲存卷的掛載。由於使用NAS會產生網路流量,當節點存在NAS掛載點(即存在使用NAS的Pod)時,Pod發起的NAS請求流量就會經過csi-plugin的Namespace,從而被叢集監控記錄,造成csi-plugin出現大量網路流量。
解決方案
此種情況無需解決,可以忽略。流量只是被記錄,並不會翻倍,也不會額外佔用網路頻寬。
csi-provisioner組件日誌出現failed to renew lease xxx timed out waiting for the condition報錯
問題現象
通過kubectl logs csi-provisioner-xxxx -n kube-system命令查看CSI日誌,發現failed to renew lease xxx timed out waiting for the condition報錯。
問題原因
csi-provisioner是高可用多副本組件,多Pod組件之間需通過Kubernetes Lease選主,選主過程中需要訪問API Server來擷取指定的Lease,擷取到Lease的組件就稱為Leader,為叢集提供服務。當前報錯由於csi-provisioner訪問叢集內的API Server失敗導致。
解決方案
請排查叢集網路和API server狀態是否正常。如無法解決,請提交工單處理。
組件升級失敗
csi-plugin組件前置檢查失敗
若您的叢集沒有使用雲端硬碟、NAS或OSS類型的儲存卷,或叢集為測試環境,請手動更新鏡像以升級csi-plugin組件。
命令樣本如下,請參考csi-plugin替換<image url>為要升級的鏡像地址。
kubectl set image -n kube-system daemonset/csi-plugin csi-plugin=<image url>
csi-plugin組件前置檢查通過,但升級失敗
由於csi-plugin是Daemonset組件,如果當前叢集存在NotReady或者其他非Running狀態的節點,就會導致升級失敗。您需要手動處理故障節點,然後重新升級。
若無法找到具體原因,請提交工單申請手動升級保障。
控制台有csi-plugin組件,但沒有csi-provisioner組件
csi-provisioner的歷史版本(1.14及之前)採用StatefulSet部署。如果叢集中存在StatefulSet類型的csi-provisioner,請執行kubectl delete sts csi-provisioner刪除,然後重新安裝csi-provisioner組件。
若操作出錯,請提交工單申請手動升級保障。
csi-provisioner組件前置檢查失敗
若您的叢集沒有使用通過StorageClass建立的雲端硬碟、NAS或OSS類型的動態儲存裝置卷,或叢集為測試環境,請手動更新鏡像以升級csi-provisioner組件。
命令樣本如下,請參考csi-provisioner替換<image url>為要升級的鏡像地址。
kubectl set image -n kube-system deployment/csi-provisioner csi-provisioner=<image url>
若您的叢集使用通過StorageClass建立的雲端硬碟、NAS或OSS類型的動態儲存裝置卷,且包含關鍵業務資料,請提交工單申請手動升級保障。
csi-provisioner組件前置檢查通過,但是升級失敗
叢集節點數量不符合要求導致csi-provisioner組件升級失敗
問題現象
現象1:csi-provisioner組件前置檢查失敗,報錯叢集節點數量不符合要求。
現象2:csi-provisioner組件前置檢查成功,升級成功,但是csi-provisioner組件對應Pod進入CrashLoopBackOff狀態,查看日誌可看到類似下方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"
問題原因
解決方案
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。