本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

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-pdkubernetes.io/aws-ebs,並使用來自儲存後端的相應 CSI 驅動程式。如果 CSI 遷移正常運作,Kubernetes 終端使用者不應注意到任何差異。現有的 StorageClassPersistentVolumePersistentVolumeClaim 物件應繼續運作。當 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-Managerstorage_operation_duration_seconds新的標籤 migrated 已新增到指標,以指示此儲存操作是否為 CSI 遷移操作(字串值 true 表示已啟用,false 表示未啟用)。
Kubeletcsi_operations_seconds新指標公開了標籤,包括 driver_namemethod_namegrpc_status_codemigrated。這些標籤的含義與 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 本身中可用一樣。

時間表/狀態是什麼?

下表顯示了每個驅動程式的目前和目標發布版本

驅動程式AlphaBeta(樹狀結構內已棄用)Beta(預設啟用)GA目標“樹狀結構內外掛程式”移除
AWS EBS1.141.171.231.24 (目標)1.26 (目標)
GCE PD1.141.171.231.24 (目標)1.26 (目標)
OpenStack Cinder1.141.181.211.24 (目標)1.26 (目標)
Azure Disk1.151.191.231.24 (目標)1.26 (目標)
Azure File1.151.211.24 (目標)1.25 (目標)1.27 (目標)
vSphere1.181.191.24 (目標)1.25 (目標)1.27 (目標)
Ceph RBD1.23
Portworx1.23

以下儲存驅動程式將不支援 CSI 遷移。ScaleIO 驅動程式已移除;其他驅動程式已棄用,將從核心 Kubernetes 中移除。

驅動程式已棄用程式碼移除
ScaleIO1.161.22
Flocker1.221.25 (目標)
Quobyte1.221.25 (目標)
StorageOS1.221.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)。我們正在快速成長,並且隨時歡迎新的貢獻者。