使用ENS云盘
ENS云盘是在ACK Edge集群的ENS节点上使用的云盘。ACK Edge集群支持使用CSI插件创建ENS云盘静态存储卷和ENS云盘动态存储卷。本文介绍如何在CSI插件中挂载ENS云盘静态存储卷和ENS云盘动态存储卷。
前提条件
已创建ACK Edge集群,具体操作,请参见创建边缘托管版集群。
已安装csi-ens-plugin和csi-ens-provisioner组件,具体操作,请参见管理组件。
已通过Kubectl连接Kubernetes集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
使用静态云盘时,请确保已创建按量付费的ENS云盘并记录云盘ID为
d-wz92s6d95go6ki9x****
。
使用说明
类别 | 说明 |
使用场景 | 没有提前购买云盘,在应用部署时自动购买云盘的情况。 |
使用方式 |
有关StorageClass的详细说明,请参见存储类(StorageClass)。 |
使用限制
ENS云盘为阿里云存储团队提供的非共享存储,只能同时被一个Pod挂载。
ACK Edge集群中与ENS云盘在同一地域的ENS节点才能挂载ENS云盘。
不支持回收和删除ENS云盘。相关操作,需在ENS控制台操作。
使用ENS云盘静态存储卷
步骤一:创建PV
使用以下内容,创建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调度到对应的区域上。
执行以下命令,创建PV。
kubectl create -f pv-static.yaml
查看创建的PV。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在存储卷页面可看到创建的PV。
步骤二:创建PVC
使用以下内容,创建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标签保存一致。
执行以下命令,创建PVC。
kubectl create -f pvc-static.yaml
查看创建的PVC。
在集群管理页左侧导航栏选择
。可以在存储声明页面查看创建的PVC。
步骤三:创建应用
本文以Web应用为例,在应用中挂载PVC。
使用以下内容,创建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。
执行以下命令,创建一个挂载了ENS云盘静态存储卷的应用并挂载PVC。
kubectl apply -f web.yaml
在集群管理页左侧导航栏选择 。
在有状态页面可看到创建的Web应用,且应用能正常启动,说明ENS云盘已经挂载成功。
使用ENS云盘动态存储卷
步骤一:创建storageclass
在多地域集群场景下,您可以根据不同的场景通过以下两种方式创建StorageClass。
方式一:使用Topology(延迟绑定)方式创建StorageClass
延迟绑定可以优化ACK Edge集群中存在多个地域的问题。以下通过部署名为storage-class-csi-topology.yaml文件为例,创建StorageClass。
使用以下内容,创建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_efficiency、cloud_ssd、cloud_essd、available四种参数及除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的可用区信息创建云盘。
执行以下命令,创建StorageClass。
kubectl apply -f storage-class-topology.yaml
查看创建的StorageClass。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在存储类页面查看创建的StorageClass。
方式二:先创建云盘再创建Pod的方式创建StorageClass
使用以下内容,创建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
执行以下命令,创建StorageClass。
kubectl apply -f storage-class-csi.yaml
查看创建的StorageClass。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在存储类页面查看创建的StorageClass。
步骤二:创建PVC
使用以下内容,创建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
执行以下命令,创建PVC。
kubectl create -f pvc-ssd.yaml
查看创建的PVC。
在集群管理页左侧导航栏选择
。可以在存储声明页面查看创建的PVC。
步骤三:创建应用
使用以下内容,创建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。
执行以下命令, 创建应用并挂载PVC。
kubectl create -f pvc-dynamic.yaml
查看创建的应用。
在集群管理页左侧导航栏选择
。您可以在有状态页面看到创建的应用。