- Ps 参考博文 :https://pdf.us/2019/04/17/3267.html
一、HPA自动弹性缩放介绍
-
自动弹性伸缩工具 Auto Scaling:
- HPA,Horizontal Pod Autoscaler,两个版本,HPA仅支持CPU指标;HPAv2支持资源指标API和自定义指标API
- CA,Cluster Autoscaler,集群规模自动弹性伸缩,能自动增减节点数量,用于云环境
- VPA,Vertical Pod Autoscaler,Pod应用垂直伸缩工具,调整Pod对象的CPU和内存资源需求量完成扩展或收缩
- AR,Addon Resizer,简化版本的Pod应用垂直伸缩工具,基于集群中节点数量调整附加组件的资源需求量
-
HPA自身是一个控制循环,周期由 controller-manager的 --horizontal-pod-autoscaler-sync-period选项定义,默认为30s
-
对于未定义资源需求量的Pod对象,HPA控制器无法定义容器CPU利用率,且不会为该指标采取任何操作
-
对于每个Pod的自定义指标,HPA仅能处理原始值而非利用率
-
默认缩容延迟时长为5min,扩容延迟时长为3min,目的是防止出现抖动
-
HPA获取指标的方式:Heapster和REST客户端
-
Heapster要事先部署于集群上并在kube-system名称空间运行
-
事先部署好资源指标API及其API Server,必要时,还要部署好自定义指标API及其相关的API Server
-
autoscaling/v1 HPA
-
autoscaling/v2beta1 HPAv2
二、HPA控制器实践
# 创建 deployment及service
kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2 --requests='cpu=50m,memory=256Mi' --limits='cpu=50m,memory=256Mi' --labels='app=myapp' --expose --port=80
# 创建hpa控制器
kubectl autoscale deployment myapp --min=2 --max=5 --cpu-percent=60
# 查看hpa
kubectl get hpa
kubectl get hpa -o yaml --export
- HPA(v2)支持从metrics-server中请求核心指标;从k8s-prometheus-adapter一类自定义API中获取自定义指标数据,多个指标计算时,结果中数值较大的胜出
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: myapp
spec:
scaleTargetRef: # 要缩放的目标资源
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
- type: Resource
resource:
name: memory
targetAverageValue: 50Mi
- metrics,计算所需Pod副本数量的指标列表,每个指标单独计算,取所有计算结果的最大值作为最终副本数量
- external,引用非附属于任何对象的全局指标,可以是集群之外的组件的指标数据,如消息队列长度
- object,引用描述集群中某单一对象的特定指标,如Ingress对象上的hits-per-second等
- pods,引用当前被弹性伸缩的Pod对象的特定指标
- resource,引用资源指标,即当前被弹性伸缩的Pod对象中容器的requests和limits中定义的指标
- type,指标源的类型,可为Objects、Pods、Resource