kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试
序言:
在大型电商、购物、直播活动期间,对于火爆流量的激增,如何保障业务稳定并且做到资源不浪费,自动回收。
场景:kubernetes 原生容器化承载业务流量(非云环境)
方案:kubernetes自带HPA、KPA、VPA板块
板块选择
一、KPA板块
KPA(Knative Pod Autoscaler)基于请求数对Pod自动扩缩容,KPA的主要限制在于它不支持基于CPU的自动扩缩容。
- 根据并发请求数实现自动扩缩容
- 设置扩缩容边界实现自动扩缩容
扩缩容边界是指应用程序提供服务的最小和最大Pod数量。通过设置应用程序服务的最小和最大Pod数量实现自动扩缩容。
二、HPA板块
国内HPA介绍地址:
https://kubernetes.p2hp.com/docs/tasks/run-application/horizontal-pod-autoscale/
水平扩缩容意味着更多的pod被创建和清理,支持平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义等指标,自动伸缩Replication Controller、Deployment 或者Replica Set 中的 Pod 数量。
- 基于kube-controller-manager控制器定义的服务启动参数horizontal-pod-autoscaler-sync-period(default 15s)周期性检测CPU的使用率
- HorizontalPodAutoscaler 被实现为 Kubernetes API 资源和控制器。
- HorizontalPodAutoscaler 的常见用途是将其配置为从聚合 API
(metrics.k8s.io、custom.metrics.k8s.io 或 external.metrics.k8s.io)获取指标。
注意:metrics.k8s.io API 通常由名为 Metrics Server 的插件提供,需要单独启动,部署方案:
https://blog.csdn.net/binqian/article/details/144170031
优缺点
优点:
- 支持滚动升级时扩缩
- HPA 的任何目标资源都可以基于其中的 Pods 的资源用量来实现扩缩。
- 支持容器资源指标
- 可扩展性强,支持自定义指标
- 单独对 Metrics API 的支持
缺点:
- HPA的流程涉及到POD从0到1流程的创建,流程中的网络问题比较敏感
- 现有场景都是依赖Metric Server去动态监测
- 水平扩展需要临时或者长期有足够的空闲资源
- 现有常用的副本控制器不支持 DaemonSet
- 参与自动伸缩的副本控制器不得指定副本数量,容易导致HPA异常
核心参数
- ScaleTargetRef:指定 HPA 将要作用的资源对象,如 Deployment、Replica Set 或 RC 的名称。
- MinReplicas:最小副本数,即使在负载很低时也不会低于这个数量。
- MaxReplicas:最大副本数,即使在负载很高时也不会超过这个数量。
- Metrics:定义用于触发伸缩的度量标准和目标值。常见:targetCPUUtilizationPercentage
用例说明
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: xxxx #自定义名称
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment #指定要自动缩放的目标对象,这里是一个Deployment
name: xxxx #指定deployment的标签name
minReplicas: 1
maxReplicas: 5
#自动扩缩的副本数,最大5,最小1
targetCPUUtilizationPercentage: 50 #CPU利用率的阀值50%
压力测试
本机环境如下:
业务yaml
[root@k8s-docker-master ~]# cat hpa-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: centos-test
labels:
test: centos
spec:
replicas:
selector:
matchLabels:
test: centos
template:
metadata:
labels:
test: centos
spec:
containers:
- name: centos
image: centos:7
command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]
resources:
limits:
cpu: "1"
memory: 512Mi
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: hpa-centos7
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: centos-test
minReplicas: 1
maxReplicas: 3
targetCPUUtilizationPercentage: 50
[root@k8s-docker-master ~]# kubectl apply -f hpa-test.yaml
deployment.apps/centos-test configured
horizontalpodautoscaler.autoscaling/hpa-centos7 created
[root@k8s-docker-master ~]# kubectl get pod -A | grep centos-test
default centos-test-594d5479c8-tf44w 1/1 Running 0 4m37s
[root@k8s-docker-master ~]# kubectl get horizontalpodautoscaler -A
NAMESPACE NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
default hpa-centos7 Deployment/centos-test 0%/50% 1 3 1 66s
满足阈值的开始扩容,低于开始缩容,这里显示REPLICAS数值为2不跳动是因为扩容很快,缩容很慢导致。建议弄一个新的环境去压力测试。
三、VPA (待写)
原文地址:https://blog.csdn.net/LiukuoDocker7/article/details/145163223
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!