全部產品
Search
文件中心

Container Service for Kubernetes:管理csi-plugin和csi-provisioner組件

更新時間:Jan 17, 2026

CSI 儲存群組件(csi-plugin和csi-provisioner)支援自動化完成儲存卷的動態建立、掛載、卸載、擴容等操作,以便像使用原生 Kubernetes 資源一樣便捷地使用阿里雲雲端硬碟、NAS等儲存資源。

組件介紹

組件構成

ACK 叢集已預設安裝 CSI 組件。 csi-plugin 和 csi-provisioner 協同管理儲存卷的生命週期。

組件

說明

部署形式

csi-plugin

在每個節點上運行,負責執行儲存卷的掛載(Mount)、卸載(Unmount)以及檔案系統格式化等節點側操作。

DaemonSet

csi-provisioner

作為中心控制器運行,負責處理儲存卷的動態建立、刪除、擴容、快照等操作。支援雲端硬碟、NAS、OSS儲存卷的管理。

Deployment

託管版與非託管版 csi-provisioner

為提升穩定性和簡化營運,csi-provisioner提供託管版和非託管版兩種模式。建立叢集預設啟用託管版。

  • 託管版(預設)
    組件 Pod 由 ACK 託管,在 kube-system 命名空間下不可見。ACK 負責組件維護和資源調優。

  • 非託管版
    組件 Pod 以 Deployment 形式部署在 kube-system 命名空間下,需自行管理資源配置(修改 Deployment YAML)及問題排查。

升級CSI組件

可在控制台組件管理頁面查看組件版本並執行升級。

升級前檢查

  • 檢查版本相容性:參見變更記錄(csi-provisionercsi-plugin),確認目標 CSI 版本與當前叢集版本相容。

  • 檢查 FlexVolume 遷移狀態:若叢集曾使用 csi-compatible-controller 組件從 FlexVolume 遷移至 CSI,未完成的遷移任務會阻塞 CSI 組件的自動升級。建議先完成遷移,或參見升級組件在遷移過程中手動升級。

  • 升級順序依賴:儲存群組件存在依賴關係,為確保相容性和穩定性,應按以下順序依次升級:storage-operatorcsi-provisionercsi-plugin

執行升級

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理

  3. 單擊儲存頁簽,定位csi-provisioner及csi-plugin,按順序執行升級。

    如升級失敗,請參見組件升級失敗

    升級後,可在組件卡片地區查看版本是否符合預期。

應用於生產環境

  • 安全強化與中繼資料存取違規:

    csi-plugin 需要訪問中繼資料以擷取節點資訊(如地區、可用性區域等)。若禁用中繼資料存取權限,將導致組件啟動失敗或運行異常。請參見使用僅加固模式訪問ECS執行個體中繼資料升級組件至相應版本。

    配置安全性群組或節點安全性原則時,需確保 csi-plugin 組件 Pod 網路可以訪問執行個體中繼資料服務。

  • 保持預設 StorageClass:

    ACK預置了alicloud-disk-essd等預設 StorageClass。修改其屬性(如 provisionerparameters)可能導致組件升級異常。

常見問題

組件異常問題

CSI組件啟動失敗,鏡像拉取失敗,報錯exec /usr/bin/plugin.csi.alibabacloud.com: exec format error

問題現象

csi-plugin組件Pod內的csi-plugin容器啟動失敗,日誌中出現exec /usr/bin/plugin.csi.alibabacloud.com: exec format error錯誤。

問題原因

此錯誤通常與CPU架構不匹配有關,但 csi-plugin 預設同時支援 amd64 和 arm64 架構。因此,在受支援的節點上出現此問題,主要原因可能是 CSI 鏡像檔案損壞。

此情況通常為節點拉取鏡像時被異常中斷(如強制關機),導致節點本地鏡像檔案不完整。雖然鏡像中繼資料存在,但其內部二進位可執行檔已失效或損壞,導致csi-plugin容器無法正常啟動。

解決方案

  • 擴容新節點,然後排水當前節點。

  • 若需保留當前節點,則需執行以下操作:

    1. 排空當前節點上的應用,然後將該節點從叢集中移除

    2. 登入節點,刪除節點中所有的容器(如有)。

    3. 刪除/var/lib/containerd目錄下的所有檔案。

    4. 將該節點重新添加到叢集中

儲存群組件導致的OOM問題

csi-provisioner組件Pod中的Sidecar容器主要用於緩衝Pod、PV、PVC等資源資訊。叢集規模較大時會消耗大量記憶體,可能導致容器OOM。

  • 託管版csi-provisioner:請提交工單處理。

  • 非託管版csi-provisioner:發生OOM時,根據叢集規模調整Limit大小。

    1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理

    2. 定位csi-provisioner組件,單擊表徵圖表徵圖,然後單擊查看YAML

    3. 根據叢集規模修改組件YAML,調整Limit大小。

      修改limit大小

csi-plugin的Pod監控出現高網路流量

問題現象

在叢集Pod監控中,csi-plugin組件Pod顯示出較高的網路流量。

問題原因

此為預期行為。csi-plugin負責管理節點上NAS儲存卷的掛載。當節點上的應用 Pod 通過 NAS 掛載點讀寫資料時,所產生的網路流量會經過 csi-plugin 所在的網路命名空間,因此被監控系統統計為其網路流量。

解決方案

此種情況無需解決,可以忽略。流量只是被記錄,並不會實際消耗 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 採用多副本模式實現高可用。為確保同一時間只有一個執行個體提供服務,副本之間通過 Kubernetes Lease 機制進行選主。該機制強依賴於與 API Server 的穩定通訊。

報錯表明 csi-provisioner 無法訪問 API Server,導致選主過程失敗,所有副本都無法成為 Leader 並提供服務。

解決方案

檢查叢集網路連通性和API Server狀態。如無法解決,請提交工單處理。

組件升級失敗

csi-plugin組件前置檢查失敗

問題通常出現在叢集儲存外掛程式由Flexvolume遷移至CSI期間。可通過以下命令確認兩個儲存外掛程式是否共存。

kubectl -nkube-system get ds csi-plugin flexvolume

若輸出類似於:

NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
csi-plugin   4         4         4       4            4           kubernetes.io/os=linux   7d
flexvolume   4         4         4       4            4           kubernetes.io/os=linux   7d                                  

表明當前兩個儲存外掛程式共存。

Flexvolume 和 CSI 無法在共存狀態下升級。請先將所有 Flexvolume 類型的 PV/PVC 遷移至 CSI,然後卸載 Flexvolume,再繼續升級 CSI 組件,詳見將無儲存叢集的Flexvolume遷移至CSI

若不符合以上原因,且承載關鍵業務資料,請聯絡我們申請手動升級保障。

csi-plugin組件前置檢查通過,但升級失敗

csi-plugin 以 DaemonSet 形式部署,所有節點需處於健康狀態。若叢集中存在 NotReady 或非 Running 狀態的節點,將導致升級失敗。

需先修複故障節點,然後重新升級。若無法定位原因,請聯絡我們申請手動升級保障。

控制台有csi-plugin組件,但沒有csi-provisioner組件

早期版本(1.14 及之前)的 csi-provisioner 通過 StatefulSet 形式部署。若當前叢集中仍存在 StatefulSet 類型的 csi-provisioner 執行個體,需手動刪除(kubectl delete sts csi-provisioner)後重新安裝。

若操作異常,請聯絡我們申請手動升級保障。

csi-provisioner組件前置檢查失敗

問題通常出現在叢集儲存外掛程式由Flexvolume遷移至CSI期間。可通過以下命令確認兩個儲存外掛程式是否共存。

kubectl -nkube-system get ds csi-plugin flexvolume

若輸出類似於:

NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
csi-plugin   4         4         4       4            4           kubernetes.io/os=linux   7d
flexvolume   4         4         4       4            4           kubernetes.io/os=linux   7d                                  

表明當前兩個儲存外掛程式共存。

Flexvolume 和 CSI 無法在共存狀態下升級。請先將所有 Flexvolume 類型的 PV/PVC 遷移至 CSI,然後卸載 Flexvolume,再繼續升級 CSI 組件,詳見將無儲存叢集的Flexvolume遷移至CSI

若不符合以上原因,且承載關鍵業務資料,請聯絡我們申請手動升級保障。

csi-provisioner組件前置檢查通過,但是升級失敗

聯絡我們申請手動升級保障。

叢集節點數量或許可權不符合要求導致csi-provisioner組件升級失敗

問題現象

  • 情境1:csi-provisioner組件前置檢查失敗,提示叢集節點數量不符合要求。

  • 情境2: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"

問題原因及解決方案

  • 情境1

    • 問題原因:csi-provisioner 採用主備部署模式,兩個副本需調度至不同節點以滿足反親和性要求。單節點叢集無法滿足此調度條件,導致第二個副本處於 Pending 狀態,影響升級完整性。

    • 解決方案:為叢集至少新增一個節點,確保多副本可正常調度。

  • 情境2

    • 問題原因:csi-provisioner 需要訪問節點的執行個體中繼資料以擷取執行個體ID、地區等資訊,用於調用阿里雲API。若節點啟用了安全強化模式或配置了嚴格的網路原則,可能阻斷對中繼資料服務的訪問。

    • 解決方案:調整或關閉節點上的安全強化策略,確保 Pod 能夠訪問中繼資料服務。同時檢查安全性群組規則、作業系統防火牆或相關的安全指令碼設定。

StorageClass屬性變更導致csi-provisioner組件升級失敗

問題現象

csi-provisioner 安裝或升級的前置檢查失敗,提示StorageClass 屬性不符合預期。

問題原因

ACK 提供的預設 StorageClass具有固定配置,其核心欄位(如 provisioner 和 parameters)不可變更。若手動刪除並重建同名 StorageClass,將導致校正失敗,從而中斷組件升級流程。

CSI 安裝程式嚴格校正這些資源的完整性,以保證組件行為一致性。

解決方案

  1. 刪除叢集中的預設StorageClass,包括alicloud-disk-essd、alicloud-disk-available、alicloud-disk-efficiency、alicloud-disk-ssd、alicloud-disk-topology。

    此操作不會影響已有 PV 和 PVC 的正常使用。
  2. 刪除後重新安裝csi-provisioner。安裝後,系統會自動重新建立StorageClass,無需額外處理。

如需自訂StorageClass,請務必建立新名稱的 StorageClass,避免修改或重建預設 StorageClass。

聯絡我們

如需申請手動升級保障,請使用DingTalk搜尋DingTalk群號35532895加入DingTalk群諮詢。

相關文檔