卷供应

概述

卷供应涉及使用默认的 directpv-min-io 存储类或具有 directpv-min-io 提供程序的自定义存储类来创建 PersistentVolumeClaim。存储类带有卷绑定模式 WaitForFirstConsumer。此模式会延迟卷绑定和 PersistentVolume 的供应,直到创建使用 PersistentVolumeClaimPod

DirectPV 选择或供应与 Pod 的调度约束指定的拓扑匹配的 PersistentVolumes。这些包括但不限于资源需求、节点选择器、Pod 亲和性和反亲和性以及污点和容忍度。使用卷的 Pod 会调度到已调度卷的节点。这确保了对 Pod 的高性能数据访问。

处于 Ready 状态的 DirectPV 卷表示该卷已准备好绑定到 Pod。绑定后,Bound 状态将设置为卷。

创建持久卷声明

必须在 PersistentVolumeClaim 规范中使用特定参数定义持久卷声明。

这些参数是

参数
volumeMode Filesystem
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-data-1minio-data-2 PVC 声明两个 16MiB 存储以用于两个 minio Pod 的示例

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

进一步阅读