本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 1.23:Kubernetes 內部樹狀結構到 CSI 磁碟區遷移狀態更新
Kubernetes 樹狀結構內儲存外掛程式到 容器儲存介面 (CSI) 遷移基礎架構自 v1.17 以來已成為 beta 版本。CSI 遷移在 Kubernetes v1.14 中以 alpha 版本引入。
從那時起,SIG Storage 和其他 Kubernetes 特殊興趣小組一直致力於確保功能穩定性和相容性,以為 GA 做準備。本文旨在提供有關該功能的狀態更新,以及 Kubernetes 1.17 和 1.23 之間的變更。此外,我也將介紹每個儲存外掛程式的 CSI 遷移功能 GA 的未來藍圖。
快速回顧:什麼是 CSI 遷移,以及為何遷移?
容器儲存介面 (CSI) 旨在協助 Kubernetes 取代其現有的樹狀結構內儲存驅動程式機制 - 尤其是供應商特定的外掛程式。Kubernetes 對 容器儲存介面 的支援自 Kubernetes v1.13 以來已 普遍可用。引入對使用 CSI 驅動程式的支援,是為了更輕鬆地新增和維護 Kubernetes 和儲存後端技術之間的新整合。使用 CSI 驅動程式可以提高可維護性(驅動程式作者可以定義自己的發布週期和支援生命週期),並降低漏洞的機會(由於樹狀結構內程式碼較少,因此錯誤風險降低,並且叢集運營商可以僅選擇其叢集所需的儲存驅動程式)。
隨著更多 CSI 驅動程式被建立並變得適用於生產環境,SIG Storage 小組希望所有 Kubernetes 使用者都能從 CSI 模型中受益。但是,我們不能破壞與現有儲存 API 類型的 API 相容性。我們提出的解決方案是 CSI 遷移:一種將樹狀結構內 API 轉換為等效 CSI API,並將操作委派給替換 CSI 驅動程式的功能。
CSI 遷移工作使替換現有的樹狀結構內儲存外掛程式成為可能,例如 kubernetes.io/gce-pd
或 kubernetes.io/aws-ebs
,並使用來自儲存後端的相應 CSI 驅動程式。如果 CSI 遷移正常運作,Kubernetes 終端使用者不應注意到任何差異。現有的 StorageClass
、PersistentVolume
和 PersistentVolumeClaim
物件應繼續運作。當 Kubernetes 叢集管理員更新叢集以啟用 CSI 遷移時,使用 PVC 的現有工作負載(由樹狀結構內儲存外掛程式支援)將繼續像往常一樣運作。但是,在幕後,Kubernetes 將所有儲存管理操作的控制權(先前針對樹狀結構內驅動程式)移交給 CSI 驅動程式。
例如,假設您是 kubernetes.io/gce-pd
使用者,在 CSI 遷移之後,您仍然可以使用 kubernetes.io/gce-pd
來佈建新卷、掛載現有的 GCE-PD 卷或刪除現有的卷。所有現有的 API/介面仍將正常運作。但是,底層函數調用都將透過 GCE PD CSI 驅動程式 而不是樹狀結構內 Kubernetes 函數。
這為終端使用者實現了平穩過渡。此外,作為儲存外掛程式開發人員,我們可以減輕維護樹狀結構內儲存外掛程式的負擔,並最終將它們從核心 Kubernetes 二進位檔案中移除。
已變更了什麼,以及有哪些新功能?
基於 Kubernetes v1.17 及更早版本中所做的工作,此後的發布版本進行了一系列變更
新功能閘道
Kubernetes v1.21 版本已棄用 CSIMigration{provider}Complete
功能標誌,並且不再遵循它們。取而代之的是名為 InTreePlugin{vendor}Unregister
的新功能標誌,它們取代了舊的功能標誌,並保留了 CSIMigration{provider}Complete
提供的所有功能。
CSIMigration{provider}Complete
之前作為補充功能閘道引入,一旦在所有節點上啟用 CSI 遷移。此標誌會取消註冊您使用標誌名稱的 {provider}
部分指定的樹狀結構內儲存外掛程式。
當您啟用該功能閘道時,您的叢集會直接選擇並使用相關的 CSI 驅動程式,而不是使用樹狀結構內驅動程式程式碼。發生這種情況時,不會檢查節點上是否啟用了 CSI 遷移,或者您是否實際部署了該 CSI 驅動程式。
雖然此功能閘道是一個很好的幫手,但 SIG Storage(我相信還有許多叢集運營商)也希望有一個功能閘道可以讓您禁用樹狀結構內儲存外掛程式,即使不啟用 CSI 遷移也是如此。例如,您可能想要在 GCE 叢集上禁用 EBS 儲存外掛程式,因為 EBS 卷特定於不同供應商的雲端 (AWS)。
為了實現這一點,Kubernetes v1.21 引入了一組新的功能標誌:InTreePlugin{vendor}Unregister
。
InTreePlugin{vendor}Unregister
是一個獨立的功能閘道,可以獨立於 CSI 遷移啟用和禁用。啟用後,組件將不會將特定的樹狀結構內儲存外掛程式註冊到支援的清單中。如果叢集運營商僅啟用此標誌,則終端使用者在使用該外掛程式時將從 PVC 收到錯誤訊息,指出找不到該外掛程式。如果叢集運營商不希望支援舊版樹狀結構內 API,而僅支援 CSI 的未來發展,則可能希望無論 CSI 遷移如何都啟用此標誌。
可觀察性
Kubernetes v1.21 引入了 指標,用於追蹤 CSI 遷移。您可以使用這些指標來觀察您的叢集如何使用儲存服務,以及對該儲存的存取是使用舊版樹狀結構內驅動程式還是其基於 CSI 的替換。
組件 | 指標 | 注意事項 |
---|---|---|
Kube-Controller-Manager | storage_operation_duration_seconds | 新的標籤 migrated 已新增到指標,以指示此儲存操作是否為 CSI 遷移操作(字串值 true 表示已啟用,false 表示未啟用)。 |
Kubelet | csi_operations_seconds | 新指標公開了標籤,包括 driver_name 、method_name 、grpc_status_code 和 migrated 。這些標籤的含義與 csi_sidecar_operations_seconds 相同。 |
CSI Sidecars(佈建器、附加器、調整器) | csi_sidecar_operations_seconds | 新的標籤 migrated 已新增到指標,以指示此儲存操作是否為 CSI 遷移操作(字串值 true 表示已啟用,false 表示未啟用)。 |
錯誤修復和功能改進
在我們的 beta 測試人員的幫助下,我們修復了許多錯誤,例如懸空附件、垃圾收集、不正確的拓撲標籤。
雲端供應商 && 叢集生命週期協作
SIG Storage 一直與 SIG Cloud Provider 和 SIG Cluster Lifecycle 密切合作,以推出 CSI 遷移。
如果您是託管 Kubernetes 服務的使用者,請諮詢您的供應商是否需要執行任何操作。在許多情況下,供應商將管理遷移,並且不需要額外的工作。
如果您使用 Kubernetes 發行版,請查看其官方文件以獲取有關此功能支援的資訊。為了使 CSI 遷移功能升級到 GA,SIG Storage 和 SIG Cluster Lifecycle 正在協作,以使遷移機制在工具(例如 kubeadm)中可用,就像它們在 Kubernetes 本身中可用一樣。
時間表/狀態是什麼?
下表顯示了每個驅動程式的目前和目標發布版本
驅動程式 | Alpha | Beta(樹狀結構內已棄用) | Beta(預設啟用) | GA | 目標“樹狀結構內外掛程式”移除 |
---|---|---|---|---|---|
AWS EBS | 1.14 | 1.17 | 1.23 | 1.24 (目標) | 1.26 (目標) |
GCE PD | 1.14 | 1.17 | 1.23 | 1.24 (目標) | 1.26 (目標) |
OpenStack Cinder | 1.14 | 1.18 | 1.21 | 1.24 (目標) | 1.26 (目標) |
Azure Disk | 1.15 | 1.19 | 1.23 | 1.24 (目標) | 1.26 (目標) |
Azure File | 1.15 | 1.21 | 1.24 (目標) | 1.25 (目標) | 1.27 (目標) |
vSphere | 1.18 | 1.19 | 1.24 (目標) | 1.25 (目標) | 1.27 (目標) |
Ceph RBD | 1.23 | ||||
Portworx | 1.23 |
以下儲存驅動程式將不支援 CSI 遷移。ScaleIO 驅動程式已移除;其他驅動程式已棄用,將從核心 Kubernetes 中移除。
驅動程式 | 已棄用 | 程式碼移除 |
---|---|---|
ScaleIO | 1.16 | 1.22 |
Flocker | 1.22 | 1.25 (目標) |
Quobyte | 1.22 | 1.25 (目標) |
StorageOS | 1.22 | 1.25 (目標) |
下一步是什麼?
隨著更多 CSI 驅動程式升級到 GA,我們希望很快將整體 CSI 遷移功能標記為 GA。我們預計雲端供應商樹狀結構內儲存外掛程式程式碼移除將在 Kubernetes v1.26 和 v1.27 中發生。
作為使用者,我應該怎麼做?
請注意,Kubernetes 儲存系統的所有新功能(例如卷快照)都將僅新增到 CSI 介面。因此,如果您要啟動新的叢集、首次建立具狀態應用程式或需要這些新功能,我們建議原生使用 CSI 驅動程式(而不是樹狀結構內卷外掛程式 API)。請遵循 CSI 驅動程式的更新使用者指南,並使用新的 CSI API。
但是,如果您選擇向前滾動叢集或繼續使用具有舊版卷 API 的規範,CSI 遷移將確保我們繼續使用新的 CSI 驅動程式支援這些部署。但是,如果您想利用快照等新功能,則需要手動遷移以將現有的樹狀結構內 PV 重新匯入為 CSI PV。
我該如何參與?
Kubernetes Slack 頻道 #csi-migration 以及任何標準的 SIG Storage 通訊頻道 都是聯繫 SIG Storage 和遷移工作小組的絕佳媒介。
這個專案與所有 Kubernetes 專案一樣,是來自不同背景的眾多貢獻者共同努力的成果。我們衷心感謝在過去幾個季度挺身而出,協助推動專案前進的貢獻者
- Michelle Au (msau42)
- Jan Šafránek (jsafrane)
- Hemant Kumar (gnufied)
特別感謝以下人員對 CSI 遷移功能進行了富有洞察力的審查、周全的考慮和寶貴的貢獻
- Andy Zhang (andyzhangz)
- Divyen Patel (divyenpatel)
- Deep Debroy (ddebroy)
- Humble Devassy Chirammal (humblec)
- Jing Xu (jingxu97)
- Jordan Liggitt (liggitt)
- Matthew Cary (mattcary)
- Matthew Wong (wongma7)
- Neha Arora (nearora-msft)
- Oksana Naumov (trierra)
- Saad Ali (saad-ali)
- Tim Bannister (sftim)
- Xing Yang (xing-yang)
那些有興趣參與 CSI 或 Kubernetes Storage 系統任何部分的設計和開發的人員,請加入 Kubernetes Storage 特殊興趣小組 (SIG)。我們正在快速成長,並且隨時歡迎新的貢獻者。