云盘是阿里云为云服务器ECS提供的数据块级别的块存储产品,具有低时延、高性能、持久性、高可靠等特点。ACK支持使用CSI插件创建云盘动态存储卷。本文介绍如何使用云盘动态存储卷,以及如何验证云盘动态存储卷的持久化存储特性。
索引
-
前提条件
-
使用说明
-
操作步骤
-
通过控制台的方式使用云盘动态存储卷
-
通过kubectl命令行的方式使用云盘动态存储卷
-
-
验证动态云盘的持久化存储
前提条件
-
已创建Kubernetes托管版集群
-
已通过kubectl工具连接集群
使用说明
类别 |
说明 |
使用场景 |
没有提前购买云盘,在应用部署时自动购买云盘的情况。 |
使用方式 |
有关StorageClass的详细说明,请参见存储类(StorageClass)。 |
操作步骤
您可以通过以下两种方式使用云盘动态存储卷。
通过控制台的方式使用云盘动态存储卷
步骤一:创建StorageClass
-
登录容器服务管理控制台,在左侧导航栏选择集群。
-
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 存储类。
-
在存储类页面,单击右上角的创建。
-
在创建对话框,配置StorageClass的相关参数。
主要配置项说明如下。
配置项
说明
名称
StorageClass的名称。
名称必须以小写字母开头,只能包含小写字母、数字、小数点(.)和短划线(-)。
存储卷类型
可选择云盘或NAS。本示例选择云盘。
存储驱动
默认为CSI。
参数
-
默认参数type,其值为cloud_essd。表示云盘类型,支持cloud_efficiency、cloud_auto、cloud_ssd、cloud_essd、available五种参数及除available外其他四种参数的任意组合。例如
type: cloud_efficiency, cloud_ssd, cloud_essd
,此配置方式支持对指定类型云盘的依次创建,直到创建成功。其中available会对SSD、高效依次尝试创建,直到创建成功。
说明
部分ECS机型不支持ESSD云盘挂载。更多信息,请参见块存储FAQ。
-
可添加自定义参数。支持自定义的参数说明如下:
-
resourceGroupId:可选,定义云盘的资源组。默认为””。
-
regionId:可选,自动创建云盘所在的地域,与集群的地域相同。
-
zoneId:可选,自动创建云盘所在的区域。
-
单可用区集群,与集群所在区域相同。
-
多可用区集群,zoneId可同时配置多个,例如
cn-beijing-a, cn-beijing-b
-
-
fstype:可选,自动创建云盘所使用的文件系统,默认为ext4。
-
mkfsOptions:可选,云盘格式化所用的参数。例如
mkfsOptions: "-O project,quota"
。 -
diskTags:可选,自定义云盘Tag。例如
diskTags: "a:b,b:c"
。 -
encrypted:可选,表示创建的云盘是否加密。默认为false,创建的云盘不加密。
-
performanceLevel:可选,取值PL0、PL1、PL2或PL3。默认值为PL1。更多信息,请参见容量范围与性能级别的关系。
-
volumeExpandAutoSnapshot:可选,云盘扩容时通过极速快照实现自动数据备份,保证数据安全,默认为closed。
-
forced:自动快照创建失败时放弃云盘扩容。
-
besteffort:自动快照创建失败时报event warning,继续进行云盘扩容。
-
closed:不使用自动快照功能。
如果数据安全性要求高,推荐使用forced方式避免扩容失败时的数据丢失。
说明
仅支持对ESSD云盘。扩容正常时自动快照将自动删除,扩容失败时自动快照保留24小时。
-
-
provisionedIops:可选,云盘预配置的读写IOPS。
可能值:0~min{50,000, 1000×容量-基准性能}。
基准性能=min{1,800+50×容量, 50000}。
说明
仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。
-
burstingEnabled:可选,是否开启Burst(性能突发)。默认为false。
-
true:开启。
-
false:不开启。
说明
仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。
-
-
回收策略
云盘的回收策略,默认为Delete,支持Retain。
-
Delete模式:删除PVC时,PV和云盘会一起删除。
-
Retain模式:删除PVC时,PV和云盘数据不会被删除,需要您手动删除。
如果数据安全性要求高,推荐使用Retain方式以免误删数据。
绑定模式
云盘的绑定模式。默认为Immediate,支持WaitForFirstConsumer。
-
Immediate:表示先创建云盘再创建Pod。
-
WaitForFirstConsumer:延迟绑定,即调度器先调度Pod,并根据Pod的可用区信息创建云盘。
-
-
参数配置完成后,单击创建。
创建成功后,在存储类列表中可看到刚创建的StorageClass。
步骤二:创建PVC
-
在集群管理页左侧导航栏,选择存储 > 存储声明。
-
在存储声明页面,单击右上角的创建。
-
在创建存储声明对话框中,配置参数。
配置项
说明
存储声明类型
支持云盘、NAS、OSS三种云存储类型。本示例选择云盘。
名称
创建的存储声明名称在命名空间内必须唯一。
分配模式
本示例选择使用存储类动态创建。
已有存储类
单击选择存储类,在选择存储类对话框目标存储类右侧操作列单击选择。
总量
所创建存储卷的容量。
访问模式
默认为ReadWriteOnce,也可选择ReadOnlyMany或ReadWriteMany。
-
单击创建。
创建成功后,在存储声明列表中可看到创建的存储声明,并且已绑定相应的存储卷。
步骤三:创建应用
-
在集群管理页左侧导航栏,选择工作负载 > 有状态。
-
在有状态页面,单击使用镜像创建。
-
配置创建应用的参数信息。
以下主要为您介绍数据卷的配置。关于其他参数的描述,请参见创建有状态工作负载StatefulSet。
ACK数据卷支持配置本地存储和云存储,本示例需要配置云存储类型。
本例中配置了一个云盘类型的数据卷,将该云盘挂载到容器中/tmp路径下,在该路径下生成的容器数据会存储到云盘中。
-
所有的信息都配置完成后,单击创建。
创建成功后,您就可以正常使用数据卷。
通过kubectl命令行的方式使用云盘动态存储卷
步骤一:创建StorageClass
在多可用区集群场景下,您可以根据不同的场景通过以下两种方式创建StorageClass。
方式一:使用Topology(延迟绑定)方式创建StorageClass
延迟绑定可以优化ECS和云盘不在一个可用区的问题。以下以部署名为storage-class-csi-wffc.yaml文件为例,创建StorageClass。
-
使用以下内容,创建storage-class-csi-wffc.yaml文件。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-wait-for-first-consumer provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_auto,cloud_essd,cloud_ssd # 使用该配置,按优先级自适应选择云盘类型,最终创建的云盘类型受节点实例、所在可用区云盘支持情况等因素影响。 fstype: ext4 diskTags: "a:b,b:c" encrypted: "false" performanceLevel: PL1 volumeExpandAutoSnapshot: "forced" # 该设置仅在创建的云盘类型为cloud_essd时生效。 provisionedIops: "40000" burstingEnabled: "false" volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain allowVolumeExpansion: true
参数
说明
metadata
name
StorageClass的名称。
provisioner
配置为
diskplugin.csi.alibabacloud.com
。表示使用阿里云云盘Provisioner插件创建StorageClass。parameters
type
表示云盘类型,支持cloud_efficiency、cloud_auto、cloud_ssd、cloud_essd、available五种参数及除available外其他四种参数的任意组合。例如,
type: cloud_efficiency, cloud_ssd, cloud_essd
,此配置方式支持对指定类型云盘的依次创建,直到创建成功。其中available会对SSD、高效依次尝试创建,直到创建成功。说明
部分ECS机型不支持ESSD云盘挂载。更多信息,请参见块存储FAQ。
resourceGroupId
可选,定义云盘的资源组。默认为””。
regionId
可选,自动创建云盘所在的地域,与集群的地域相同。
zoneId
可选,自动创建云盘所在的区域。
-
单可用区集群,与集群所在区域相同。
-
多可用区集群,zoneId可同时配置多个,例如,
zoneId: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
重要
若您在StorageClass中使用了zoneId参数,由默认的WaitForFirstConsumer参数产生的zoneId将不会生效,此处请谨慎使用。
fstype
可选,自动创建云盘所使用的文件系统,默认为ext4。
mkfsOptions
可选,云盘格式化所用的参数。例如
mkfsOptions: "-O project,quota"
。diskTags
可选,自定义云盘Tag。例如
diskTags: "a:b,b:c"
。encrypted
可选,表示创建的云盘是否加密。默认为false,创建的云盘不加密。
performanceLevel
可选,取值PL0、PL1、PL2或PL3。默认值为PL1。更多信息,请参见容量范围与性能级别的关系。
volumeExpandAutoSnapshot
可选,云盘扩容时通过极速快照实现自动数据备份,保证数据安全,默认为closed。
-
forced:自动快照创建失败时放弃云盘扩容。
-
besteffort:自动快照创建失败时报event warning,继续进行云盘扩容。
-
closed:不使用自动快照功能。
如果数据安全性要求高,推荐使用forced方式避免扩容失败时的数据丢失。
说明
仅支持对ESSD云盘。扩容正常时自动快照将自动删除,扩容失败时自动快照保留24小时。
provisionedIops
可选,云盘预配置的读写IOPS。
可能值:0~min{50,000, 1000×容量-基准性能}。
基准性能=min{1,800+50×容量, 50000}。
说明
仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。
burstingEnabled
可选,是否开启Burst(性能突发)。默认为false。
-
true:开启。
-
false:不开启。
说明
仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。
volumeBindingMode
云盘的绑定模式。默认为Immediate,支持WaitForFirstConsumer。
-
Immediate:表示先创建云盘再创建Pod。
-
WaitForFirstConsumer:延迟绑定,即调度器先调度Pod,并根据Pod的可用区信息创建云盘。
reclaimPolicy
云盘的回收策略,默认为Delete,支持Retain。
-
Delete模式:删除PVC的时候,PV和云盘会一起删除。
-
Retain模式:删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。
如果数据安全性要求高,推荐使用Retain方式以免误删数据。
allowVolumeExpansion
配置为true时,可以实现云盘的自动扩容。
-
-
执行以下命令,创建StorageClass。
kubectl apply -f storage-class-wffc.yaml
-
查看创建的StorageClass。
-
登录容器服务管理控制台。
-
在控制台左侧导航栏,单击集群。
-
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
-
在集群管理页左侧导航栏中,选择存储 > 存储类。
在存储类页面,查看创建的StorageClass。
-
方式二:先创建云盘再创建Pod的方式创建StorageClass
-
使用以下内容,创建storage-class-immediate.yaml文件。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-immediate provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_essd,cloud_ssd,cloud_efficiency #使用该配置,按优先级自适应选择云盘类型,最终创建的云盘类型受节点实例、所在可用区云盘支持情况等因素影响 regionId: cn-beijing zoneId: cn-beijing-b encrypted: "false" reclaimPolicy: Retain allowVolumeExpansion: true volumeBindingMode: Immediate
参数
说明
provisioner
配置为
diskplugin.csi.alibabacloud.com
。表示使用阿里云云盘Provisioner插件创建StorageClass。parameters
type
表示云盘类型,支持cloud_efficiency、cloud_auto、cloud_ssd、cloud_essd、available五种参数及除available外其他四种参数的任意组合。例如,
type: cloud_efficiency, cloud_ssd, cloud_essd
,此配置方式支持对指定类型云盘的依次创建,直到创建成功。其中available会对SSD、高效依次尝试创建,直到创建成功。说明
部分ECS机型不支持ESSD云盘挂载。更多信息,请参见块存储FAQ。
regionId
可选,期望创建云盘的区域。
zoneId
可选,期望创建云盘的可用区。
encrypted
可选,标识创建的云盘是否加密。默认情况是false,创建的云盘不加密。
provisionedIops
可选,云盘预配置的读写IOPS。
可能值:0~min{50,000, 1000×容量-基准性能}。
基准性能=min{1,800+50×容量, 50000}。
说明
仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。
burstingEnabled
可选,是否开启Burst(性能突发)。默认为false。
-
true:开启。
-
false:不开启。
说明
仅支持ESSD AutoPL云盘。更多内容,请参见ESSD AutoPL云盘规格。
reclaimPolicy
云盘的回收策略,默认为Delete,支持Retain。
-
Delete模式:删除PVC的时候,PV和云盘会一起删除。
-
Retain模式:删除PVC的时候,PV和云盘数据不会被删除,需要您手动删除。
如果数据安全性要求高,推荐使用Retain方式以免误删数据。
allowVolumeExpansion
配置为true时,可以实现云盘的自动扩容。
volumeBindingMode
云盘的绑定模式。默认为Immediate,支持WaitForFirstConsumer。
-
Immediate:表示先创建云盘再创建Pod。
-
WaitForFirstConsumer:延迟绑定,即调度器先调度Pod,并根据Pod的可用区信息创建云盘。
-
-
执行以下命令,创建StorageClass。
kubectl apply -f storage-class-immediate.yaml
-
查看创建的StorageClass。
-
登录容器服务管理控制台。
-
在控制台左侧导航栏,单击集群。
-
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
-
在集群管理页左侧导航栏中,选择存储 > 存储类。
在存储类页面,查看创建的StorageClass。
-
步骤二:创建PVC
-
使用以下内容,创建pvc-disk.yaml文件。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-disk-wait-for-first-consumer
参数
说明
name
PVC的名称。
accessModes
配置访问模式。
volumeMode
可选,挂载云盘的格式,为Filesystem或Block。 默认为文件系统挂载。
storageClassName
StorageClass的名称,用于绑定StorageClass。
storage
申请的云盘大小,最小为20 GiB。
-
执行以下命令,创建PVC。
kubectl create -f pvc-disk.yaml
-
查看创建的PVC。
在集群管理页左侧导航栏,选择存储 > 存储声明。在存储声明页面可以看到创建的PVC。
步骤三:创建应用
-
使用以下内容,创建mysql.yaml文件。
apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: selector: matchLabels: app: mysql serviceName: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 80 name: mysql volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc --- apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: username: dGVz**** password: dGVzdDEt****
参数
说明
mountPath
云盘挂载的位置。
claimName
PVC的名称,用于绑定PVC。
-
执行以下命令,创建应用并挂载PVC。
kubectl create -f mysql.yaml
-
查看已创建的应用。
在集群管理页左侧导航栏,选择工作负载 > 有状态。您可以在有状态页面看到已创建的应用。
验证动态云盘的持久化存储
云盘提供了持久化存储服务,当某个Pod删除时,重新部署的Pod将自动同步之前Pod的所有数据。
根据以下示例,验证动态云盘的持久化存储特性。
-
查看MySQL应用所在的Pod和云盘文件。
-
执行以下命令,查看MySQL应用所在Pod的名称。
kubectl get pod | grep mysql
预期输出:
nginx-dynamic-1**** 1/1 Running 0 3m
-
执行以下命令,查看/data路径下是否挂载了新的云盘。
kubectl exec nginx-dynamic-1**** -- df | grep data
预期输出:
/dev/vdh 20511312 45080 20449848 1% /data
-
执行以下命令,查看/data路径下的文件。
kubectl exec nginx-dynamic-1**** -- ls /data
预期输出:
lost+found
-
-
在云盘里创建文件。
-
执行以下命令,在/data路径下创建文件MySQL。
kubectl exec nginx-dynamic-1**** -- touch /data/mysql
-
执行以下命令,查看/data路径下的文件。
kubectl exec nginx-dynamic-1**** -- ls /data
预期输出:
mysql lost+found
-
-
执行以下命令,删除名为
nginx-dynamic-1****
的Pod。kubectl delete pod nginx-dynamic-1****
预期输出:
pod "nginx-dynamic-1****" deleted
-
验证删除Pod后,云盘中创建的文件是否仍然存在。
-
执行以下命令,查看重建的Pod名称。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE nginx-dynamic-2**** 1/1 Running 0 2m
-
执行以下命令,查看/data路径下的文件。
kubectl exec nginx-dynamic-2**** -- ls /data
预期输出:
mysql lost+found
MySQL文件仍然存在,说明动态云盘的数据可持久保存。
-
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/170602.html