25-K8S Basic-HPA控制器

一、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

image

  • 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
posted @ 2021-05-16 19:59  SRE运维充电站  阅读(95)  评论(0编辑  收藏  举报