使用动态存储卷需要您手动创建StorageClass,并在PVC中通过storageClassName来指定期望的云盘类型。

前提条件

在使用动态云盘卷前,请确保您已经完成以下操作。

背景信息

有关StorageClass的详细说明,请参见存储类(StorageClass)

创建StorageClass

您可以根据不同的场景通过以下两种方式创建StorageClass。
  • 使用Topology(延迟绑定)方式创建StorageClass。

    在多可用区集群场景下,延迟绑定可以优化ECS和云盘不在一个可用区的问题。以下通过部署名为storage-class-csi-topology.yaml文件为例,创建StorageClass。

    1. 创建storage-class-topology.yaml文件。
    2. 拷贝以下模板至文件中。
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
          name: alicloud-disk-topology-ssd
      provisioner: diskplugin.csi.alibabacloud.com
      parameters:
          type: cloud_ssd
      reclaimPolicy: Retain
      volumeBindingMode: WaitForFirstConsumer
      allowVolumeExpansion: true
      参数 说明
      provisioner 配置为diskplugin.csi.alibabacloud.com。标识StorageClass使用阿里云云盘provisioner插件创建。
      type 标识云盘类型,支持cloud_efficiency、cloud_ssd、cloud_essd、available四种参数,其中available会对ESSD、SSD、高效依次尝试创建,直到创建成功。
      说明 部分ECS机型不支持ESSD云盘挂载,请参见块存储FAQ
      注意
      reclaimPolicy 云盘的回收策略,默认为Delete,支持Retain。
      • Delete模式:删除PVC的时候,PV和云盘会一起删除。
      • Retain模式:删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。

      如果数据安全性要求高,推荐使用Retain方式以免误删数据。

      encrypted 可选参数,标识创建的云盘是否加密。默认情况是false,创建的云盘不加密。
      volumeBindingMode WaitForFirstConsumer时表示使用延迟绑定,即调度器先调度pod,并根据pod的可用区信息创建云盘。
      allowVolumeExpansion 配置为true时,可以实现云盘的自动扩容。
    3. 执行以下命令创建StorageClass。
      kubectl apply -f storage-class-topology.yaml
  • 如果您先创建云盘,再创建Pod。您也可以通过以下方式创建StorageClass。
    1. 创建storage-class-csi.yaml文件。
    2. 拷贝以下模板至文件中。
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: alicloud-disk-ssd-b
      provisioner: diskplugin.csi.alibabacloud.com
      parameters:
        type: cloud_ssd
        regionId: cn-shenzhen
        zoneId: cn-shenzhen-b
      reclaimPolicy: Retain
      allowVolumeExpansion: true
      volumeBindingMode: Immediate
      参数 说明
      provisioner 配置为diskplugin.csi.alibabacloud.com。标识StorageClass使用阿里云云盘provisioner插件创建。
      type 标识云盘类型,支持cloud_efficiency、cloud_ssd、cloud_essd、available四种参数,其中available会对ESSD、SSD、高效依次尝试创建,直到创建成功。
      说明 部分ECS机型不支持ESSD云盘挂载,请参见块存储FAQ
      注意
      regionId 可选参数。期望创建云盘的区域。
      zoneId 可选参数。期望创建云盘的可用区。
      reclaimPolicy 云盘的回收策略,默认为Delete,支持Retain。
      • Delete模式:删除PVC的时候,PV和云盘会一起删除。
      • Retain模式:删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。

      如果数据安全性要求高,推荐使用Retain方式以免误删数据。

      encrypted 可选参数,标识创建的云盘是否加密。默认情况是false,创建的云盘不加密。
    3. 执行以下命令,创建StorageClass。
      kubectl apply -f storage-class-csi.yaml

创建PVC/PV

以下模板为创建动态卷PV的示例YAML。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: disk-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 25Gi
  storageClassName: alicloud-disk-ssd
说明 storage:定义申请云盘大小,最小为20GiB。

创建应用

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: pvc-disk
          mountPath: /data
      volumes:
        - name: pvc-disk
          persistentVolumeClaim:
            claimName: disk-pvc