卷佈建

概觀

卷佈建涉及使用預設的 directpv-min-io 儲存類別或具有 directpv-min-io 佈建程式的自訂儲存類別來建立 PersistentVolumeClaim。儲存類別具有卷綁定模式 WaitForFirstConsumer。此模式會延遲卷綁定和 PersistentVolume 的佈建,直到建立使用 PersistentVolumeClaimPod 為止。

DirectPV 會選取或佈建符合 Pod 排程限制所指定拓樸的 PersistentVolumes。這些限制包括但不限於資源需求、節點選擇器、Pod 親和性和反親和性,以及污點和容忍度。使用卷的 Pod 會排程到卷已排程的節點上。這可確保對 Pod 的高效能資料存取。

處於 Ready 狀態的 DirectPV 卷表示該卷已準備好綁定到 Pod。綁定後,卷會設定為 Bound 狀態。

建立持久卷請求

必須在 PersistentVolumeClaim 規格中定義具有特定參數的 PersistentVolume 請求。

這些參數是

參數
volumeMode 檔案系統
storageClassName directpv-min-io 或任何具有 directpv-min-io 佈建程式的儲存類別名稱
accessModes [ "ReadWriteOnce" ]

以下範例是從 directpv-min-io 儲存類別為 sleep-pvc PVC 請求 8MiB 儲存空間

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sleep-pvc
spec:
  volumeMode: Filesystem
  storageClassName: directpv-min-io
  accessModes: [ "ReadWriteOnce" ]
  resources:
    requests:
      storage: 8Mi

對於 WaitForFirstConsumer 卷綁定模式,必須定義使用 sleep-pvc 的 Pod。以下範例是使用掛載在 /mnt 上的 sleep-volume

apiVersion: v1
kind: Pod
metadata:
  name: sleep-pod
spec:
  volumes:
    - name: sleep-volume
      persistentVolumeClaim:
        claimName: sleep-pvc
  containers:
    - name: sleep-container
      image: example.org/test/sleep:v0.0.1
      volumeMounts:
        - mountPath: "/mnt"
          name: sleep-volume

在 StatefulSet 中建立持久卷請求

必須在 volumeClaimTemplates 規格中定義具有特定參數的 PV 請求。

這些參數是

參數
storageClassName directpv-min-io 或任何具有 directpv-min-io 佈建程式的儲存類別名稱
accessModes [ "ReadWriteOnce" ]

以下範例是從 directpv-min-io 儲存類別為兩個 minio Pod 的 minio-data-1minio-data-2 PVC 請求兩個 16MiB 儲存空間

kind: Service
apiVersion: v1
metadata:
  name: minio
  labels:
    app: minio
spec:
  selector:
    app: minio
  ports:
    - name: minio
      port: 9000

---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: minio
  labels:
    app: minio
spec:
  serviceName: "minio"
  replicas: 2
  selector:
    matchLabels:
      app: minio
  template:
    metadata:
      labels:
        app: minio
        directpv.min.io/organization: minio
        directpv.min.io/app: minio-example
        directpv.min.io/tenant: tenant-1
    spec:
      containers:
      - name: minio
        image: minio/minio
        env:
        - name: MINIO_ACCESS_KEY
          value: minio
        - name: MINIO_SECRET_KEY
          value: minio123
        volumeMounts:
        - name: minio-data-1
          mountPath: /data1
        - name: minio-data-2
          mountPath: /data2
        args:
        - "server"
        - "http://minio-{0...1}.minio.default.svc.cluster.local:9000/data{1...2}"
  volumeClaimTemplates:
  - metadata:
      name: minio-data-1
    spec:
      storageClassName: directpv-min-io
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 16Mi
  - metadata:
      name: minio-data-2
    spec:
      storageClassName: directpv-min-io
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 16Mi

延伸閱讀