Kubernetes 中的 StorageClass 和動態卷供給

存儲是容器運行環境的重要一環,Kubernetes 提供了一些用於存儲管理的基礎能力。動態卷供給是一個 Kubernetes 獨有的功能,這一功能允許按需創建存儲卷。在沒有這種能力之前,集羣管理員需要打電話給他們的雲或者存儲提供者來創建新的存儲卷,成功以後再創建 PersistentVolume對象,才能夠在 Kubernetes 中使用。動態卷供給能力讓管理員不必進行預先創建存儲卷,而是隨用戶需求進行創建。這一特性在 1.2 版本中處於 α 階段,在 版本 1.4 中提升爲 β。這一版本提高了動態卷的彈性和可用性。

新特性

Alpha 版本的動態卷,一個集羣同時只能允許單獨的、被硬編碼的提供者。也就是說,如果 Kubernetes 要提供動態卷的時候,即使集羣中可以使用多個存儲系統,Kubernetes 也只會使用同一個存儲卷插件。存儲提供者的選型是基於雲環境類型決定的 —— AWS 的 EBS,Google Cloud 的 Persistent Disk 或者是 OpenStack 的 Cinder,以及 vSphere 的 vSphere Volume。另外只有容量參數可以配置。這就意味着,即使有其他參數可用,所有的動態卷除了尺寸大小,其他都是一樣的。

因爲只有容量是大家都有的吧。。。

雖說這一功能的 Alpha 版本實用性有限,這畢竟是邁出了一步,有助於確定今後的發展方向。

Kubernetes 1.4 中加入了一個 新的 API 對象 StorageClass,可以定義多個 StorageClass 對象,並可以分別指定存儲插件、設置參數,用於提供不同的存儲卷。這樣的設計讓集羣管理員能夠在同一個集羣內,定義和提供不同類型的、不同參數的卷(相同或者不同的存儲系統)。這樣的設計還確保了最終用戶在無需瞭解太多的情況下,有能力選擇不同的存儲選項。

如何使用

下面是一個例子,管理員提供了兩種存儲,用戶可以選擇其中一個使用。細節可以查看 手冊 以及示例 文檔

管理員配置

集羣管理員定義併發布了兩個 StorageClass 對象

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
 name: slow
provisioner: kubernetes.io/gce-pd
parameters:
 type: pd-standard

這一段創建了一個名爲 “slow” 的 StorageClass,用於提供標準的持久存儲。

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
 name: fast
provisioner: kubernetes.io/gce-pd
parameters:
 type: pd-ssd

這一段創建了一個名爲 “fast” 的 StorageClass,用於提供類似 SSD 的持久存儲。

用戶請求

用戶在 PersistentVolumeClaim 中可以包含一個 StorageClass 申請動態提供存儲。這一任務需要使用 volume.beta.kubernetes.io/storage-class 註解來完成。這一註解的值必須符合管理員配置的 StorageClass 名稱。

要選擇 “fast” 存儲類,用戶需要創建如下的 PVC:

 { "kind": "PersistentVolumeClaim", "apiVersion": "v1", "metadata": { "name": "claim1", "annotations": { "volume.beta.kubernetes.io/storage-class": "fast" } }, "spec": { "accessModes": [ "ReadWriteOnce" ], "resources": { "requests": { "storage": "30Gi" } } } }

上述報文會提供一個等效於 SSD 的持久盤,當這個 PVC 被刪除,這個卷也隨之銷燬。

缺省行爲

所有的 PVC 都可以在不使用 StorageClass 註解的情況下,直接使用某個動態存儲。把一個StorageClass 對象標記爲 “default” 就可以了。StorageClass 用註解storageclass.beta.kubernetes.io/is-default-class 就可以成爲缺省存儲。

有了缺省的 StorageClass,用戶創建 PVC 就不用 storage-class 的註解了,1.4 中新加入的DefaultStorageClass 准入控制器會自動把這個標註指向缺省存儲類。

我還能使用 Alpha 版本麼?

Kubernetes 1.4 兼容 alpha 版本的動態卷特性,讓用戶能夠平滑過渡到 beta 版本。用volume.alpha.kubernetes.io/storage-class 註解來標註 alpha 版本。

在未來版本中將會棄用 Alpha 版本。

下一步?

動態卷功能會持續發展,下面是一些要點。

標準雲支持

如果 Kubernetes 集羣部署在雲服務商,我們 考慮 自動使用雲的本地存儲系統創建一個動態卷供給者。例如在 AWS 上的標準部署會得到一個 EBS 的動態卷供給,而 Google Cloud 的部署則會提供一個 GCE PD 動態卷供應者。我們還在討論是否應該把這種卷作爲缺省卷。

本文轉自中文社區-Kubernetes 中的 StorageClass 和動態卷供給

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章