手工扩缩容是什么
这个命令直接设定工作负载的副本数,是容量操作里最直接的一种。它支持一个保护条件:只有当前副本数与预期值一致时才执行,用来避免覆盖别人刚做过的调整。扩缩容本身是异步的,命令返回成功只表示期望值已经写入,实例是否就绪还需要再观察。
缩容不是免费的
扩容很快:控制器会不断创建新实例直到达到目标。缩容则涉及终止实例,具体节奏受终止宽限期与可用性约束影响。对无状态服务,缩容瞬间就有实例进入终止流程,在途请求需要应用自身优雅处理;对有状态服务,减少成员可能触发数据再平衡,必须确认应用能承受。
基本信息
| 适用环境 | 任何 Kubernetes 发行版,支持工作负载类资源 |
|---|---|
| 语法 | kubectl scale <资源>/<名称> --replicas=<数量> |
| 保护条件 | 可要求当前副本数与预期一致才执行 |
| 执行方式 | 写入期望值后由控制器异步达成 |
| 观察方式 | 持续查看副本就绪情况与发布状态 |
| 受管冲突 | 存在自动扩缩对象时手工调整会被拉回 |
典型使用场景
- 应对预期峰值:大促或活动前提前把副本数调高
- 临时止血:异常流量导致资源紧张时先扩容争取时间
- 成本收敛:低峰期把副本数压到合理下限
- 演练验证:验证调度约束是否允许继续扩容
- 发布前保底:发布前先提高副本数,降低替换期间的影响
- 故障隔离:把异常负载缩到零以阻止其继续对外产生影响
常用示例
常用示例
kubectl scale deploy/web --replicas=5 # 扩容到五个副本
kubectl scale deploy/web --replicas=5 --current-replicas=3 # 副本数为三时才执行
kubectl scale sts/db --replicas=3 -n prod # 有状态负载按序扩缩
kubectl scale deploy/web --replicas=0 # 暂时下线(对象保留)
kubectl get deploy web -w # 观察副本变化扩容与缩容的差别
| 维度 | 扩容 | 缩容 |
|---|---|---|
| 执行节奏 | 持续创建实例直到达标 | 逐个终止实例,受宽限期影响 |
| 风险点 | 节点资源是否够、约束是否满足 | 在途请求与数据再平衡 |
| 观察重点 | 副本是否就绪 | 实例是否完成优雅退出 |
| 约束 | 受配额与调度限制 | 受可用性保护策略限制 |
保护条件用来防止并发操作互相覆盖:现网副本数与预期不符时命令会拒绝执行,适合放在自动化脚本里。
存在自动扩缩对象时手工调整副本数会被控制器按指标拉回,需要固定容量时应先暂停自动扩缩。