ENS云盘是在边缘容器集群的ENS节点上使用的云盘。边缘容器集群支持使用CSI插件创建ENS云盘静态存储卷和ENS云盘动态存储卷。本文介绍如何在CSI插件中挂载ENS云盘静态存储卷和ENS云盘动态存储卷。

前提条件

  • 已创建边缘容器集群,具体操作,请参见创建边缘托管版集群
  • 已安装csi-ens-plugin和csi-ens-provisioner组件,具体操作,请参见管理组件
  • 已通过Kubectl连接Kubernetes集群。具体操作,请参见通过kubectl工具连接集群
  • 使用静态云盘时,请确保已创建按量付费的ENS云盘并记录云盘ID为d-wz92s6d95go6ki9x****

背景信息

动态云盘的使用场景:没有提前购买云盘,在应用部署时自动购买云盘的情况。

动态云盘的使用方式:
  • 手动创建PVC,在PVC中声明StorageClass。
  • 部署应用时通过StorageClass自动创建PV。

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

使用限制

  • ENS云盘为阿里云存储团队提供的非共享存储,只能同时被一个Pod挂载。
  • 边缘容器集群中与ENS云盘在同一地域的ENS节点才能挂载ENS云盘。
  • 不支持回收和删除ENS云盘。相关操作,需在ENS控制台操作。

使用ENS云盘静态存储卷

步骤一:创建PV

  1. 使用以下内容,创建pv-static.yaml文件。
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: csi-pv
      labels:
        alicloud-pvname: static-disk-pv
    spec:
      capacity:
        storage: 25Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ensplugin.csi.alibabacloud.com
        volumeHandle: "<your-disk-id>"
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.diskplugin.csi.alibabacloud.com/region
              operator: In
              values:
              - "<your-node-region-id>"
    参数 说明
    name PV的名称。
    labels 设置PV的标签。
    storage 云盘的可使用量。
    accessModes 设置访问模式。
    persistentVolumeReclaimPolicy PV的回收策略。
    driver 定义驱动类型。取值为diskplugin.csi.alibabacloud.com,表示使用阿里云云盘CSI插件。
    volumeHandle 定义云盘ID。
    nodeAffinity 定义PV和PVC所属的区域信息。

    通过定义该参数,可以将PV和PVC所在的Pod调度到对应的区域上。

  2. 执行以下命令,创建PV。
    kubectl create -f pv-static.yaml
  3. 查看创建的PV。
    1. 登录容器服务管理控制台,在左侧导航栏中选择集群
    2. 集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择存储 > 存储卷
    存储卷页面可看到创建的PV。

步骤二:创建PVC

  1. 使用以下内容,创建pvc-static.yaml文件。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 25Gi
      selector:
        matchLabels:
          alicloud-pvname: static-disk-pv
    参数 说明
    name PVC的名称。
    accessModes 设置访问模式。
    storage 声明应用使用量,不能大于存储卷的总量。
    matchLabels 通过标签关联PV,与PV标签保存一致。
  2. 执行以下命令,创建PVC。
    kubectl create -f pvc-static.yaml
  3. 查看创建的PVC。
    在集群管理页左侧导航栏选择存储 > 存储声明。可以在存储声明页面查看创建的PVC。

步骤三:创建应用

本文以Web应用为例,在应用中挂载PVC。

  1. 使用以下内容,创建web.yaml文件。
    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: csi-pvc
    参数 说明
    mountPath 云盘挂载的位置。
    claimName PVC的名称,用于绑定PVC。
  2. 执行以下命令,创建一个挂载了ENS云盘静态存储卷的应用并挂载PVC。
    kubectl apply -f web.yaml
  3. 在集群管理页左侧导航栏选择工作负载 > 有状态
    有状态页面可看到创建的Web应用,且应用能正常启动,说明ENS云盘已经挂载成功。

使用ENS云盘动态存储卷

步骤一:创建storageclass

在多地域集群场景下,您可以根据不同的场景通过以下两种方式创建StorageClass。

方式一:使用Topology(延迟绑定)方式创建StorageClass

延迟绑定可以优化边缘容器集群中存在多个地域的问题。以下通过部署名为storage-class-csi-topology.yaml文件为例,创建StorageClass。

  1. 使用以下内容,创建storage-class-topology.yaml文件。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-ens-disk-topology-available
    provisioner: ensplugin.csi.alibabacloud.com
    parameters:
      type: available
      fsType: ext4
    volumeBindingMode: WaitForFirstConsumer
    reclaimPolicy: Retain
    allowVolumeExpansion: false
    参数 说明
    name StorageClass的名称。
    provisioner 配置为diskplugin.csi.alibabacloud.com。表示使用阿里云云盘Provisioner插件创建StorageClass。
    type 表示云盘类型,支持cloud_efficiencycloud_ssdcloud_essdavailable四种参数及除available外其他三种参数的任意组合。例如,type: cloud_efficiency, cloud_ssd, cloud_essd,这种配置方式支持对指定类型云盘的依次创建,直到创建成功。其中available会对SSD、高效依次尝试创建,直到创建成功。
    说明 部分ECS机型不支持ESSD云盘挂载。更多信息,请参见块存储FAQ
    regionId 可选,自动创建云盘所在的地域。
    reclaimPolicy 云盘的回收策略,仅支持Retain,当删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。
    volumeBindingMode 云盘的绑定模式。默认为Immediate,支持WaitForFirstConsumer
    • Immediate:表示先创建云盘再创建Pod。
    • WaitForFirstConsumer:延迟绑定,即调度器先调度Pod,并根据Pod的可用区信息创建云盘。
  2. 执行以下命令,创建StorageClass。
    kubectl apply -f storage-class-topology.yaml
  3. 查看创建的StorageClass。
    1. 登录容器服务管理控制台,在左侧导航栏中选择集群
    2. 集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择存储 > 存储类
    存储类页面查看创建的StorageClass。
方式二:先创建云盘再创建Pod的方式创建StorageClass
  1. 使用以下内容,创建storage-class-csi.yaml文件。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-ens-disk-available
    provisioner: ensplugin.csi.alibabacloud.com
    parameters:
      type: available
      regionId: xxx
    reclaimPolicy: Retain
    allowVolumeExpansion: false
    volumeBindingMode: Immediate
  2. 执行以下命令,创建StorageClass。
    kubectl apply -f storage-class-csi.yaml
  3. 查看创建的StorageClass。
    1. 登录容器服务管理控制台,在左侧导航栏中选择集群
    2. 集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择存储 > 存储类
    存储类页面查看创建的StorageClass。

步骤二:创建PVC

  1. 使用以下内容,创建pvc-ssd.yaml文件。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      volumeMode: Filesystem
      resources:
        requests:
          storage: 25Gi
      storageClassName: alicloud-ens-disk-available
  2. 执行以下命令,创建PVC。
    kubectl create -f pvc-ssd.yaml
  3. 查看创建的PVC。
    在集群管理页左侧导航栏选择存储 > 存储声明。可以在存储声明页面查看创建的PVC。

步骤三:创建应用

  1. 使用以下内容,创建pvc-dynamic.yaml文件。
    创建一个名为nginx-dynamic的应用,并挂载PVC。
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx-dynamic
    spec:
      selector:
        matchLabels:
          app: 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
    参数 说明
    mountPath 云盘挂载的位置。
    claimName PVC的名称,用于绑定PVC。
  2. 执行以下命令, 创建应用并挂载PVC。
    kubectl create -f pvc-dynamic.yaml
  3. 查看创建的应用。
    在集群管理页左侧导航栏选择工作负载 > 有状态。您可以在有状态页面看到创建的应用。