ljzsdut
GitHubToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

2.8 K8s控制器资源对象之 Hpa

HPA控制器-动态扩缩容

HPA可作为KubernetesAPI资源的控制实现,它基于采集到得资源指标数据来调整控制器的行为,可以实现pod的自动扩缩容。HPA获取资源指标数据是通过metrics-server和REST客户端接口获取,所以要想使用HPA,前提是必须部署好metric-server组件。目前HPA有两个版本分别是HPA和HPA v1。

如果部署了prometheus监控,由于其包含了metric-server组件,可以不用再单独部署metric-server。

HPA(v1)控制器

例如对deployment/cc-main进行基于cpu使用率的HPA:

kubectl autoscale deployment cc-main --min=2 --max=10 --cpu-percent=80 

或:yaml方式

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: cc-main
spec:
  maxReplicas: 10
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: cc-main
  targetCPUUtilizationPercentage: 80

HPA(v2)控制器

       HPA(v1)只能基于cpu实现自动弹性伸缩,HPA(v2)控制器基支持基于核心指标CPU和内存资源及基于任意自定义指标metric资源占用状态实现规模的弹性伸缩,它从metrics-service中请求查看核心指标。

定义一个基于内存和cpu的hpa控制器资源配置清单如下:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: mynginx
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: mynginx
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50
  - type: Resource
    resource:
      name: memory
      targetAverageValue: 50Mi

spec中嵌套的个字段的说明如下:

       (1)minReplicas:自动伸缩pod副本数下限

       (2)maxReplicas:自动伸缩可扩展至Pod副本数的上限

       (3)scaleTargetRef:要伸缩的目标资源

       (4)metrics:用于计算所需的Pod副本数量的指标列表

       (5)external:用于应用非附属于任何对象的全局指标

       (6)object:应用描述集群中某单一对象的特定指标

       (7)pods:应用被弹性伸缩的pod对象的特定指标

       (8)resource:应用资源指标,即当前被弹性伸缩的pod对象中容器的requests和limits中定义的指标。

       (9)type:标识指标源的类型