Kubernetes應用通常需要持久化儲存來儲存資料。ACK通過標準的容器儲存介面CSI,整合了多種阿里雲儲存服務(如雲端硬碟、OSS、NAS、CPFS等),併兼容Kubernetes原生儲存機制,為不同業務情境提供儲存解決方案。
儲存方案選型
ACK的儲存方案分為兩類:
Kubernetes原生儲存卷:用於臨時資料、組態管理或與節點的互動。生命週期通常與Pod綁定,不適用於需要持久化儲存應用資料的情境。
阿里雲持久化儲存卷:通過CSI組件整合,為工作負載提供穩定、可靠的資料持久化能力。生命週期獨立於Pod,可用於有狀態應用。
使用容器儲存功能前,確保已瞭解相關概念,如儲存卷、PV、PVC等,詳見儲存基礎知識。
Kubernetes 原生儲存卷
Kubernetes原生儲存卷的生命週期通常與Pod綁定,不適用於需要持久化儲存應用資料的情境。
類型 | 說明 | 核心特點 |
emptyDir | 與Pod生命週期相同的臨時空目錄。 | Pod刪除後資料即丟失。可用於Pod內容器間資料交換或臨時緩衝。 |
HostPath | 將節點宿主機上的檔案或目錄掛載到Pod中。可通過 詳見HostPath資料卷 | 資料與節點綁定,不隨Pod遷移。不適用於需要高可用和持久化儲存的有狀態應用(如資料庫、緩衝)。 |
ConfigMap/Secret | 以檔案形式掛載配置項或敏感憑據。 | 僅用於儲存小體積配置資料,非業務資料。用於將配置與應用解耦。 |
阿里雲持久化儲存卷
對於需要持久化儲存資料的有狀態應用,應選擇由阿里雲儲存服務提供的持久化儲存卷。這些儲存卷的生命週期獨立於Pod,通過CSI實現與Kubernetes的整合。
方案對比
為便於快速選型,表格中各儲存方案的標題下方提供了部分核心屬性的快速索引。以雲端硬碟為例:
雲端硬碟:方案詳細說明。單擊可查看詳情。靜態/動態:方案支援的儲存卷掛載方式,包括靜態儲存卷(PV/PVC)和動態儲存裝置卷(StorageClass/PVC)。單擊可查看具體操作文檔。
RWO:方案支援的儲存卷訪問模式(
accessModes),包括RWO(ReadWriteOnce)、RWX(ReadWriteMany)、ROX(ReadOnlyMany)。計費:方案計費說明。單擊可查看詳情。
儲存方案 | 說明 | 權衡與限制 |
|
| |
|
| |
RWX、ROX | 計費 |
|
|
|
| |
|
|
除基礎效能外,不同儲存方案在故障恢複、容量管理和資料保護等營運情境中也存在差異,可從以下幾個問題進一步規劃選型。
關鍵組件與概念
CSI組件(csi-plugin、csi-provisioner)
Kubernetes社區推薦的儲存外掛程式實現方案,已在叢集中預設部署。負責與阿里雲儲存服務的API進行互動,實現儲存卷的自動建立、掛載、卸載等全生命週期管理。詳見管理CSI組件。
容器網路檔案系統 (CNFS)
ACK託管叢集Pro版提供的儲存增強功能,將NAS、OSS、CPFS等抽象為Kubernetes CRD對象,提供更精細化的管理能力,如子目錄動態建立、配額管理、IO效能監控、資源回收筒、分布式緩衝等。詳見容器網路檔案系統CNFS。
使用說明
使用CSI時需注意以下使用限制。
叢集版本:需為1.14及以上。如需升級,請參見手動升級叢集。
叢集環境:已在ACK叢集中完成全面適配和驗證。對於非ACK叢集(非阿里環境叢集、阿里雲自建叢集),由於配置、許可權、網路等環境差異,CSI無法保證開箱即用。
建議參見alibaba-cloud-csi-driver源碼並結合自身環境進行適配。
節點配置:kubelet運行參數
--enable-controller-attach-detach為true。作業系統:不支援Windows節點。
RBAC許可權:PV是叢集層級的資源,PVC是命名空間層級的資源。進行RBAC授權時,需注意不同角色對這兩類資源的許可權差異。
如果ACK預設提供的預置角色(管理員、營運人員等)無法滿足需求,請配置自訂許可權。例如,ACK預設的營運人員角色對PVC有讀寫權限,但對PV僅有隻讀許可權,因此無法手動建立PV。詳見使用RBAC為叢集內資源操作授權。
FAQ
如何判斷叢集使用的儲存外掛程式模式?
可選擇以下方式查看。
通過控制台查看節點注釋
在ACK叢集列表頁面,單擊目的地組群名稱,在叢集詳情頁左側導覽列,選擇。
在節點列表的操作列,單擊詳情,在基本資料頁簽下查看節點注釋。
若存在
volumes.kubernetes.io/controller-managed-attach-detach: true,表示儲存外掛程式為CSI;若不存在,則為Flexvolume。
通過命令查看kubelet參數
登入節點,查看kubelet參數。
ps -ef | grep kubelet預期輸出:
--enable-controller-attach-detach=truetrue:儲存外掛程式為CSI。false:儲存外掛程式為Flexvolume。
如何手動為CSI授權?
CSI在執行儲存卷的掛載、卸載、建立、刪除等操作時,需要被授予訪問其他產品資源的相應許可權。通常情況下,叢集已預設安裝CSI且配置相關許可權。如需手動授權,可參見以下內容。
使用RAM角色授權(預設):CSI使用AliyunCSManagedCsiRole角色來訪問其他雲產品資源,詳見Container ServiceACK服務角色。
ACK託管叢集:CSI使用的RAM角色許可權的Token被儲存在名為addon.csi.token的Secret中。可掛載該Secret,從而實現RAM角色授權。
ACK專有叢集:CSI繼承其Pod所在節點的RAM角色。
關於如何為RAM角色授權,請參見管理RAM角色的許可權。
使用AccessKey授權
通過環境變數:將AccessKey建立為Kubernetes Secret,再通過環境變數的方式注入到CSI的Pod中,避免在部署模板中明文暴露密鑰。
直接寫入YAML:直接在CSI的YAML中寫入AccessKey資訊。不推薦在生產環境使用。