全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

K8s pod动态弹性扩缩容HAP

发布时间:2022-09-22 10:58:00
发布人:syq

  概述

  Horizontal Pod Autoscaler(HPA,Pod水平自动伸缩),根据平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标自动调整 Deployment 、ReplicaSet 或 StatefulSet 或其他类似资源,实现部署的自动扩展和缩减,让部署的规模接近于实际服务的负载。HPA不适用于无法缩放的对象,例如DaemonSet。

K8s pod动态弹性扩缩容HAP

  官方文档:https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/

  实际生产中,一般使用这四类指标:

  Resource metrics——CPU核 和 内存利用率指标。

  Pod metrics——例如网络利用率和流量。

  Object metrics——特定对象的指标,比如Ingress, 可以按每秒使用请求数来扩展容器。

  Custom metrics——自定义监控,比如通过定义服务响应时间,当响应时间达到一定指标时自动扩容。

  安装 metrics-server

  HAP 前提条件

  默认情况下,Horizontal Pod Autoscaler 控制器会从一系列的 API 中检索度量值。集群管理员需要确保下述条件,以保证 HPA 控制器能够访问这些 API:

  对于资源指标,将使用 metrics.k8s.io API,一般由 metrics-server 提供。它可以作为集群插件启动。

  对于自定义指标,将使用 custom.metrics.k8s.io API。它由其他度量指标方案厂商的“适配器(Adapter)” API 服务器提供。检查你的指标管道以查看是否有可用的 Kubernetes 指标适配器。

  对于外部指标,将使用 external.metrics.k8s.io API。可能由上面的自定义指标适配器提供。

  Kubernetes Metrics Server:

  Kubernetes Metrics Server 是 Cluster 的核心监控数据的聚合器,kubeadm 默认是不部署的。

  Metrics Server 供 Dashboard 等其他组件使用,是一个扩展的 APIServer,依赖于 API Aggregator。所以,在安装 Metrics Server 之前需要先在 kube-apiserver 中开启 API Aggregator。

  Metrics API 只可以查询当前的度量数据,并不保存历史数据。

  Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 下维护。

  必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 kubelet Summary API 获取数据。

  开启 API Aggregator

31

32

  开始安装 metrics-server

  下载

320

  修改

35

  解决方法:在metrics-server中添加--kubelet-insecure-tls参数跳过证书校验

36

  开始安装

37

38

  Horizontal Pod Autoscaler 工作原理

640

  原理架构图

  自动检测周期由 kube-controller-manager 的 --horizontal-pod-autoscaler-sync-period 参数设置(默认间隔为 15 秒)。

  metrics-server 提供 metrics.k8s.io API 为pod资源的使用提供支持。

  15s/周期 -> 查询metrics.k8s.io API -> 算法计算 -> 调用scale 调度 -> 特定的扩缩容策略执行。

  HPA扩缩容算法

  从最基本的角度来看,Pod 水平自动扩缩控制器根据当前指标和期望指标来计算扩缩比例。

50

  扩容

  如果计算出的扩缩比例接近 1.0, 将会放弃本次扩缩, 度量指标 / 期望指标接近1.0。

  缩容

  冷却/延迟: 如果延迟(冷却)时间设置的太短,那么副本数量有可能跟以前一样出现抖动。默认值是 5 分钟(5m0s)--horizontal-pod-autoscaler-downscale-stabilization

  特殊处理

  丢失度量值:缩小时假设这些 Pod 消耗了目标值的 100%, 在需要放大时假设这些 Pod 消耗了 0% 目标值。这可以在一定程度上抑制扩缩的幅度。

  存在未就绪的pod的时候:我们保守地假设尚未就绪的 Pod 消耗了期望指标的 0%,从而进一步降低了扩缩的幅度。

  未就绪的 Pod 和缺少指标的 Pod 考虑进来再次计算使用率。如果新的比率与扩缩方向相反,或者在容忍范围内,则跳过扩缩。否则,我们使用新的扩缩比例。指定了多个指标, 那么会按照每个指标分别计算扩缩副本数,取最大值进行扩缩。

  HPA 对象定义

55

  HPA对象默认行为

56

  示例演示

  编排yaml

57

  主要参数解释如下:

  scaleTargetRef:目标作用对象,可以是Deployment、ReplicationController或ReplicaSet。

  minReplicas和maxReplicas:Pod副本数量的最小值和最大值,系统将在这个范围内进行自动扩缩容操作,并维持每个Pod的内存使用率为40%,这个值就是上面设置的阈值averageUtilization。

  metrics:目标指标值。在metrics中通过参数type定义指标的类型;通过参数target定义相应的指标目标值,系统将在指标数据达到目标值时(考虑容忍度的区间,见前面算法部分的说明)触发扩缩容操作。

  对于CPU使用率,在target参数中设置averageUtilization定义目标平均CPU使用率。

  对于内存资源,在target参数中设置AverageValue定义目标平均内存使用值。

  执行

42

  使用 ab 工具进行压测

  进入apache官网 下载apache即可,或者直接通过yum安装apache都行,这里选择最简单的方式yum安装

43

  开始压测

44

45

46

  从上图发现已经实现了根据CPU 动态扩容了。

相关文章

图卷积网络和self-attention有什么区别?

图卷积网络和self-attention有什么区别?

2023-10-15
深度学习模型权重h5、weights、ckpt、pth有什么区别?

深度学习模型权重h5、weights、ckpt、pth有什么区别?

2023-10-15
机器学习中Inference和predict的区别是什么?

机器学习中Inference和predict的区别是什么?

2023-10-15
kd-tree和ball-tree在算法实现原理上有什么区别?

kd-tree和ball-tree在算法实现原理上有什么区别?

2023-10-15

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取