如何设置Kubernetes Deployment层级的最小和最大副本数?
结论
原生Kubernetes支持在Deployment维度单独配置副本数的最小、最大限制,不需要改集群全局配置,也不需要手动操作Deployment下层的ReplicaSet对象。
要说明的是:Deployment本身的spec字段里没有直接内置
minReplicas/maxReplicas的声明项,副本上下限规则是通过和Deployment直接绑定的HorizontalPodAutoscaler(简称HPA,水平Pod自动伸缩器)实现的,规则只作用于绑定的这一个Deployment,不会影响其他工作负载,完全符合Deployment层级配置的要求。
具体配置步骤
前置准备
- 集群里已经装好了metrics-server组件,HPA读取Pod、节点的资源指标全靠这个组件
- 要配置限制的目标Deployment已经正常创建,不需要改动Deployment本身的原有配置
操作流程
- 编写HPA配置清单,直接指定要绑定的目标Deployment,在清单里定义好副本数的最小、最大值即可,示例配置如下:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: hpa-demo # 一般和目标Deployment同名,后续方便维护 namespace: default # 填写目标Deployment所在的命名空间 spec: minReplicas: 2 # 副本数下限,不管怎么伸缩都不会低于这个值 maxReplicas: 10 # 副本数上限,不管怎么伸缩都不会高于这个值 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-demo # 填写要加限制的目标Deployment名称 metrics: # 伸缩触发指标,哪怕不需要自动伸缩,也得填合法的指标项配置才能生效 - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70
- 执行命令把HPA配置应用到集群:
kubectl apply -f hpa-demo.yaml
- 校验配置是否生效:
执行以下命令查看HPA状态:
kubectl get hpa -n default
返回结果里如果能看到对应HPA的MINPODS、MAXPODS列显示的就是你配置的最小、最大副本数,TARGETS列正常显示指标值,就说明配置已经生效。
补充说明
- 要是你不需要自动扩缩容,只想给副本数卡个固定上下限,直接把HPA的伸缩触发阈值设成永远碰不到的值就行——比如把CPU平均利用率阈值设为100%,正常业务负载根本跑不到这个水位,这时候Deployment的副本数就会牢牢卡在你设置的区间内,不会自动变动。
- 这个配置的优先级比手动执行
kubectl scale改副本数要高:要是你手动把副本数改到比下限还小、或者比上限还大,HPA会在短时间内自动把副本数拉回合法区间。 - 整个配置过程不需要改任何集群全局参数,也不需要编辑Deployment下属的ReplicaSet资源,所有操作都是围绕目标Deployment和它绑定的HPA完成的,属于纯Deployment维度的管控。
内容的提问来源于stack exchange,提问作者Mohd. Samar
相关产品推荐
相关产品推荐

