使用阿里云Flexvolume插件实现云盘数据卷动态扩容

简介: 云盘扩容方案文章列表: 基于Flexvolume插件的云盘动态存储卷扩容方案(本文); 基于CSI插件的云盘动态存储卷扩容方案:参考; 不适合动态扩容的场景,可以使用手动扩容云盘存储卷方案:参考; 数据卷扩容说明: 符合以下要求的集群环境可以进行动态扩容操作: Kubernetes从1.

云盘扩容方案文章列表:

基于Flexvolume插件的云盘动态存储卷扩容方案(本文);

基于CSI插件的云盘动态存储卷扩容方案:参考

不适合动态扩容的场景,可以使用手动扩容云盘存储卷方案:参考

数据卷扩容说明:

符合以下要求的集群环境可以进行动态扩容操作:

Kubernetes从1.13版本开始支持Flexvolume插件实现数据卷扩容;实现;阿里云ACK不支持1.13版本,所以需要您的Kubernetes集群版本大于等于1.14;

Flexvolume要求版本不低于v1.14.6.15-8d3b7e7-aliyun;

普通云盘类型不支持动态扩容,请参考使用手动扩容云盘方案

不支持InlineVolume类型(非PV、PVC方式)云盘数据卷扩容;

切记:做数据卷扩容前,先对云盘打快照备份,以防扩容过程异常导致数据出现问题;

数据卷扩容配置需求:

对集群的要求:

对云盘扩容操作需要调用云盘扩容相应API,所以需要集群具有此API的调用权限,可以参考集群权限文档为集群添加此权限;可参考附录。

对PV的要求:

只有动态存储卷才可以进行数据卷动态扩容,即配置了StorageClassName的PV;

对StorageClass的要求:

PVC配置的StorageClass为阿里云云盘类型,provisioner为alicloud/disk;

StorageClass需要配置:AllowVolumeExpansion: True,具体含义参考,如果当前pv使用的storageClass没有配置AllowVolumeExpansion为True,可以安装下面步骤更新;

数据卷扩容步骤:

云盘动态数据卷在满足上述要求的情况下,可以实现动态扩容:

步骤1:扩容存储卷,此步骤会调整PV的Size大小;

操作:# kubectl patch pvc pvc-disk -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'

步骤2:扩容文件系统,此步骤会调整云盘、PVC、文件系统大小;


操作:重启Pod;

场景示例:

下面给出三个常见的扩容场景,并给出相应扩容步骤:

场景一:可扩容的动态卷,创建动态数据卷时StorageClass配置了AllowVolumeExpansion(true);

场景二:不可扩容的动态卷,创建动态数据卷时StorageClass没有配置AllowVolumeExpansion(true);

场景三:静态数据卷,使用已有云盘手动创建数据卷,并挂载使用;

场景一针对的是:在创建动态数据卷的时候就配置StorageClass的AllowVolumeExpansion为true,后续可以直接进行数据卷扩容。云盘数据卷的“使用方式”推荐使用这个方式;

场景二针对的是:之前版本不支持动态卷扩容时创建的动态数据卷,当时没有配置AllowVolumeExpansion为true。这个场景可以通过更新StorageClass配置来获取和场景一一致的效果。

场景三针对的是:一些用户已经手动创建了云盘,手动创建PV后挂载使用,这个场景也是通过改造PV、PVC来模拟场景一;

场景一:可扩容动态卷

此场景是说直接创建可扩容动态数据卷,并为数据卷扩容。这种使用方式为云盘推荐的使用方式;

此场景的云盘使用过程如下:

1. 确保StorageClass符合扩容条件

期望的StorageClass如下:

# kubectl describe sc alicloud-disk-ssd
Name:            alicloud-disk-ssd
IsDefaultClass:  No
Provisioner:           alicloud/disk
Parameters:            type=cloud_ssd
AllowVolumeExpansion:  True
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     Immediate
Events:                <none>

如果当前StorageClass中没有定义AllowVolumeExpansion,或者值为False,通过下面命令进行更新:

 # kubectl patch sc alicloud-disk-ssd -p '{"allowVolumeExpansion": true}'

2. 创建数据卷、应用

通过下面PVC模板创建动态数据卷:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-disk
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: alicloud-disk-ssd
  resources:
    requests:
      storage: 20Gi

创建应用挂载数据卷(模板略);

查看应用和数据卷信息:

# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          12m

# kubectl get pvc
NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS        AGE
pvc-disk   Bound    d-wz955czz7lmobytaa0f1   20Gi       RWO            alicloud-disk-ssd   13m

# kubectl get pv
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS        REASON   AGE
d-wz955czz7lmobytaa0f1   20Gi       RWO            Delete           Bound    default/pvc-disk   alicloud-disk-ssd            12m
原始挂载云盘大小为20G,创建测试文件:
# kubectl exec -ti web-0 sh
# df -h | grep data
/dev/vdb         20G   45M   20G   1% /data

# ls /data
lost+found
# touch /data/aliyun

# ls /data
aliyun    lost+found

3. 扩容动态数据卷:

步骤一:扩容PVC,查看PVC、PV、文件系统大小:

执行扩容命令:
# kubectl patch pvc pvc-disk -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
persistentvolumeclaim/pvc-disk patched

PV扩容完成,但PVC、云盘、文件系统大小尚未变化,即应用可用存储空间并没有变化;
# kubectl get pvc
NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS        AGE
pvc-disk   Bound    d-wz955czz7lmobytaa0f1   20Gi       RWO            alicloud-disk-ssd   37m

# kubectl get pv
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS        REASON   AGE
d-wz955czz7lmobytaa0f1   30Gi       RWO            Delete           Bound    default/pvc-disk   alicloud-disk-ssd            36m

# kubectl exec -ti web-0 sh
# df -h | grep data
/dev/vdb         20G   45M   20G   1% /data

步骤二:重启Pod,扩容文件系统:

重启Pod:
# kubectl delete pod web-0
pod "web-0" deleted

云盘、PVC、PV、文件系统都扩容到了30G:
# kubectl get pvc
NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS        AGE
pvc-disk   Bound    d-wz955czz7lmobytaa0f1   30Gi       RWO            alicloud-disk-ssd   40m

# kubectl get pv
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS        REASON   AGE
d-wz955czz7lmobytaa0f1   30Gi       RWO            Delete           Bound    default/pvc-disk   alicloud-disk-ssd            40m

测试文件依然存储,保证了数据的可用性:
# kubectl exec -ti web-0 sh
# df -h | grep data
/dev/vdb         30G   44M   30G   1% /data
# ls /data/
aliyun    lost+found

通过上面两步完成了动态数据卷的扩容操作(卷扩容 + 文件系统扩容);

场景二:不可扩容动态卷

不可扩容动态卷,是指动态数据卷对应的StorageClass没有配置allowVolumeExpansion为true;

这类数据卷的扩容主要思想是:改造对应的StorageClass,配置allowVolumeExpansion为true,然后使用与“场景一”相同的扩容步骤;

场景二与场景一的区别:

场景一是用配置了allowVolumeExpansion为True 的 StorageClass创建的PV;

场景二是用没有配置allowVolumeExpansion为True的 StorageClass创建的PV;

对于现存的正在使用的云盘动态数据卷,如果您创建动态卷的时候StorageClass没有配置allowVolumeExpansion为True(当时还不支持),可以考虑为符合这个场景;

此场景云盘事情过程:

  1. 更新StroageClass,添加allowVolumeExpansion(true)配置,参考“场景一”第1步;
  2. 扩容云盘动态数据卷;参考“场景一”第3步;

场景三:静态数据卷扩容

当用户先创建好了云盘,通过静态数据卷方式手动创建PV并挂载,这个场景的PV中一般没有配置StorageClassName或者配置的StorageClassName只为了标识作用(例如配置为disk);这时即需要对静态存储卷进行扩容;

注:静态存储卷不支持动态扩容,所以需要暂停应用,重新创建PVC、PV;

这个场景的扩容原则是:将当前的静态数据卷改造成动态数据卷;

步骤:

  1. 删除应用、PVC、PV,业务需要暂停,注意:给云盘打快照,且不能删除云盘;
  2. 创建新PVC、PV,模板中添加stroageClassName(value值具体选择哪个storageClass需要根据云盘的类型,例如:SSD、ESSD),且确认配置的stroageClass具有allowVolumeExpansion(true)配置;
  3. 重新创建应用挂载数据卷;
  4. 扩容云盘动态数据卷;参考“场景一”第3步;

静态存储卷的另一个扩容方式是:业务停止后手动扩容云盘,但pvc、pv不修改的话,以后需要扩容的时候还是要手动扩容,所以上述步骤有其意义所在。

总结:

云盘数据卷扩容只支持动态存储卷,且StorageClass需要配置allowVolumeExpansion为True。不符合这个需求的场景进行数据卷扩容时,需要改造StorageClass、PVC、PV,使之符合动态扩容条件;

需要注意的是,“数据卷扩容说明”、“数据卷扩容配置”部分指出了动态数据卷扩容所需要的条件,必须满足上述条件才能进行扩容操作。

附录:

给云盘扩容需要为集群的”Worker RAM 角色“添加ResizeDisk权限:

在集群 --> 管理 --> 集群资源 点击”Worker RAM 角色“;编辑Ram权限,添加ResizeDisk如下图:

image

目录
相关文章
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
1月前
|
关系型数据库 MySQL 数据挖掘
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
DTS 作为阿里云核心的数据交互引擎,以其高效的实时数据流处理能力和广泛的数据源兼容性,为用户构建了一个安全可靠、可扩展、高可用的数据架构桥梁。阿里云数据库 SelectDB 通过与 DTS 联合,为用户提供了简单、实时、极速且低成本的事务数据分析方案。用户可以通过 DTS 数据传输服务,一键将自建 MySQL / RDS MySQL / PolarDB for MySQL 数据库,迁移或同步至阿里云数据库 SelectDB 的实例中,帮助企业在短时间内完成数据迁移或同步,并即时获得深度洞察。
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
|
1月前
|
API
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
|
1月前
|
SQL 人工智能 数据挖掘
阿里云DMS,身边的智能化数据分析助手
生成式AI颠覆了人机交互的传统范式,赋予每个人利用AI进行低门槛数据分析的能力。Data Fabric与生成式AI的强强联合,不仅能够实现敏捷数据交付,还有效降低了数据分析门槛,让人人都能数据分析成为可能!阿里云DMS作为阿里云统一的用数平台,在2021年初就开始探索使用Data Fabric理念构建逻辑数仓来加速企业数据价值的交付,2023年推出基于大模型构建的Data Copilot,降低用数门槛,近期我们将Notebook(分析窗口)、逻辑数仓(Data Fabric)、Data Copilot(生成式AI)进行有机组合,端到端的解决用数难题,给用户带来全新的分析体验。
110113 118
阿里云DMS,身边的智能化数据分析助手
|
1月前
|
存储 弹性计算 关系型数据库
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
在我们选择阿里云服务器系统盘和数据盘时,如果是选择ESSD云盘,还需要选择云盘的云盘性能级别PL,PL性能级别有PL3、PL2、PL1、PL0四个性能级别的云盘规格,如果是通过阿里云的活动来购买云服务器的话,由于系统盘默认一般为20G或40G容量,可选的PL性能级别通常只有PL0(单盘IOPS性能上限1万)和PL1(单盘IOPS性能上限5万)可选择,有的用户肯能并不清楚ESSD云盘的性能等级之间有何区别,单盘IOPS性能指的是什么,本文为大家介绍一下ESSD云盘的云盘性能级别PL3、PL2、PL1、PL0相关知识点。
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
|
7天前
|
API
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态。
|
1月前
|
存储 弹性计算 安全
阿里云活动内云服务器没有数据盘怎么办?购买后如何购买并挂载云盘?
在我们通过阿里云的活动来购买云服务器的时候,一般默认情况下只有系统盘,是没有数据盘的,但是很多用户处于实际使用需求和安全等方面的需求,通常都需要在购买之后单独再购买一块云盘作为数据盘挂载到云服务器上,本文以图文形式为大家展示阿里云活动内云服务器购买流程以及购买后如何购买并挂载云盘,适合新手用户参考。
阿里云活动内云服务器没有数据盘怎么办?购买后如何购买并挂载云盘?
|
1月前
|
人工智能 IDE API
灵动指尖 :阿里云智能编码插件 更好的为IDE内置社区服务
灵动指尖 :阿里云智能编码插件 更好的为IDE内置社区服务
|
1月前
|
弹性计算 安全 容灾
【产品动态】阿里云弹性计算产品月刊-2024年2月
阿里云产品官网价格全线下调,ECS最多下降36%;容器服务 Kubernetes 版 v1.28开放升级;安全访问与管理ECS资源的最佳实践;超高性能第八代AMD实例低至68.66元/月、老用户限时续费优惠,续费享1年5折……更多前沿云产品动态,尽在弹性计算产品月刊。
|
1月前
|
SQL 监控 测试技术
阿里云可观测 2024 年 2 月产品动态
阿里云可观测 2024 年 2 月产品动态

热门文章

最新文章