HPA[自动扩缩容]配置

Posted by 胡伟煌 on 2024-07-21

1. HPA简介

HPA全称HorizontalPodAutoscaler,即pod水平扩容,增加或减少pod的数量。相对于VPA而言,VPA是增加或减少单个pod的CPU或内存。HPA主要作用于Deployment或Statefulset的工作负载,无法作用于Daemonset的工作负载。

示例图:

Kubernetes 将水平 Pod 自动扩缩实现为一个间歇运行的控制回路(它不是一个连续的过程)。间隔由 kube-controller-manager--horizontal-pod-autoscaler-sync-period 参数设置(默认间隔为 15 秒)。

在每个时间段内,控制器管理器都会根据每个 HorizontalPodAutoscaler 定义中指定的指标查询资源利用率。 控制器管理器找到由 scaleTargetRef 定义的目标资源,然后根据目标资源的 .spec.selector 标签选择 Pod, 并从资源指标 API(针对每个 Pod 的资源指标)或自定义指标获取指标 API(适用于所有其他指标)。

HPA依赖metrics-server来获取CPU和内存数据,以下说明metrics-server的部署流程。

2. 部署metrics-server

下载metrics-server文件

1
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

修改启动参数,增加--kubelet-insecure-tls,否则会报获取接口证书失败。

1
2
3
4
5
6
7
8
9
spec:
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls # 增加该参数

创建yaml服务

1
kubectl apply -f components.yaml

通过kubectl top查看资源信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
node1 144m 0% 5762Mi 2%
node2 337m 0% 5475Mi 2%
node3 100m 0% 5326Mi 2%
node4 302m 0% 5649Mi 2%

# kubectl top pod -n prometheus
NAME CPU(cores) MEMORY(bytes)
alertmanager-kube-prometheus-stack-alertmanager-0 1m 30Mi
kube-prometheus-stack-grafana-7688b45b4c-mvwd6 1m 225Mi
kube-prometheus-stack-kube-state-metrics-5d6578867c-25xbq 1m 21Mi
kube-prometheus-stack-operator-9c5fbdc68-nrn7h 1m 33Mi
kube-prometheus-stack-prometheus-node-exporter-8ghd8 1m 4Mi
kube-prometheus-stack-prometheus-node-exporter-brtp9 1m 4Mi
kube-prometheus-stack-prometheus-node-exporter-n4kdp 1m 4Mi
kube-prometheus-stack-prometheus-node-exporter-ttksv 1m 4Mi
prometheus-kube-prometheus-stack-prometheus-0 8m 622Mi

同时在k8s dashboard上也可以查看到实时的CPU和内存信息。

3. HPA配置

todo

参考:



支付宝打赏 微信打赏

赞赏一下