讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Kubernetes上实现Redis集群的自动扩缩容_根据CPU使用率动态调整StatefulSet副本

胖枫酱_8249

胖枫酱_8249

发布时间:2026-06-08 07:55:38

|

700人浏览过

|

来源于php中文网

原创

Redis集群不能直接用HPA扩缩容,因StatefulSet需Operator通过CR(如RedisCluster)变更clusterSize等字段触发扩缩,且自动扩缩需Prometheus+prometheus-adapter+自定义控制器链路实现。

如何在kubernetes上实现redis集群的自动扩缩容_根据cpu使用率动态调整statefulset副本

Redis集群不能直接用HPA扩缩容,因为StatefulSet不被原生支持

HorizontalPodAutoscaler(HPA)默认只支持 Deployment、ReplicaSet、ReplicationController 和 StatefulSet(从 Kubernetes v1.23+ 开始),但 Redis 集群通常由多个角色组成(如 leader/follower 或 master/slave),且依赖拓扑稳定的网络标识和持久化存储。即使 HPA 能“触发”StatefulSet 的副本数变更,Redis Operator 本身不会自动响应这个变更——它只监听自己 CRD(如 RedisCluster 或 RedisFailover)的 spec 变化。

常见错误现象:kubectl autoscale statefulset/redis-leader --cpu-percent=70 --min=3 --max=6 执行成功,但实际 Pod 数量不变,kubectl get hpa 显示 Target 状态为 Unknown 或 NotScaled,日志里出现 failed to get cpu utilization: unable to get metrics for resource cpu。

  • 根本原因:Metrics Server 没有采集到 StatefulSet 下 Pod 的指标(尤其当 Pod 启用了资源 request 但未显式暴露 /metrics 端点时)
  • 更关键的是:Redis Operator 不 watch StatefulSet 副本变化,它只 watch 自己的 CR 对象(如 RedisCluster)
  • 如果你绕过 Operator 直接 patch StatefulSet,会导致 Operator 认为状态“偏离期望”,后续可能强制 revert 修改

正确路径:通过修改 RedisCluster CR 的 clusterSize 字段触发 Operator 扩缩

Redis-Operator(如 Opstree 或 Spotahome 版本)管理集群的核心是自定义资源(CR),扩缩容必须走 CR 更新流程。例如,Opstree 的 RedisCluster CR 中,spec.clusterSize 控制总节点数,而 Spotahome 的 RedisFailover 则需同时调整 spec.redis.replicas 和 spec.sentinel.replicas。

操作步骤:

  • 确认当前 CR 名称:kubectl get rediscluster 或 kubectl get redisfailover
  • 编辑 CR:kubectl edit rediscluster redis-cluster(Opstree)或 kubectl edit redisfailover rf-redis(Spotahome)
  • 修改对应字段:
    – Opstree:spec.clusterSize: 5(从 3 扩到 5)
    – Spotahome:spec.redis.replicas: 5 和 spec.sentinel.replicas: 3
  • 保存退出后,Operator 会在几秒内检测变更,开始滚动更新节点并触发数据分片迁移(如使用 Redis Cluster 模式)

注意:clusterSize 是总节点数,不是主节点数;Opstree 默认按 1 leader + N follower 构建,所以设为 5 表示 1 主 4 从(或自动分配为 3 主 2 从,取决于分片策略)。务必提前确认你用的 Operator 版本是否支持该字段动态更新(v1beta2+ 一般支持)。

让 CPU 使用率成为扩缩容决策依据:必须接入 Prometheus + HPA + 自定义指标适配器

单纯改 CR 是手动行为。要实现“根据 CPU 使用率自动扩缩”,必须把 HPA 绑定到 Redis CR 的“逻辑目标”上——但 Kubernetes 原生 HPA 不认识 RedisCluster。解决方案是:用 prometheus-adapter 把 Redis 实例的 CPU 指标暴露为自定义指标(如 redis_cpu_usage_percent),再让 HPA 基于该指标驱动一个“代理控制器”去 patch Redis CR。

Kubernetes Network Policy Generator
Kubernetes Network Policy Generator

使用加权评分卡在12项标准上评估和比较隐私解决方案供应商。适用于选择隐私管理软件、比较数据保护方案等场景。

下载

典型链路:

  • Prometheus 抓取每个 Redis Pod 的 container_cpu_usage_seconds_total,计算出 % 利用率(除以 container_spec_cpu_quota)
  • prometheus-adapter 将该值注册为可被 HPA 查询的指标:redis_cpu_usage_percent
  • 编写一个轻量控制器(或用 KEDA),监听该指标超过阈值(如 80%),然后执行:kubectl patch rediscluster redis-cluster -p '{"spec":{"clusterSize":5}}' --type=merge
  • Operator 检测到 CR 变更,执行扩缩容逻辑

性能影响:Prometheus 抓取间隔建议设为 15s,避免高频查询拖慢指标系统;KEDA 触发延迟通常在 30–60s,不适合毫秒级突增场景。另外,Redis 分片迁移期间 CPU 升高是正常现象,需在 HPA 策略中加入 stabilizationWindowSeconds 防止震荡。

容易忽略的关键点:数据一致性与扩缩容窗口期

Redis 扩容不是加个 Pod 就完事。Operator 在调大 clusterSize 后,会启动新节点、等待加入集群、执行 CLUSTER MEET、再 CLUSTER ADDSLOTS 迁移哈希槽——整个过程可能持续 2–5 分钟,期间部分 slot 请求会返回 MOVED 重定向,客户端必须支持自动重定向(如 JedisCluster、redis-py-cluster)。

真正危险的操作是缩容:

  • 如果缩容时没等 slot 迁移完成,HPA 或控制器就删掉节点,会导致数据丢失或集群不可用
  • Opstree 的 RedisCluster 缩容前会检查 CLUSTER NODES 输出,但某些版本存在 race condition
  • 强烈建议:缩容前手动执行 kubectl exec -it redis-cluster-leader-0 -- redis-cli CLUSTER NODES,确认待删除节点 slot 已全部迁出

最终效果取决于你用的 Operator 实现细节——Opstree v1.12+ 支持 spec.autoScaling 字段(实验性),而 Spotahome 官方明确不提供自动扩缩容,只留接口供你集成。别指望一条 kubectl autoscale 命令搞定。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4309

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3815

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6932

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

623

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

736

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6562

2024.04.07

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1140

2024.04.07

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1016

2024.04.07

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kubernetes官方教程手册
Kubernetes官方教程手册

共0课时 | 0人学习

Kubernetes官方中文文档
Kubernetes官方中文文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn