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自动创建PV购买云盘。如果您已经购买云盘,则使用云盘静态存储卷。
申请云盘的大小,不能超出云盘的单盘容量范围。更多信息,请参见存储规格。
当Pod重建时,会重新挂载原云盘。若由于其他限制无法调度到原可用区,则Pod将会处于Pending状态。
动态创建的云盘为按量付费的云盘,关于云盘计费项信息,请参见块存储计费。关于云盘的价格信息,请参见云服务器ECS产品详情页。
ENS云盘为阿里云存储团队提供的非共享存储,只能同时被一个Pod挂载。
ACK Edge集群中与ENS云盘在同一地域的ENS节点才能挂载ENS云盘。
不支持回收和删除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-available provisioner: ensplugin.csi.alibabacloud.com parameters: type: available fsType: ext4 volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain allowVolumeExpansion: false
参数
说明
name
StorageClass的名称。
provisioner
配置为
ensplugin.csi.alibabacloud.com
。表示使用ENS云盘Provisioner插件创建StorageClass。type
云盘类型。
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
查看创建的应用。
在集群管理页左侧导航栏选择
。您可以在有状态页面看到创建的应用。
使用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.ensplugin.csi.alibabacloud.com/region operator: In values: - "<your-node-region-id>" # ENS节点RegionID。可通过查看ENS节点label中topology.ensplugin.csi.alibabacloud.com/region参数查看ENS节点RegionID。
参数
说明
name
PV的名称。
labels
设置PV的标签。
storage
云盘的可使用量。
accessModes
设置访问模式。
persistentVolumeReclaimPolicy
PV的回收策略。
driver
定义驱动类型。取值为
ensplugin.csi.alibabacloud.com
,表示使用ENS云盘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云盘已经挂载成功。