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

创建 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、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,创建的云盘不加密。

创建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也售尽,则创建ESSD盘。

使用云盘创建多实例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/v1beta2
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

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