如何编写备份集群空间自动平滑扩展脚本通过API动态挂载新云盘解决空间暴满

小涛姑娘_5784

小涛姑娘_5784

2026-06-27

490人浏览

原创

自动扩容通过分步调用云api实现平滑扩展:检测阈值→创建挂载云盘→初始化文件系统→通知服务纳管,强调权限、元数据接口和节点执行能力三大前提,内置限频、回滚、灰度与可观测机制。

如何编写备份集群空间自动平滑扩展脚本通过api动态挂载新云盘解决空间暴满

当集群存储空间接近饱和时,靠人工扩容既慢又容易出错。通过调用云平台(如阿里云、腾讯云、AWS)API自动创建云盘、挂载到节点、扩展文件系统,再更新集群存储配置,就能实现“空间快满了→自动加盘→无缝扩容”的平滑扩展。核心不是写一个大而全的脚本,而是分步可控、失败可退、状态可查。

准备前提:权限、工具与集群感知

脚本能跑起来,依赖三个基础条件:

  • 云账号权限:确保 AK/SK 或 Role 具备创建云盘(CreateDisk)、查询实例(DescribeInstances)、挂载磁盘(AttachDisk)、修改标签(TagResource)等最小必要权限;建议单独建 RAM 子用户并限制地域和资源前缀
  • 集群元数据接口可用:例如 Kubernetes 可通过 Metrics Server + 自定义指标(如 node_filesystem_avail_bytes)获取各节点磁盘使用率;Elasticsearch 可调 _cat/allocation?v&h=node,shards,disk.percent;自建集群需暴露 Prometheus 或提供 HTTP 接口返回各节点 /data 分区使用率
  • 节点具备自动化执行能力:目标节点已部署 cloud-init 或支持远程执行(如 ssh key 已预置、sshd 开放、sudo 免密配置好),且内核支持 xfs_growfs 或 resize2fs

关键步骤拆解:四步闭环,每步可验证

不追求一步到位,把流程拆成原子操作,每步成功才进下一步:

Windsurf
Windsurf

一款AI开发辅助工具,主要用于Codeium团队打造的AI编程助手,适合需要提升相关任务效率的用户。

下载
  • 检测告警阈值:定时拉取集群各节点磁盘使用率(例如采集 /var/lib/kubelet/pods 或 /data 挂载点),若连续 2 次超过 85%,记录该节点 IP 和当前使用率,进入扩容队列
  • 调 API 创建并挂载云盘:用云 SDK(如阿里云 aliyun-python-sdk-ecs)创建指定大小(如 500GB)、性能类型(PL1/IO2)的云盘,然后 Attach 到目标 ECS 实例的空闲 SCSI 设备(如 /dev/xvdb);等待 Attached 状态稳定(轮询 DescribeDisks)
  • 节点侧初始化并扩展文件系统:通过 SSH 执行:
    sudo fdisk -l | grep "Disk /dev/xvd" # 确认新盘识别
    sudo mkfs.xfs -f /dev/xvdb # 格式化(若未格式化)
    echo '/dev/xvdb /data2 xfs defaults 0 0' | sudo tee -a /etc/fstab
    sudo mkdir -p /data2 && sudo mount /data2
    sudo xfs_growfs /data2 # 若原 /data 是 XFS,也可将新盘合并进 LVM 逻辑卷
  • 通知集群服务重新纳管路径:例如 Kafka 修改 log.dirs 增加 /data2/kafka-logs 并滚动重启 broker;TiKV 更新 storage.data-dir 配置并 reload;务必确认服务真正开始写入新路径(检查日志或目录 inodes 变化)

防误与容错设计:避免雪上加霜

扩容本身不能成为故障源,必须内置安全阀:

  • 限频与锁机制:同一节点 24 小时内最多触发 1 次扩容;使用 Redis 或本地文件锁(/tmp/expand.lock)防止并发脚本重复操作
  • 失败自动回滚:若挂载后 df -h 未识别新路径,或服务 reload 失败,则卸载设备、清除 fstab 条目、删除新建云盘(调 DeleteDisk),并告警
  • 灰度与白名单:首次上线只对测试节点(如 node-label: env=staging)生效;生产环境加开关变量(ENABLE_AUTO_EXPAND=false),通过配置中心动态开启
  • 可观测性埋点:每次操作记录时间、节点、云盘 ID、耗时、结果(success/fail),推送至 Prometheus + Grafana 面板,设置「自动扩容次数/小时」和「平均耗时」看板

示例片段(Python + 阿里云 SDK)

以下为创建云盘并挂载的核心逻辑节选(非完整脚本):

from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526 import CreateDiskRequest, AttachDiskRequest
<p>client = AcsClient('<access_key>', '<secret_key>', 'cn-shanghai')</secret_key></access_key></p><h1>创建云盘</h1><p>req1 = CreateDiskRequest.CreateDiskRequest()
req1.set_DiskName(f'auto-expand-{node_ip}')
req1.set_Size(500)  # GB
req1.set_ZoneId('cn-shanghai-g')
disk_id = json.loads(client.do_action_with_exception(req1))['DiskId']</p><h1>轮询等待创建完成</h1><p>while True:
req2 = DescribeDisksRequest.DescribeDisksRequest()
req2.set_DiskIds([disk_id])
status = json.loads(client.do_action_with_exception(req2))['Disks']['Disk'][0]['Status']
if status == 'Available': break
time.sleep(5)</p><h1>挂载到目标 ECS 实例</h1><p>req3 = AttachDiskRequest.AttachDiskRequest()
req3.set_DiskId(disk_id)
req3.set_InstanceId('i-xxxxxx')
client.do_action_with_exception(req3)</p>

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4030

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3433

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2613

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6350

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6002

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3493

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2985

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3219

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习