本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 1.24:卷填充器(Volume Populators)進階至 Beta
卷填充器(Volume Populators)特性已經發布了兩個版本,現在進入了 Beta 階段!在 Kubernetes v1.24 中,`AnyVolumeDataSource` 特性門控預設啟用,這意味著使用者可以將任何自定義資源指定為 PVC 的資料來源。
在之前的一篇部落格文章中詳細介紹了卷填充器特性是如何工作的。簡而言之,叢集管理員可以在叢集中安裝一個 CRD 和相關的填充器控制器,任何可以建立該 CR 例項的使用者都可以利用該填充器建立預填充的卷。
可以為不同目的並排安裝多個填充器。SIG-storage 社群已經看到一些公開的實現,更多的原型應該很快就會出現。
強烈建議叢集管理員在安裝任何填充器之前,先安裝 volume-data-source-validator 控制器和相關的 `VolumePopulator` CRD,這樣使用者就可以獲得關於無效 PVC 資料來源的反饋。
新特性
用於構建填充器的 lib-volume-populator 庫現在包含了指標,以幫助運維人員監控和檢測問題。該庫現在是 Beta 版,最新版本為 v1.0.1。
volume data source validator 控制器也添加了指標支援,並且處於 Beta 階段。`VolumePopulator` CRD 是 Beta 版,最新版本為 v1.0.1。
試一試
要了解其工作原理,你可以安裝示例 “hello” 填充器並嘗試一下。
首先安裝 volume-data-source-validator 控制器。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/client/config/crd/populator.storage.k8s.io_volumepopulators.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/deploy/kubernetes/rbac-data-source-validator.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/deploy/kubernetes/setup-data-source-validator.yaml
接下來安裝示例填充器。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/lib-volume-populator/v1.0.1/example/hello-populator/crd.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/lib-volume-populator/87a47467b86052819e9ad13d15036d65b9a32fbb/example/hello-populator/deploy.yaml
你的叢集現在有了一個新的 CustomResourceDefinition,它提供了一個名為 Hello 的測試 API。建立一個 `Hello` 自定義資源的例項,並帶有一些文字。
apiVersion: hello.example.com/v1alpha1
kind: Hello
metadata:
name: example-hello
spec:
fileName: example.txt
fileContents: Hello, world!
建立一個 PVC,將該 CR 作為其資料來源。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
dataSourceRef:
apiGroup: hello.example.com
kind: Hello
name: example-hello
volumeMode: Filesystem
接下來,執行一個讀取 PVC 中檔案的 Job。
apiVersion: batch/v1
kind: Job
metadata:
name: example-job
spec:
template:
spec:
containers:
- name: example-container
image: busybox:latest
command:
- cat
- /mnt/example.txt
volumeMounts:
- name: vol
mountPath: /mnt
restartPolicy: Never
volumes:
- name: vol
persistentVolumeClaim:
claimName: example-pvc
等待作業完成(包括其所有依賴項)。
kubectl wait --for=condition=Complete job/example-job
最後檢查作業的日誌。
kubectl logs job/example-job
輸出應為
Hello, world!
請注意,該卷已經包含了一個文字檔案,其內容是來自 CR 的字串。這只是最簡單的例子。實際的填充器可以設定卷以包含任意內容。
如何編寫自己的卷填充器
鼓勵有興趣編寫新填充器的開發人員使用 lib-volume-populator 庫,並且只提供一個圍繞該庫的小型控制器包裝器,以及一個能夠附加到卷並將適當資料寫入卷的 Pod 映象。
單個填充器可以非常通用,以至於它們可以與每種型別的 PVC 一起工作,或者如果卷是由同一供應商的特定 CSI 驅動程式配置的,它們可以執行供應商特定的操作來快速填充卷的資料,例如,透過直接與該卷的儲存進行通訊。
我如何瞭解更多資訊?
增強提案 卷填充器 包含了大量關於此特性歷史和技術實現的細節。
關於持久卷的文件主題中的卷填充器和資料來源部分,解釋瞭如何在你的叢集中使用此特性。
請加入 Kubernetes 儲存 SIG,幫助我們增強此特性。我們已經有很多好點子,並且非常歡迎更多人的參與!