K8s-Pod的扩容

背景

在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也 可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的 场景。此时可以利用Deployment/RC的Scale机制来完成这些工作。

手动扩容

  1. 通过kubectl scale deployment $nginx-deploymenr --replicas 5
  2. 本质上是通过修改replicas 实现的

自动扩容HPA

Pod的HPA

从K8s1.1版本,添加了HPA(Horizontal Pod Autoscaler),其基于Master的的kube-controller-manager服务启动 参数–horizontal-pod-autoscaler-sync-period定义的探测周期(默认值为 15s),周期性地监测目标Pod的资源性能指标,并与HPA资源对象中的 扩缩容条件进行对比,在满足条件时对Pod副本数量进行调整。

工作原理

HPA控制器给予Metrics Server的API指标,基于扩容规则实现进行计算,得到Pod副本数量。

然后HPA—>给副本控制器发起scale操作

期望副本数 = ceil[当前副本数 * (当前指标 / 期望指标)]
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
# 指向的副本控制器
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
# 最小
minReplicas: 1
# 最大拓展
maxReplicas: 10
#Pod指标
metrics:
- type: Resource
resource:
name: cpu
target:
# 百分比类型
type: Utilization
averageUtilization: 50
- type: Resource
resource:
name: memory
target:
# 绝对值类型
type: AverageValue
averageValue: 100M