文章目录
在生产环境中,总会有一些意想不到的事情发生,比如公司网站流量突然升高,此时之前创建的Pod已不足以支撑所有的访问,而运维人员也不可能24小时守着业务服务,这时就可以通过配置HPA,实现负载过高的情况下自动扩容Pod副本数以分摊高并发的流量,当流量恢复正常后,HPA会自动缩减Pod的数量。
安装minikube
minikube start --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --cpus=2 --memory=4096 --vm-driver=none
在 minikube 中,为激活 metrics-server , 只需要简单的执行:
minikube addons enable metrics-server
再执行 list 命令 , 也可以看得到 metrics-server 已经被激活了:
minikube addons list
查看metrics-server状态
kubectl get pods -n kube-system | grep metrics-server
先创建一个 Deployment 用于测试。我们可以使用 Nginx 来作为示例应用:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
resources:
limits:
cpu: "15m"
requests:
cpu: "10m"
部署这个应用:
kubectl apply -f nginx-deployment.yaml
为这个 Deployment 创建一个 HPA,基于 CPU 使用率进行自动扩展。当 CPU 使用率超过 10% 时扩展,当低于 10% 时缩减:
检查 HPA 状态:
kubectl get hpa
配置nginx-deployment的Service
kubectl expose deployment nginx-deployment --port=80
模拟负载测试
kubectl run -i --tty load-generator --rm --image=busybox /bin/sh
while true; do wget -q -O- http://nginx-deployment; done
在新的 terminal 中监控 HPA 和 Deployment:
kubectl get hpa -w
kubectl get deploy -w
kubectl top pods
查看pod情况
kubectl get pods
清理资源
当你完成测试后,记得清理资源:
kubectl delete hpa nginx-deployment
kubectl delete deployment nginx-deployment