Kubernetes 学习总结(40)—— Kubernetes 之 自动伸缩 HPA、VPA、CA和CPA详解

前言

Kubernetes 提供了多种自动伸缩机制,例如 HPA(Horizontal Pod Autoscaling),可以根据不同情况动态调整 Pod 副本数量。此功能使 Pod 能够有效地处理当前流量,而无需管理员不断干预来调整副本数量。除了 HPA 之外,Kubernetes 还提供了其他相关机制,例如 VPA(Vertical Pod Autoscaler)、CA(Cluster Autoscaler)和 CPA(Custom Pod Autoscaler)。

  1. 适用场景
  2. 触发条件
  3. 调整目标

我们将深入研究每个机制的这三个维度。

HPA(水平 Pod 自动缩放器)

适用场景

Deployment/ReplicaSet 可以部署 Pod 的多个副本,但固定数量缺乏灵活性,尤其是当应用程序流量根据特定时段波动时。在这种场景下,你可以使用HPA(Horizontal Pod Autoscaler)[1]来动态调整Pod的数量。

触发条件

HPA 是 Kubernetes 中的内置控制器。它与API Server通信以确定是否调整Pod的数量(增加或减少)。当 Metrics Server 安装在环境中时,它可以利用 CPU/内存等资源使用指标来做出决策。这些指标与 Pod 中配置的 CPU/内存请求进行比较,以确定是否超出阈值。此外,可以根据总体 Pod 使用情况或特定容器使用情况来计算使用情况。

调整目标

HPA 调整 Pod 的数量。 有多个参数(包括Behaviour)可以调整,允许你指定每次调整时 Pod 数量应变化的百分比或绝对值。除了默认的资源使用情况外,HPA 还可以结合 KEDA(https://keda.sh/)等指标或项目来提供不同角度的决策。

VPA(垂直 Pod 自动缩放器)

适用场景

与水平扩展副本数量以处理流量的 HPA 不同,VPA[2]会调整各个实例的资源使用情况,例如 CPU 和内存。将新应用程序部署到 Kubernetes 时,通常会遇到配置资源请求/限制设置的困难。VPA持续观察实例的资源使用情况并执行相关操作。这些操作可能涉及调整设置和重新启动 Pod,或者只是提供建议而不重新启动 Pod。后者依赖Operator根据观察到的资源使用情况收集和修改Deployment文件。

触发条件

在环境中部署 VPA 控制器后,你可以创建 VPA 来指定需要观察哪些Deployment。VPA 主要侧重于观察和计算 CPU/内存请求/限制设置的适当数字。观察这一点需要时间,并且基于太短的收集时间获得的结果可能会导致不适当的使用估计。

调整目标

VPA 以每个 Pod 为基础运行。它不会修改 Pod 副本的数量,但会估计 CPU/内存请求/限制使用情况。 Auto/Recreate模式下,设置相应的值,并重启Pod。在Off模式下,仅执行计算而不重新启动 Pod。

CPA(集群比例自动缩放器)

适用场景

HPA和VPA是管理资源使用、基于水平和垂直方面调整应用程序以满足当前需求的常用方法。CPA[3]旨在根据集群规模水平扩展 Pod 副本数量。一个常见的例子是 DNS 服务。CPA可以根据当前集群规模动态调整DNS实例数量,集群规模可以是节点数,也可以是整体CPU容量。与HPA/VPA关注应用本身的资源使用情况不同,CPA的触发调整是根据节点自身的能力进行的。设置从应用程序的角度开始,探索每个副本可以处理多少个节点实例或总 CPU 实例。相关设置包括coresPerReplicanodesPerReplica。当前合适的 Pod 数量使用以下公式计算:副本 = max(ceil(核心 * 1/coresPerReplica), ceil(节点 * 1/nodesPerReplica))

调整目标

CPA根据配置的coresPerReplicanodesPerReplica以及当前节点规模计算出合适的数量。它动态调整目标 Pod 副本。

CA(集群自动缩放器)

适用场景

之前的HPA、VPA、CPA等方法都是根据各种情况动态调整Pod的数量。CA[4]则根据具体情况动态调整节点数量。例如,当 Pod 充分利用所有节点上的资源,没有为新部署留下 CPU/内存资源时,CA 会动态添加新节点以提供额外的计算资源。反之,当节点资源使用率较低时,可以动态移除节点,尤其是在云环境中,以节省成本。在节点移除过程中,常见的做法是使用类似于Drain的方法。必须注意PodDisruptionBudget和TerminationGracePeriodSeconds等参数,以确保应用程序过渡期间对现有服务的影响最小。Drain 命令能否成功完成取决于该节点上的所有 Pod 是否都被成功移除。如果有 Pod 需要较长的时间(terminationGracePeriodSeconds)来处理 Grafecul 关闭过程,则节点驱逐的时间取决于这些 Pod 是否顺利终止。

触发条件

一个常见的触发场景是当任何 Pod 由于 k8s 集群资源不足而进入 Pending 状态时。此操作会提示 CA 控制器添加新节点。一旦新节点成功添加到 Kubernetes 集群并变为 Ready,应用程序就可以顺利部署和运行。相反,当节点使用率在一定时间内低于阈值时,可以移动目标节点上的 Pod 并删除该节点。不同的 Kubernetes 平台有不同的实现,因此需要确认具体的实现和相关设置,例如将新节点均匀分布在不同的可用区或使用注释来防止特定应用程序被驱逐。所有设置均取决于平台。

调整目标

CA 根据每个节点进行调整。 当一个节点被删除时,所有正在运行的 Pod 都会被重新调度到其他节点。

总结

Kubernetes提供了多种自动伸缩机制,如HPA(水平Pod自动缩放器),可根据不同情况动态调整Pod副本数量。此功能使Pod能够有效处理当前流量,无需管理员不断干预。除了HPA外,还有VPA(垂直Pod自动缩放器)、CA(集群比例自动缩放器)和CPA(自定义Pod自动缩放器)。它们分别从水平和垂直方面,以及整个集群规模角度,调整Pod和节点数量。这些机制相互补充,可根据需求灵活运用。

  1. 上述所有机制并不相互排斥。例如,某个应用类别可以使用HPA来调整Pod数量,并与CA相辅相成,动态调整节点数量以满足需求。

  2. 由于这些操作导致 Pod 和节点数量的增加或减少,可能会出现意外的 Pod 分发场景。在这种情况下,可能需要像descheduler[5]或Affinity、SpreadConstraint 这样的机制来平衡部署情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最前端|Flowise本地调试指南,让你轻松掌握调试技巧

目录 一、前言 二、环境要求 三、开发环境准备 四、调试后端代码 五、调试前端代码 六、环境变量配置【非必须】 一、前言 Flowise 是一个具备 3 个不同模块的 monorepo 工程,这 3 个模块分别负责: server: Node API 后端服务ui: React 前端compone…

哪些行业装配柔性线路板 (FPC)时用到UV胶水?

柔性线路板(FPC)因其可弯曲和轻薄的特性,在多种行业和应用中都有广泛的应用。以下是一些常见的行业和场景,它们在装配FPC时可能使用UV胶水: 1.电子产品制造: 移动设备:如智能手机、平板电脑和可…

解决Ubantu 18.04 输入正确密码后进不去桌面

今天在学习中遇到了一个问题,在Ubuntu中输入登录密码后进不去桌面,一直返回登录页面,是因为配置环境变量/etc/profile出现了问题,远程连接上ubantu或者使用ctrlaltF(1~6)输入用户名和密码(注意密…

QT中网络编程之发送Http协议的Get和Post请求

文章目录 HTTP协议GET请求POST请求QT中对HTTP协议的处理1.QNetworkAccessManager2.QNetworkRequest3.QNetworkReply QT实现GET请求和POST请求Get请求步骤Post请求步骤 测试结果 使用QT的开发产品最终作为一个客户端来使用,很大的一个功能就是要和后端服务器进行交互…

【大数据面试】MySQL面试题与答案

数据库中的事务是什么,MySQL中是怎么实现的 MySQL事务的特性? 数据库事务的隔离级别?解决了什么问题?默认事务隔离级别? 脏读,幻读,不可重复读的定义 MySQL怎么实现可重复读? 数据库第三范式和第四范式区别? MySQL的存储引擎? …

一键自动化脚本使用acme.sh部署RSA、ECC双证书,实现自动续期+钉钉告警

一键自动化脚本使用acme.sh部署RSA、ECC双证书,实现自动续期+钉钉告警。 ECC证书 相比 RSA证书, 密钥短了很少,但安全性还是有保证,ECC 是Elliptic curve cryptography的简写, 是一种建立公开密钥加密的算法,基于椭圆曲线。由于其密钥较短,运算速度较快,所以渐渐开始在…

【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 快慢指针 移动零 class…

客户服务常用的ChatGPT通用提示词模板

快速响应:如何快速响应客户的问题和需求? 问题解决:如何解决客户遇到的问题,提供满意的解决方案? 沟通渠道:如何建立多样化的沟通渠道,方便客户随时联系? 服务态度:如…

命令执行 [SWPUCTF 2021 新生赛]babyrce

打开题目 我们看到题目说cookie值admin等于1时,才能包含文件 bp修改一下得到 访问rasalghul.php,得到 题目说如果我们get传入一个url且不为空值,就将我们get姿势传入的url的值赋值给ip 然后用正则过滤了 / /,如果ip的值没有 / …

PLC智能网关,实现PLC联网

在工业自动化领域,PLC(可编程逻辑控制器)的应用日益广泛。然而,传统的PLC系统通常面临着联网难题,限制了数据的共享和远程监控的可能性。在这个背景下,PLC智能网关应运而生。本文将围绕“PLC智能网关&#…

Java第一个程序——Hello,World!

“Hello, world”的由来可以追溯到 The C Programming Language 。在这门编程语言中,它被用作第一个演示程序,向人们展示了在计算机屏幕上输出“Hello world”这行字符串的计算机程序。由于这个演示程序的简洁性和直观性,它成为了许多初学者学…

TikTok文化独白:短视频如何塑造社会心态?

在数字时代的浪潮中,社交媒体平台已然成为影响社会心态的重要力量,而TikTok以其独特的短视频形式,成为年轻一代传达思想和情感的重要场所。本文将深入探讨TikTok文化的独白,研究短视频是如何在这个充满活力的平台上塑造和反映社会…

谷歌Gemini与GPT-3.5 Turbo的实力比较;半小时写了一个简单的1945游戏

🦉 AI新闻 🚀 谷歌Gemini与GPT-3.5 Turbo的实力比较 摘要:卡耐基梅隆大学进行了专业客观的第三方比较,发现Gemini Pro版本接近但略逊于GPT-3.5 Turbo,GPT-4则领先。Gemini在不同任务中表现出一些奇怪的特性&#xff…

String 的转换 ,你平时有关注过么?

大家平时需要将一个值转换成字符串类型 String时是如果操作的? 随缘? 还是看心情? toString (String) String.valueOf() 这三个玩意的区别是啥? toString ,是某个对象的函数 所以有3个点要…

AcWing算法提高课-2.2.2武士风度的牛

算法提高课整理 CSDN个人主页:更好的阅读体验 原题链接 题目描述 农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛。 这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走…

js 深浅拷贝的区别和实现方法

一:什么浅拷贝: 浅拷贝创建一个新对象,然后将原始对象的所有属性值复制到新对象中。这意味着,如果原始对象的属性值是基本类型(例如数字、字符串),那么这些值会被直接复制到新对象中。但如果属…

智能优化算法应用:基于蜜獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蜜獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蜜獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜜獾算法4.实验参数设定5.算法结果6.参考文献7.MA…

高效单节锂电池3V-4.2V升压12V1A解决方案

高效单节锂电池3V-4.2V升压12V1A解决方案 随着便携式产品的发展,对电源管理的要求越来越高。如何将单节锂电池的3V-4.2V电压升高至12V,成为了一种常见的需求。针对这一需求,本文将介绍一款高效、可靠的升压解决方案。 产品特性: …

Linux(1)_基础知识

第一部分 一、Linux系统概述 创始人:芬兰大学大一的学生写的Linux内核,李纳斯托瓦兹。 Linux时unix的类系统; 特点:多用户 多线程的操作系统; 开源操作系统; 开源项目:操作系统,应用…

鸿鹄工程项目管理系统源码:Spring Cloud与前后端分离的完美结合

在现代化的工程项目管理中,一套功能全面、操作便捷的系统至关重要。本文将介绍一个基于Spring Cloud和Spring Boot技术的Java版工程项目管理系统,结合Vue和ElementUI实现前后端分离。该系统涵盖了项目管理、合同管理、预警管理、竣工管理、质量管理等多个…