大数跨境
0
0

Kubernetes HPA

Kubernetes HPA 开发运维devops
2025-11-14
2
导读:Kubernetes HPA

什么是Horizontal Pod Autoscaler

HPA简介 HPA全称Horizontal Pod Autoscaling(Pod横向自动扩容,简称HPA)在kubernetes 1.1版本首次发布这一重量级新特性

通过手工执行kubectl scale命令,我们可以实现Pod扩容或缩容。如果仅仅到此显然不符合Kubernetes的定位目标--自动化、智能化,HPA会从Heapster或者用户自定义的RESTclient端获取每个Pod利用率或原始值的平均值,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值并进行相应的操作,目前HPA可以从两个地方获取数据

·Heapster: 仅支持CPU使用率

·自定义监控

HPA与之前的RC、Deployment 一样,也属于一种Kubernetes资源对象。通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理。

HPA有以下两种方式作为Pod负载的度量指标

1.CPUUtilizationPercentage 

2.应用程序自定义的尺度指标,比如服务在每秒内的相应的请求书(TPS或OPS)

CPUUtilizationPercentage是一个算术平均值,即目标Pod所有副本自身的CPU利用率的平均值。一个Pod自身的CPU利用率是该Pod当前CPU的使用量除以它的Pod Request的值

举例:比如我们定义一个Pod的Pod Request为0.4,而当前Pod的CPU使用量为0.2,则它的CPU使用率为50%,这样我们就可以算出来一个RC控制的所有Pod副本的CPU利用率的算术平均值了

如某一刻CPUUtilizationPercentage的值超过80%,则意味着当前的Pod副本数很可能不足以支撑接下来的更多请求,需要进行动态扩容,而当请求高峰时段过去后,Pod CPU利用率又会降下来,此时对应Pod副本数应该自动减少到一个合理的水平。

CPUUtilizationPercentage 计算过程中使用到的Pod的CPU使用量通常是1min内的平均值,通过查询Heapster扩展组件来得到这个值,所以需要安装Heapster,这样一来便增加了系统的复杂度和实施HPA特性的复杂化。

未来Kubernetes自身实现一个基础性能数据采集模块,从而更好地支持HPA和其他需要用到的基础性能数据的功能模块。此外如果Pod没有定义Pod Request的值,则无法使用CPUUtilizationPercentage来实现Pod横向自动扩容的能力

定义HPA

创建HPA的方式有2种,一种是基于yaml文件进行创建,另外一个是使用命令进行创建

用yaml定义HPA例子:

apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:  name: nginx-test-hpaspec:  scaleTargetRef:    apiVersion: apps/v1    kind: Deployment    name: nginx-test  minReplicas: 2  maxReplicas: 10  metrics:  - type: Resource    resource:      name: cpu      target:        type: Utilization        averageUtilization: 90

参数解释:averageUtilization的值超过90%时会触发自动动态扩容行为,扩容或缩容时必须满足的一个约束条件是Pod的副本数要介于210之间

HPA一般都是配合metric-server使用

使用命令定义HPA例子

kubectl autoscole deployment php-apache --cpu-percent=90 --min=1 --max=10
--cpu-percent  cpu平均数--min 最小Pod数量--max 最大Pod数量

创建完成后可以通过下面命令查看hpa创建的状态

kubectl get hpa -n default

还可以通过下方命令查看hpa创建之后的状态

kubectl describe hpa  [hpa-name] -default

测试的时候可以新建一个busybox镜像,执行一个死循环即可,同时HPA是每30秒轮训一次

while true;do wget -q -O- http://xxxx.com;done

HPA:内存 + 自定义 HTTP 请求指标示例

  • 当 内存使用率 > 70% 自动扩容

  • 当 HTTP 请求数 > 每秒 100 个 自动扩容

  • 最小副本数为 2,最大副本数为 10

    apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:  name: nginx-test-hpa  namespace: defaultspec:  scaleTargetRef:    apiVersion: apps/v1    kind: Deployment    name: nginx-test  minReplicas: 2  maxReplicas: 10  metrics:  # 1️⃣ 内存使用率指标(内置)  - type: Resource    resource:      name: memory      target:        type: Utilization        averageUtilization: 70  # 2️⃣ 自定义 HTTP 请求指标(通过 Prometheus Adapter 暴露的指标)  - type: Pods    pods:      metric:        name: http_requests_per_second      target:        type: AverageValue        averageValue: 100










【声明】内容源于网络
0
0
开发运维devops
10+老运维,devops相关文档精华。
内容 96
粉丝 0
开发运维devops 10+老运维,devops相关文档精华。
总阅读201
粉丝0
内容96