前提条件
Kubernetes >= 1.23
安装Metrics-server
原文地址:k8s 安装metrics-server v0.7.1 - (sreok.cn)
创建Deployment
cat > apache.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache
spec:
selector:
matchLabels:
run: apache
template:
metadata:
labels:
run: apache
spec:
containers:
- name: apache
image: registry.k8s.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: apache
labels:
run: apache
spec:
type: NodePort
ports:
- port: 80
selector:
run: apache
EOF
resources: limits: cpu: 500m requests: cpu: 200m
此字段是必须的
kubectl apply -f apache.yaml
kubectl get svc # 记录svc端口,测试时使用
创建HPA
kubectl autoscale deployment apache --cpu-percent=50 --min=1 --max=10
负载测试
安装测试工具
yum -y install httpd-tools
并发测试
ab -c 100 -n 5000 http://10.20.13.140:32010/
-c 100 并发数
-n 5000 请求数
ctrl + c停止并发,
停止负载
总结
HPA控制器会根据以下公式来计算需要的Pod副本数:
期望副本数 = ceil[当前副本数 * (当前指标 / 期望指标)]
ceil是向上取整函数
根据以上Deployment配置,每个Apache Pod请求了200m的CPU资源(requests: cpu: 200m
),并且设置了CPU资源限制为500m(limits: cpu: 500m
)。
现在,我们设置HPA的目标CPU利用率为50%,这意味着我们希望每个Pod平均使用其请求CPU量的50%。
注意:百分比是根据pod的requests
参数,由于每个Pod请求了200m的CPU,50%的利用率即为100m(200m的一半)。HPA将会监控所有Pod的CPU使用情况,并计算平均CPU使用率。如果平均CPU使用率超过100m,HPA就会开始扩容。