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

创建 StorageClass

  1. 创建并复制以下内容到storage-class-csi.yaml中。
    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: Delete
    volumeBindingMode: Immediate
  2. 执行如下命令,创建StorageClass。
    kubectl apply -f storage-class-csi.yaml
说明 参数说明:
  • provisioner:配置为 diskplugin.csi.alibabacloud.com,标识StorageClass使用阿里云云盘 provisioner 插件创建。
  • type:标识云盘类型,支持 cloud、cloud_efficiency、cloud_ssd、cloud_essd、available 五种类型;其中 available 会对高效、ESSD、SSD依次尝试创建,直到创建成功。
  • regionid:可选参数。期望创建云盘的区域。
  • reclaimPolicy:云盘的回收策略,默认为Delete,支持Retain。如果数据安全性要求高,推荐使用Retain方式以免误删。
  • zoneid:可选参数。期望创建云盘的可用区。如果是多可用区的情况,使用topology方式创建PV。
  • encrypted:可选参数。创建的云盘是否加密,默认情况是false,创建的云盘不加密。

创建PVC/PV

下面为创建动态卷PV的示例YAML模板:

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

提供默认StorageClass:

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

集群默认提供了下面几种 StorageClass,可以在单可用区类型的集群中使用。
  • alicloud-disk-efficiency:高效云盘。
  • alicloud-disk-ssd:SSD云盘。
  • alicloud-disk-essd:ESSD云盘。
  • alicloud-disk-available:提供高可用选项,优先创建高效云盘。

    如果相应可用区的高效云盘资源售尽,则优先创建SSD盘;如果SSD也售尽,则创建ESSD盘。

创建应用

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"
  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