k8s 使用HPA 进行弹性扩容pod节点,
使用hpa进行弹性扩容pod副本数,实现降低pod节点压力
·
弹性扩容分为三种,内存,cpu,自定义指标:
使用hpa之前要进行添加Kubernetes Metrics Server 从集群中的 kubelets 收集资源指标
这个的安装请自行百度,可以考虑官网文档:https://github.com/kubernetes-sigs/metrics-server#deployment
基于CPU进行弹性扩容pod节点:
概述:当一个业务压力过大的时候可能出现一系列问题,所有k8s引用了一个hpa的概念进行弹性扩容,pod节点,cpu只是参考的一种,建议按照业务情况进行选择
yaml文件:
vim nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment # k8s的资源类型
metadata:
name: nginx # deploy的名字
spec:
selector:
matchLabels:
app: nginx # deploy的标签
replicas: 1 # 副本数
template:
metadata:
labels:
app: nginx # 管理的pod节点的标签
spec:
containers:
- name: nginx # images的名字
image: nginx # nginx的地址
ports:
- containerPort: 80 # pod暴露的端口号
resources:
limits:
cpu: 500m # cpu配置,添加cpu之类也是为了使用hpa进行弹性扩容,生成环境中配置的更加麻烦,这边把yaml进行简单化,方便进行理解。
requests:
cpu: 200m # cpu配置
开始进行配置HPA
kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10 --dry-run=client -oyaml # 整体的这个命令相当于当cpu使用率到达50%的时候进行弹性扩容,最高扩容到10个版本,最低缩容到1个版本, 后面的 --dry-run=client -oyaml 的意思是进行输出成一个yaml,这边方便进行查看 ## 注意HPA有命名空间隔离性
[root@hecs-266792 HPA]# kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10 --dry-run=client -oyaml
apiVersion: autoscaling/v1 # hpa的版本
kind: HorizontalPodAutoscaler # 资源类型
metadata:
creationTimestamp: null
name: nginx # hpa的名称,可以使用kubectl get hpa 进行查看到的
spec:
maxReplicas: 10 # 弹性扩容的最大副本数
minReplicas: 1 # 弹性缩容的最小副本数
scaleTargetRef:
apiVersion: apps/v1 # deploy的版本可以使用kubectl api-resources |grep deploy进行查看到
kind: Deployment # deploy的资源
name: nginx # deploy的名称
targetCPUUtilizationPercentage: 10
status:
currentReplicas: 0
desiredReplicas: 0
配置完整之后,咱们这边可以进行测试一下,是否达到效果:
[root@hecs-266792 HPA]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-5fc6fd5469-bwls6 1/1 Running 0 47h 172.20.255.221 hecs-266792 <none> <none>
[root@hecs-266792 HPA]# cat lll.sh
#!/bin/bash
a=0
while [ $a -le 10 ]
do
curl http://172.20.255.221
echo "正常测试"
done
进行执行lll.sh并进行观察pod是否进行扩容成功:
[root@hecs-266792 HPA]# kubectl top po
NAME CPU(cores) MEMORY(bytes)
nginx-5fc6fd5469-bwls6 31m 3Mi
[root@hecs-266792 HPA]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-5fc6fd5469-bwls6 1/1 Running 0 47h
nginx-5fc6fd5469-ffgzm 0/1 Pending 0 31s
nginx-5fc6fd5469-jssll 1/1 Running 0 31s
[root@hecs-266792 HPA]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 15%/10% 1 10 3 51s
发现已经进行扩容成功了,扩容到了3个,后面还会进行扩容,这边就暂停演示了,当压力降低的时候就回把刚刚扩容的进行弹性缩容
[root@hecs-266792 HPA]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-5fc6fd5469-bwls6 1/1 Running 0 47h
nginx-5fc6fd5469-ffgzm 0/1 Pending 0 2m12s
nginx-5fc6fd5469-jssll 1/1 Running 0 2m12s
[root@hecs-266792 HPA]# kubectl get hpa # 注意默认检测时间是5分钟,此参数是可以进行修改的
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 0%/10% 1 10 3 2m52s
基于内存进行弹性扩容pod节点:
deploy的yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
memory: 1000Mi
requests:
cpu: 200m
memory: 1000Mi
# hpa的yaml,这边配置和cpu和内存的2方式进行扩容,作为参考
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: nginx # hpa的名字,可以使用kubectl get hpa 进行查看的
spec:
scaleTargetRef:
apiVersion: apps/v1 # deploy的版本可以使用kubectl api-resources |grep deploy进行查看到
kind: Deployment # deploy资源
name: nginx # deploy名称
minReplicas: 1 # 最小副本数
maxReplicas: 10 # 最大副本数
metrics: # 采集的类型
- type: Resource # 资源
resource:
name: cpu # cpu资源
targetAverageUtilization: 80 # cpu使用率到达80%
- type: Resource # 资源
resource:
name: memory # 内存资源
targetAverageValue: 30Mi # 当使用内存到达30M的是时候就是
进行验证是否扩容成功:
进入pod中:kubectl exec -it nginx-664fc7cf5f-s6bsg – sh
进入之后执行:
dd if=/dev/zero of=/1.txt # 执行几分钟之后,进行退出ctrl+c即可
进行打开1.txt文件
cat 1.txt
[root@hecs-266792 HPA]# kubectl get po && kubectl top po && kubectl get hpa
# 这边pod处于Pending的状态是因为我服务器内存不够导致的
NAME READY STATUS RESTARTS AGE
nginx-664fc7cf5f-2g7k2 0/1 Pending 0 12m
nginx-664fc7cf5f-bln2l 0/1 Pending 0 12m
nginx-664fc7cf5f-cnjkw 0/1 Pending 0 12m
nginx-664fc7cf5f-p6zxt 0/1 Pending 0 12m
nginx-664fc7cf5f-s6bsg 1/1 Running 0 34m
nginx-664fc7cf5f-slw7c 0/1 Pending 0 12m
nginx-664fc7cf5f-spn5j 0/1 Pending 0 12m
nginx-664fc7cf5f-vjxhp 0/1 Pending 0 12m
nginx-664fc7cf5f-z4dbl 0/1 Pending 0 12m
nginx-664fc7cf5f-zn6d4 0/1 Pending 0 12m
NAME CPU(cores) MEMORY(bytes)
nginx-664fc7cf5f-s6bsg 0m 418Mi
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 438513664/30Mi 1 10 10 28m
# 发现是可以进行弹性扩容的
使用自定义的监控指标进行弹性扩容:
这个后期会进行更新
更多推荐
已为社区贡献11条内容
所有评论(0)