k8s series 14: 弹性伸缩(Autoscaler)

·  阅读 299

Horizo​​ntal Pod Autoscaler (以下简称HPA)

  根据监测 CPU内存 利用率(或自定义自标或安装应用配合)弹性伸缩 复制控制器、部署、副本集或有状态集中的 Pod 数量。请注意HPA不适用于无法缩放的对象,例如DaemonSet。

在k8s中,有以下弹性伸缩模式:

  • Pod 水平伸缩(HPA)
  • Pod 垂直伸缩(VPA)
  • 集群node弹性伸缩(CA)

不同类型的弹性伸缩,使用场影不同

CA

当集群资源不足时,CA 会自动配置新的计算资源并添加到集群中

使用方式

一般是借助公有云 等提供的服务进行配置操作,像阿里云就提供了弹性伸缩的服务,在流量高峰使用弹性伸缩+定时任务 可以避免服务坑不住,或服务器成本过高的情况

k8s官网云厂商方案: github.com/kubernetes/…

当然了,博主感觉使用ca来做node节点的弹性还不如直接用 云厂商的弹性伸缩服务,用过之后都说好

VPA

有些时候无法通过增加 Pod 数来扩容,比如数据库。这时候可以通过 VPA 增加 Pod 的大小,比如调整 Pod 的 CPU 和内存

使用方式

需要配合监控来操作,通常需要部署metrics-server来进行,当然使用prometheus+脚本配合也是可以的

官网:github.com/kubernetes/…

实际部署可以参考这位大佬的博客:  www.jianshu.com/p/94ea8bee4…

HPA

 hpa是常用的弹性缩伸模式,擅长给无状态服务做扩容缩容等操作

HAP原理

HPA 实现为一个控制循环,其周期由控制器管理器的--horizontal-pod-autoscaler-sync-period标志控制(默认值为 15 秒)。

在每个时间段内,控制器管理器根据每个 HPA 定义中指定的指标查询资源利用率。

控制器管理器从资源指标 API(对于每个 Pod 资源指标)或自定义指标 API(对于所有其他指标)获取指标。

  • 对于每个 Pod 的资源指标(如 CPU),控制器从 HPA 所针对的每个 Pod 的资源指标 API 中获取指标。然后,如果设置了目标利用率值,则控制器将利用率值计算为每个 Pod 中容器上的等效资源请求的百分比。如果设置了目标原始值,则直接使用原始度量值。

    然后,控制器取所有目标 Pod 的利用率或原始值(取决于指定的目标类型)的平均值,并生成用于扩展所需副本数量的比率。

    请注意,如果 Pod 的某些容器没有设置相关的资源请求,则不会定义 Pod 的 CPU 利用率,并且自动缩放器不会针对该指标采取任何行动。

  • 对于每个 Pod 的自定义指标,控制器的功能类似于每个 Pod 的资源指标,不同之处在于它使用原始值,而不是利用率值。

  • 对于对象度量标准和外部度量标准,将获取一个描述相关对象的度量标准。

    将该指标与目标值进行比较,以产生上述比率。在autoscaling/v2beta2API 版本中,在进行比较之前,可以选择将此值除以 Pod 的数量

资源获取

  • kubelet 每 10 秒抓取一次 Pod 的 CPU 和内存使用情况

  • Horizo​​ntal Pod Autoscaler 每 15 秒检查一次 Pod 指标

  • 每分钟,Metrics Server 都会聚合这些指标并将它们公开给 k8s api

HPA部署实战

安装metrics

官网: github.com/kubernetes-…

安装官网一条命令安装既可(前提是你的k8s版本大于1.19+)

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml如
复制代码

如果版本低于1.19,那就使用下面命令(这是兼容版本,支持1.8到1.21)

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml查
复制代码

查看部署状态

kubectl get po -n kube-system | grep metrics
复制代码

应用配置HPA

这里以 前面章节中deployment 部署的springboot-hive为例,传送门: juejin.cn/post/697645…

配置hpa一条命令既可,这里为了直观方便,以Rancher界面配置

使用命令的话就是

kubectl autoscale deployment springboot-hive --cpu-percent=10 --min=1 --max=10
复制代码

我们这里了为方便压测,将CPU平均利用率设为10 

HAP界面

压测

hpa配置好之后,因为我们在开发环境,没有流量,所以了cpu也上不来,这里来压测一下,给pod加点压力,压测工具使用的WebBench

WebBench官网: github.com/EZLippi/Web…

压测命令:

t 是benchmark持续多久

c是指time时间内请求多少次

启动100个客户端同时请求接口,持续60s

webbench -t 60 -c 100 http://k8s-node1:30112/
复制代码

不一会就启动了一堆的机器

最后启动了10 就不会再扩展了,因为我们定义的就是10台,停止压测,需要等5分钟后,机器就会慢慢的回收,直接变成定义的1台

参考

learnk8s.io/kubernetes-…

kubernetes.io/docs/tasks/…

kubernetes.io/docs/tasks/…

分类:
后端
分类:
后端
收藏成功!
已添加到「」, 点击更改