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

Kubernetes 1.24:Volume Populators 晉升 Beta 版

volume populators 功能現已發布兩個版本,並進入 beta 階段!AnyVolumeDataSource 功能閘道在 Kubernetes v1.24 中預設為啟用,這表示使用者可以將任何自訂資源指定為 PVC 的資料來源。

一篇先前的部落格文章詳細說明了 volume populators 功能的運作方式。簡而言之,叢集管理員可以在叢集中安裝 CRD 和相關聯的 populator 控制器,任何可以建立 CR 實例的使用者都可以透過利用 populator 來建立預先填充的磁碟區。

可以並排安裝多個 populator 以用於不同目的。SIG storage 社群已經在公開場合看到一些實作,並且很快就會出現更多原型。

強烈建議叢集管理部門在安裝任何 populator 之前,先安裝 volume-data-source-validator 控制器和相關聯的 VolumePopulator CRD,以便使用者可以獲得有關無效 PVC 資料來源的回饋。

新功能

建構 populator 的 lib-volume-populator 程式庫現在包含指標,以協助運營商監控和偵測問題。此程式庫現在為 beta 版,最新版本為 v1.0.1。

volume data source validator 控制器也新增了指標支援,並且處於 beta 階段。VolumePopulator CRD 處於 beta 階段,最新版本為 v1.0.1。

試用

若要查看其運作方式,您可以安裝範例「hello」populator 並試用。

首先安裝 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

接下來安裝範例 populator。

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

接下來,執行一個 Job,讀取 PVC 中的檔案。

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

等待 job 完成 (包括其所有相依性)。

kubectl wait --for=condition=Complete job/example-job

最後檢查 job 的記錄。

kubectl logs job/example-job

輸出應為

Hello, world!

請注意,磁碟區已包含一個文字檔,其中包含來自 CR 的字串內容。這只是最簡單的範例。實際的 populator 可以設定磁碟區以包含任意內容。

如何編寫自己的 volume populator

鼓勵有興趣編寫新 populator 的開發人員使用 lib-volume-populator 程式庫,並且僅需在程式庫周圍提供一個小型控制器包裝器,以及一個能夠連接到磁碟區並將適當資料寫入磁碟區的 pod 映像。

個別的 populator 可能非常通用,以至於它們可以與每種類型的 PVC 搭配使用,或者如果磁碟區是由同一供應商的特定 CSI 驅動程式佈建的,它們可以執行供應商特定的操作以快速用資料填滿磁碟區,例如,透過直接與該磁碟區的儲存裝置通訊。

如何了解更多資訊?

增強提案 Volume Populators 包含有關此功能的歷史和技術實作的許多詳細資訊。

Volume populators 和資料來源,在關於持久磁碟區的文件主題中,說明如何在您的叢集中使用此功能。

請加入 Kubernetes storage SIG 以協助我們增強此功能,藉此參與其中。已經有很多很棒的想法,我們很樂意有更多!