Kubernetes Deployment 扩容与缩容详解
基本概念
Deployment 的扩容(Scaling Up)和缩容(Scaling Down)是指调整 Deployment 管理的 Pod 副本数量,以满足应用负载需求变化。
扩容操作
1. 命令式扩容
kubectl scale deployment/<deployment-name> --replicas=<desired-number>
示例:将名为 nginx
的 Deployment 扩展到 5 个副本
kubectl scale deployment/nginx --replicas=5
2. 声明式扩容
修改 YAML 文件中的 replicas
字段后应用:
spec:
replicas: 5
然后执行:
kubectl apply -f deployment.yaml
缩容操作
1. 命令式缩容
kubectl scale deployment/<deployment-name> --replicas=<desired-number>
示例:将名为 nginx
的 Deployment 缩减到 2 个副本
kubectl scale deployment/nginx --replicas=2
2. 声明式缩容
同样通过修改 YAML 文件的 replicas
字段实现。
自动扩缩容(HPA)
Horizontal Pod Autoscaler 可根据 CPU/内存等指标自动调整副本数:
1. 创建 HPA
kubectl autoscale deployment/<deployment-name> --min=<min-replicas> --max=<max-replicas> --cpu-percent=<target-utilization>
示例:根据 CPU 使用率(目标50%)自动缩放,副本数在2-10之间
kubectl autoscale deployment/nginx --min=2 --max=10 --cpu-percent=50
2. 查看 HPA 状态
kubectl get hpa
扩缩容过程详解
- 扩容流程:
- Deployment 控制器检测到期望副本数增加
- 创建新的 Pod 并调度到合适节点
- 新 Pod 通过就绪检查后开始接收流量
- 缩容流程:
- Deployment 控制器检测到期望副本数减少
- 选择要终止的 Pod(考虑 Pod 就绪状态、运行时间等因素)
- 优雅终止选中的 Pod(发送 SIGTERM 信号)
关键参数与策略
-
优雅终止周期:
spec: template: spec: terminationGracePeriodSeconds: 30 # 默认30秒
-
缩容选择策略(Kubernetes 1.20+):
spec: scaleDown: policy: - type: Pods value: 1 # 每次缩容最多删除1个Pod periodSeconds: 60 # 每60秒执行一次
状态验证命令
-
查看 Deployment 状态:
kubectl get deployment <deployment-name>
-
查看 Pod 详情:
kubectl get pods -l app=<app-label>
-
查看扩缩容事件:
kubectl describe deployment <deployment-name>
可优化点
-
渐进式扩缩容:
- 避免短时间内大幅增减副本数
- 考虑使用
kubectl scale --current-replicas
进行条件缩放
-
就绪检查配置:
readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 5 periodSeconds: 5
-
资源限制设置:
resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi"
-
多区域考虑:
- 使用 Pod 反亲和性规则分散 Pod
- 考虑拓扑分布约束
扩缩容与更新关系
- 扩容不会触发更新,只是增加现有版本的 Pod 数量
- 缩容会优先终止旧版本的 Pod(在滚动更新过程中)
- 更新过程中可以同时进行扩缩容操作
评论需开启科学上网!