我
1. 使用 Deployment 实现横向扩展(Scale Out)与收缩(Scale In)
- Kubernetes 通过 Deployment 控制器管理 ReplicaSet(副本集),再由副本集管理 Pod 副本,实现横向扩展与收缩。
Deployment 中设定的.spec.replicas值即为期望副本数,Deployment 会确保对应的 ReplicaSet 和 Pod 数量与之保持一致。([官方文档最新说明])(kubernetes.io, kubernetes.io)
2. 创建 Deployment 对象
- 使用 YAML 文件定义 Deployment(包括名称、标签选择器、Pod 模板及
.spec.replicas等); - 使用命令创建 Deployment,例如:
<<<bash
kubectl apply -f deployment.yaml
<<<
(推荐用 apply 而非 create,便于后续更新)
3. 查看 Deployment、ReplicaSet 和 Pod 状态
- 执行以下命令查询资源状态:
<<<bash
kubectl get deploy,rs,pod
<<<
- 要查看 ReplicaSet 或 Pod 的更多关联标签信息,可以加上
--show-labels参数;Deployment rollout 状态可以通过kubectl rollout status deployment/<name>检查。
4. 使用 kubectl scale 执行横向扩展/收缩
- 手动调整副本数的命令格式:
<<<bash
kubectl scale deployment/
<<<
或通过 YAML 文件统一管理:
<<<bash
kubectl scale -f
<<<
- 可搭配
--current-replicas=<当前数量>参数设定前置条件,确保安全变更。([官方 kubectl scale 参考])(komodor.com, kubernetes.io)
5. 扩展后的行为验证
- 执行扩展后,Deployment 控制器会启动新的 ReplicaSet(若模板已更新)或调整现有 ReplicaSet 的副本数量。系统会确保 Pods 数量匹配期望值。([官方文档说明])(kubernetes.io)
- 使用
kubectl get pods可核实实际运行的 Pod 数量。
6. 缩减(Scale In)与收缩至 0 的行为
- 若将副本数设置为较小值,如 2,系统会自动终止多余 Pod,实现收缩功能。
- 若设置为 0,可保留 Deployment 和 ReplicaSet 对象,但 Pod 会全部删除。需要注意:缩减至 0 后可能存在 Pod 终止的延迟状态(Terminating 状态),应等待状态稳定后再继续操作。([实用参考说明])(stormforge.io)
7. 再次扩展(Scale Out 再次使用)
- 再次设置副本数(如从 0 调整为 3),即可恢复对应数量的 Pods。Deployment 会重新启动对应 ReplicaSet 创建 Pod。无须重新创建 Deployment 对象。([官方机制说明])(kubernetes.io)
8. 自动扩缩机制(补充——更智能)
除了手动 kubectl scale,Kubernetes 还支持自动扩缩机制:
- Horizontal Pod Autoscaler(HPA):基于 CPU/内存或自定义指标自动调整 Deployment 副本数。适用于工作负载波动频繁的场景。([官方 HPA 文档])(spot.io, kubernetes.io)
- Vertical Pod Autoscaler(VPA):动态调整 Pod 的资源配置(例如 CPU、内存),通过重新调度 Pod 实现。更适用于性能提升和资源利用优化。([相关介绍])(medium.com)
- Cluster Autoscaler:自动调整 Kubernetes 集群中的节点数量,以适应 Pods 对资源的需求变化。HPA 和 Cluster Autoscaler 可协同工作:若 HPA 请求的 Pod 多于当前集群可用资源时,Cluster Autoscaler 会增加节点容量。([CA 与 HPA 协作说明])(docs.digitalocean.com)
总结对比表
| 功能/场景 | 方式 | 描述 |
|---|---|---|
| 手动扩缩 | kubectl scale |
直接控制副本数,简洁直观 |
| 使用 YAML 管理扩缩 | 修改 .spec.replicas + apply |
可与版本控制结合,方便管理 |
| 自动扩缩 | HPA、VPA、Cluster Autoscaler | 根据指标自动伸缩,适应动态负载 |
| 缩减到 0 | --replicas=0 |
删除所有 Pod,但保留对象结构;注意缩减后的影响 |