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
- 使用以下内容,创建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延迟绑定可以优化边缘容器集群中存在多个地域的问题。以下通过部署名为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
- 查看创建的应用。
在集群管理页左侧导航栏选择。您可以在有状态页面看到创建的应用。