介绍
调整 Deployment 或 StatefulSet 的副本数(replicas)是实现应用扩缩容的直接方式。KDO 提供图形化界面,让你无需编辑 YAML 即可快速调整副本数量。
快速开始
扩缩容无状态应用 (Deployment)
- 进入 开发者界面 → 工作负载,选择 无状态应用 Tab
- 找到目标 Deployment,点击右侧 操作图标 或勾选后点击顶部 批量操作
- 选择 编辑副本数
- 输入新的副本数(如
3、5、10) - 点击 添加
效果:
- Deployment 控制器会自动创建或删除 Pod,使副本数达到目标值
- 滚动更新期间,应用继续服务(根据更新策略)
扩缩容有状态应用 (StatefulSet)
操作步骤相同,但注意:
- StatefulSet 扩缩容是有序的(扩容按索引 0→N,缩容按 N→0)
- 确保存储(PVC)绑定正确,避免数据丢失
详细说明
副本数 vs HPA
如果开启了 HPA(水平自动扩缩),手动调整副本数的选项将不显示。此时应通过 编辑 HPA 来调整副本范围。
原因:
- HPA 自动根据指标调整副本数
- 手动修改可能被 HPA 立即覆盖
- 如果想禁用 HPA,先删除 HPA 资源
操作注意事项
扩容
- ✅ 新 Pod 会按照 Deployment 的
strategy创建(滚动更新) - ✅ 确保集群有足够的资源(CPU/内存)容纳新副本
- ✅ 检查可用节点数(调度可能失败)
- ✅ 如果使用 HPA,手动扩容后 HPA 仍可能在指标驱动下调整回某个值
缩容
- ⚠️ 数据安全:缩容会删除 Pod,如有状态应用(StatefulSet),确保数据已备份或 PVC 保留策略正确
- ⚠️ 服务中断:如果缩容后剩余副本数 < Service 的负载均衡能力,可能影响吞吐量
- ⚠️ PDB 限制:如果配置了 PodDisruptionBudget,缩容可能被阻止(PDB 要求最小可用副本)
最佳实践
扩容策略
- 📈 逐步扩容:一次性扩容太多可能导致调度压力,建议每次增加 1-2 个副本
- 📈 监控资源:扩容前检查节点剩余资源,避免调度失败
- 📈 预热时间:应用启动需要时间,扩容后等待 Pod Ready 再增加流量
缩容策略
- 📉 避免频繁缩容:频繁扩缩容可能导致 Pod 频繁创建销毁,增加负载
- 📉 HPA 稳定性:如果使用 HPA,调整
minReplicas而非手动缩容 - 📉 优雅终止:确保应用处理
SIGTERM,完成当前请求再退出(K8s default 30s)
与应用生命周期结合
- 🔄 蓝绿发布:通过修改副本数实现(先部署新版本,然后切换 Service selector,最后缩容旧版本)
- 🔄 金丝雀发布:先将少量流量路由到新版本(副本数少),观察无误后逐步增加
常见问题
Q: 副本数修改后没反应?
- 检查 Deployment 状态:
kubectl get deploy <name> - 查看事件:
kubectl describe deploy <name> - 可能原因:资源不足(节点不够)、节点选择器不匹配、Pod 创建失败(查看 Pod 日志)
Q: 扩缩容后 Pod 一直 Pending?
- 调度问题:
kubectl get pod <name> -o wide看节点分配 - 资源不足:检查节点剩余 CPU/内存
- PVC 绑定失败:PVC 处于 Pending
Q: HPA 开启后无法手动修改副本数?
这是预期行为。HPA 会覆盖 Deployment 的 replicas 字段。
解决方法:
- 调整 HPA 的
minReplicas/maxReplicas - 或删除 HPA 后手动管理副本数
Q: 缩容会删除 PVC 吗?
不会。 PVC 和 PV 是独立资源,缩容只删除 Pod,PVC 保留。数据不会丢失,下次扩容会自动绑定。
Q: 扩缩容速度慢?
Deployment 滚动更新速度由以下参数控制:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # 最多可以超出期望副本数的 Pod 数
maxUnavailable: 0 # 最多可以不可用的 Pod 数
调整这些值可以加快或减缓扩缩容速度。