HPA水平伸缩的条件
1、部署 Metrics server (收集 cpu 与 内存)
2、配置 resources.requests (配置资源清单)
Metrics server 部署
metrics-server 是什么
Metrics Server 是 K8S 中用于资源监控和自动伸缩的基础组件,Metrics Server 负责从 Kubelet 中收集 CPU 和内存等资源使用指标,并将这些数据聚合起来,通过 Metrics API 暴露给 Kubernetes 。
metrics-server 安装
安装地址:
链接: https://pan.baidu.com/s/16MEaWbPj3SsyylmjZNmCJA?pwd=racd 提取码: racd
kubectl apply -f metrics-server.0.7.2.yaml
metrics-server 常用命令
检测 metrics-server 是否正常运行
kubectl get pods -n kube-system | grep metrics-server
#metrics-server-57c6f647bb-78ss9 1/1 Running 0 11m
#metrics-server-57c6f647bb-nr8lf 1/1 Running 0 11m
kubectl get apiservice v1beta1.metrics.k8s.io -o yaml
#status:
# conditions:
# - lastTransitionTime: "2026-02-02T00:42:43Z"
# message: all checks passed
# reason: Passed
# status: "True"
# type: Available
查看 pod 与 node 资源使用情况
kubectl top pod
#NAME CPU(cores) MEMORY(bytes)
#deploy-nginx-6f578f7477-cbrhm 0m 2Mi
#deploy-tomcat01-86db7c9b5d-cm7gb 2m 94Mi
#deploy-tomcat02-77d56cb8f7-6ttvr 2m 101Mi
#deploy-xiuxian-7b574d64b-76qm8 0m 2Mi
#deploy-xiuxian-7b574d64b-rwhzl 0m 5Mi
#deploy-xiuxian-7b574d64b-s8std 0m 5Mi
kubectl top node
#NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
#master231 96m 4% 1168Mi 30%
#worker232 42m 2% 1104Mi 29%
#worker233 50m 2% 1413Mi 37%
根据不同的名称空间查看 pod 资源
kubectl top pod -n default
#NAME CPU(cores) MEMORY(bytes)
#deploy-nginx-6f578f7477-cbrhm 0m 2Mi
#deploy-tomcat01-86db7c9b5d-cm7gb 2m 94Mi
#deploy-tomcat02-77d56cb8f7-6ttvr 2m 101Mi
#deploy-xiuxian-7b574d64b-76qm8 0m 2Mi
#deploy-xiuxian-7b574d64b-rwhzl 0m 5Mi
#deploy-xiuxian-7b574d64b-s8std 0m 5Mi
HPA 水平伸缩 案例1 配置 resources.requests (配置资源清单)
业务场景:
hpa是k8s集群内置的资源,全称为”HorizontalPodAutoscaler”。可以自动实现Pod水平伸缩,在业务高峰期可以自动扩容Pod副本数量,在集群的低谷期,可以自动缩容Pod副本数量。
HPA 实践案例 1
导入测试镜像
docker load -i linux-tools-v0.1-stress.tar.gz
docker tag jasonyin2020/oldboyedu-linux-tools:v0.1 harbor250.oldboyedu.com/greytracks/stress:v0.1
docker login harbor250.oldboyedu.com
docker push harbor250.oldboyedu.com/greytracks/stress:v0.1
配置文件详解
cat hpa.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-stress
spec:
replicas: 1
selector:
matchLabels:
app: stress
template:
metadata:
labels:
app: stress
spec:
containers:
- image: harbor250.oldboyedu.com/greytracks/stress:v0.1
name: oldboyedu-linux-tools
args:
- tail
- -f
- /etc/hosts
# 配置容器的资源限制
resources:
# 容器的期望资源
requests:
# CPU限制,1 =1000m
cpu: 0.2
# 内存限制
memory: 300Mi
# 容器的资源上限
limits:
cpu: 0.5
memory: 500Mi
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: stress-hpa
spec:
maxReplicas: 5
minReplicas: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: deploy-stress
targetCPUUtilizationPercentage: 95
创建资源
kubectl apply -f 01-deploy-hpa.yaml
#查看资源 (压测前为2个)
kubectl get pod
#deploy-stress-754cc6f56c-lw4f9 1/1 Running 0 3m13s
#deploy-stress-754cc6f56c-s9lgd 1/1 Running 0 2m58s
始压测 对 2 个节点分别进行压测
kubectl exec deploy-stress-754cc6f56c-pfbv4 -- stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10m
kubectl exec deploy-stress-754cc6f56c-s9lgd -- stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10m
压测后查看资源
kubectl get pod
NAME READY STATUS RESTARTS AGE
deploy-stress-754cc6f56c-lw4f9 1/1 Running 0 19m
deploy-stress-754cc6f56c-pfbv4 1/1 Running 0 14m
deploy-stress-754cc6f56c-s9lgd 1/1 Running 0 19m
deploy-stress-754cc6f56c-tvwpd 1/1 Running 0 13m
deploy-stress-754cc6f56c-w892k 1/1 Running 0 13m
成功实现水平伸缩至 5 个节点 , 取消压测后 等 10 分钟后 会自动缩容恢复至 2 节点!
水平伸缩的核心,我认为在于配置文件的理解,与伸缩后对业务的影响