Kubernetes HPA(Horizontal Pod Autoscaler) 是 Kubernetes 提供的自动弹性伸缩机制,用于根据实时负载动态调整 Pod 副本数量,以应对流量波动并优化资源利用率。HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 、statefulset中的 Pod 数量。
HPA是基于kube-controll-manager服务,周期性的检测Pod的CPU使用率,默认30s检测一次
HPA和副本控制器replication controller以及deployment controller,都属于K8S的资源对象。通过跟踪分析副本控制器和deployment的Pod的负载变化,针对性的调整目标Pod的副本数。
阀值:正常情况下,Pod的副本数,以及达到阀值后,Pod的扩容最大数量
Kubernetes采用request和limit两种限制类型来对资源进行分配。
request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。
limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。
资源类型:
CPU 的单位是核心数,内存的单位是字节。
一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m 表示千分之一的概念。比如说100m的CPU,100豪的CPU和0.1个CPU都是一样的。
内存单位:
K、M、G、T、P、E #通常是以1000为换算标准的。
Ki、Mi、Gi、Ti、Pi、Ei #通常是以1024为换算标准的。
一、HPA 工作原理
-
指标采集:
- Metrics Server:默认采集 Pod 的 CPU 和内存使用率(需预先部署)。
- 自定义指标:通过 Prometheus、Kubernetes Custom Metrics API 等扩展,支持 QPS、并发连接数等业务指标。
-
决策逻辑:
-
周期性(默认15秒)检查目标资源(如 Deployment)的指标数据。
-
根据当前指标值与目标阈值的比例,计算期望的 Pod 副本数。
-
计算公式:
复制
期望副本数 = ceil(当前副本数 × (当前指标值 / 目标指标值))
-
最终副本数受
minReplicas
和maxReplicas
限制。
-
-
扩缩容触发:
- 扩容:当指标超过目标阈值时增加 Pod 副本。
- 缩容:当指标低于目标阈值时减少 Pod 副本(默认有5分钟冷却时间防止抖动)。
二、HPA 配置步骤
1. 部署 Metrics Server
Metrics Server 是 Kubernetes 内置的高效的容器资源指标来源。Metrics Server 可以帮助我们监控集群中节点和容器的资源使用情况。
# 安装 Metrics Server(Kubernetes 1.20+)
[root@master ~]# mkdir hpa
[root@master hpa]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml
[root@master hpa]# vim components.yaml #修改配置文件
1、修改镜像:
registry.k8s.io/metrics-server/metrics-server:v0.7.1
修改为
registry.aliyuncs.com/google_containers/metrics-server:v0.7.1
2.禁用证书验证,在134行左右添加
spec:
containers:
- args:
- --kubelet-insecure-tls #禁用证书验证
- --cert-dir=/tmp
- --secure-port=10250
[root@master hpa]# kubectl apply -f components.yaml
# 验证安装
[root@master hpa]# kubectl get pod -A | grep metrics
kube-system metrics-server-b59d5fcc6-jl9jh 1/1 Running 0 55s
[root@master hpa]# kubectl top nodes
NAME CPU(cores) CPU(%)