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

创建指定zoneid的StorageClass

  1. 创建并复制以下内容到storage-class.yaml中。
    kind: StorageClass
    apiVersion: storage.k8s.io/v1beta1
    metadata:
      name: alicloud-disk-ssd-hangzhou-b
    provisioner: alicloud/disk
    parameters:
      type: cloud_ssd
      regionid: cn-hangzhou
      zoneid: cn-hangzhou-b
    reclaimPolicy: Retain
  2. 执行以下命令,创建StorageClass。
    kubectl apply -f storage-class.yaml
说明 参数说明:
  • provisioner:配置为 alicloud/disk,标识StorageClass 使用阿里云云盘provisioner插件创建。
  • type:标识云盘类型,支持cloud_efficiency、cloud_ssd、cloud_essd、available四种参数,其中available会对ESSD、SSD、高效云盘依次尝试创建,直到创建成功。
  • regionid:期望创建云盘的区域。
  • reclaimPolicy:云盘的回收策略,默认为Delete,支持Retain。如果数据安全性要求高,推荐使用Retain方式以免误删。
  • zoneid:期望创建云盘的可用区。
    如果是多可用区的情况,zoneid可同时配置多个,示例如下:
    zoneid: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
  • encrypted:可选参数。创建的云盘是否加密,默认情况是false,创建的云盘不加密。

创建延迟绑定的StroageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: alicloud-disk-topology-ssd
provisioner: alicloud/disk
parameters:
    type: cloud_ssd
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
说明
  • 如果配置的StorageClass没有WaitForFirstConsumer,且没有配置zoneid,这时创建的PV和Disk-Controller组件所在节点的zone是一样的。
  • 如果配置的StorageClass没有WaitForFirstConsumer,但是配置了zoneid,这时创建的PV会根据zoneid的配置,轮询使用其中的zoneid。
  • 如果使用WaitForFirstConsumer,会根据消费此PVC的Pod所调度的节点创建云盘,即在Pod调度的可用区创建云盘。

创建PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: disk-ssd
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: alicloud-disk-ssd-hangzhou-b
  resources:
    requests:
      storage: 20Gi
---
kind: Pod
apiVersion: v1
metadata:
  name: disk-pod-ssd
spec:
  containers:
  - name: disk-pod
    image: nginx
    volumeMounts:
      - name: disk-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: disk-pvc
      persistentVolumeClaim:
        claimName: disk-ssd

默认选项:

在多可用区的集群中,需要您手动创建上述StorageClass,这样可以更准确的定义所需要云盘的可用区信息。

集群默认提供了以下几种StorageClass,可以在单可用区类型的集群中使用。
  • alicloud-disk-efficiency:高效云盘。
  • alicloud-disk-ssd:SSD云盘。
  • alicloud-disk-essd:ESSD云盘。
  • alicloud-disk-available:提供高可用选项,优先创建SSD云盘;如果SSD云盘售尽,则创建高效云盘。
    注意 对于alicloud-disk-controller v1.14.8.44-c23b62c5-aliyun之前的版本,优先创建ESSD云盘;如果ESSD云盘售尽,则创建SSD云盘;如果SSD云盘售尽,则创建高效云盘。
  • alicloud-disk-topology: 使用延迟绑定的方式创建云盘。

使用云盘创建多实例StatefulSet

使用volumeClaimTemplates的方式来创建,这样会动态创建多个PVC和PV并绑定。

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"
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: disk-ssd
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: disk-ssd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alicloud-disk-ssd-hangzhou-b"
      resources:
        requests:
          storage: 20Gi

您也可以通过控制台的方式使用动态云盘卷,请参见通过控制台使用动态云盘卷