云盘是阿里云为云服务器ECS提供的数据块级别的块存储产品,具有低时延、高性能、持久性、高可靠等特点。集群支持使用CSI插件创建云盘静态存储卷和动态存储卷。本文介绍如何在CSI插件中挂载云盘静态存储卷及使用云盘静态存储卷如何实现持久化存储。
前提条件
-
已创建集群,并且在该集群中安装CSI插件。具体操作,请参见创建Kubernetes托管版集群、创建ACK Serverless集群。
-
已创建按量付费的云盘并记录云盘ID为
d-wz92s6d95go6ki9x****
。具体操作,请参见创建云盘。说明
申请云盘时,请遵循如下容量限制:
-
高效云盘:最小20 GiB。
-
SSD云盘:最小20 GiB。
-
ESSD云盘:最小20 GiB。
-
-
已通过Kubectl连接Kubernetes集群。具体操作,请参见通过kubectl工具连接集群。
背景信息
云盘的使用场景包括:
-
对磁盘I/O要求高的应用,且没有共享数据的需求,如MySQL、Redis等数据存储服务。
-
高速写日志。
-
持久化存储数据,不会因Pod生命周期的结束而消失。
静态云盘的使用场景:已经购买了云盘实例的情况。
静态云盘使用方式:需手动创建PV及PVC。
使用限制
-
云盘为阿里云存储团队提供的非共享存储,只能同时被一个Pod挂载。如需共享存储,可使用NAS存储卷。更多信息,请参见NAS存储卷概述。
-
集群中只有与云盘在同一个可用区(Zone)的节点才可以挂载云盘。
通过控制台的方式使用云盘静态存储卷
步骤一:创建PV
-
登录容器服务管理控制台。
-
在控制台左侧导航栏,单击集群。
-
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
-
在集群管理页左侧导航栏,选择存储 > 存储卷。
-
在存储卷页面,单击右上角的创建。
-
在创建存储卷对话框中配置参数。
参数
描述
存储卷类型
本文中选择为云盘。
-
ACK集群:支持云盘、NAS、OSS云存储类型。
-
ACK Serverless集群:支持云盘、NAS云存储类型。
存储驱动
支持Flexvolume和CSI。本文中选择为CSI。
访问模式
默认为ReadWriteOnce。
云盘ID
您可以选择与集群属于相同地域和可用区下处于待挂载状态的云盘。
文件系统类型
您可以选择以什么数据类型将数据存储到云盘上,支持的类型包括ext4、ext3、xfs、vfat。默认为ext4。
标签
为该数据卷添加标签。
-
-
参数配置完成后,单击创建。
步骤二:创建PVC
-
在集群管理页左侧导航栏,选择存储 > 存储声明。
-
在存储声明页面,单击右上角的创建。
-
在创建存储声明对话框中,配置参数。
参数
描述
存储声明类型
本文中选择为云盘。
-
ACK集群:支持云盘、NAS、OSS云存储类型。
-
ACK Serverless集群:支持云盘、NAS云存储类型。
名称
创建的数据卷的名称,数据卷名在命名空间内必须唯一。
分配模式
本文中选择已有存储卷。
说明
若未创建存储卷,您可以设置分配模式为创建存储卷,配置创建存储卷参数。具体操作,请参见创建PV。
已有存储卷
单击已有存储卷,在目标存储卷右侧操作列单击选择,选择存储卷。
总量
所创建存储卷的容量。
说明
所创建的存储卷容量不能超过云盘容量。
访问模式
默认为ReadWriteOnce。
-
-
单击创建。
创建成功后可以在列表中看到存储声明,并且已绑定相应的存储卷。
步骤三:创建应用
-
在集群管理页左侧导航栏,选择工作负载 > 有状态。
-
在有状态页面,单击使用镜像创建。
-
配置创建应用的参数信息。
以下主要为您介绍数据卷的配置。关于其他参数的描述,请参见创建有状态工作负载StatefulSet。
ACK数据卷支持配置本地存储和云存储,本示例需要配置云存储类型。
本例中配置了一个云盘类型的数据卷,将该云盘挂载到容器中/tmp路径下,在该路径下生成的容器数据会存储到云盘中。
-
所有的信息都配置完成后,单击创建。
创建成功后,您就可以正常使用数据卷。
通过kubectl命令行的方式使用云盘静态存储卷
步骤一:创建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: diskplugin.csi.alibabacloud.com volumeHandle: "" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.diskplugin.csi.alibabacloud.com/zone operator: In values: - "" # 替换为您待部署应用的节点所在的可用区,例如"cn-beijing-b"。
参数
说明
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。
步骤三:创建应用
本文以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。
-
-
执行以下命令,创建一个挂载了云盘静态存储卷的应用并挂载PVC。
kubectl apply -f web.yaml
-
在集群管理页左侧导航栏选择工作负载 > 有状态。
在有状态页面可看到创建的Web应用。
验证静态云盘的持久化存储
-
查看部署Web应用的Pod和云盘文件。
-
执行以下命令,查看部署的Web应用所在Pod的名称。
kubectl get pod | grep web
预期输出:
web-1**** 1/1 Running 0 32s
-
执行以下命令,查看/data路径下是否挂载了新的云盘。
kubectl exec web-1**** -- df | grep data
预期输出:
/dev/vdf 20511312 45080 20449848 1% /data
-
执行以下命令,查看/data路径下的文件。
kubectl exec web-1**** -- ls /data
预期输出:
lost+found
-
-
执行以下命令,在/data路径下创建文件static。
kubectl exec web-1**** -- touch /data/static
-
执行以下命令,查看/data路径下的文件。
kubectl exec web-1**** -- ls /data
预期输出:
lost+found static
-
执行以下命令,删除名称为
web-1****
的Pod。kubectl delete pod web-1****
预期输出:
pod "web-1****" deleted
-
验证删除Pod后,云盘里创建的文件是否还存在。
-
执行以下命令,查看重建的Pod名称。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE web-2**** 1/1 Running 0 14s
-
执行以下命令,查看/data路径下的文件。
kubectl exec web-2**** -- ls /data
预期输出:
lost+found static
static文件仍然存在,则说明静态云盘的数据可持久化保存。
-
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/171649.html