Kubernetes VPA
Kubernetes Vertical Pod Autoscaler (VPA) 是一种自动缩放器,可以根据历史资源使用情况对CPU memory 的 request 和 limit 调整。如果使用得当,可以帮助您在容器级别高效、自动地分配 Kubernetes 集群的资源。
从技术角度了解 VPA 的工作原理以及它的作用可以更好的利用这种机制
本文将介绍三种类型的自动扩缩容,然后详细探讨 VPA 的用法和优势,以便可以使用 Kubernetes VPA!
Kubernetes三种自动扩缩容机制
有三种类型的 K8s 自动扩缩容机制,每种都有不同的用途。它们是:
- Horizontal Pod Autoscaler(HPA):调整应用程序的副本数。HPA 根据 CPU 利用率扩展复制控制器、部署、副本集或有状态集中的 Pod 数量。HPA 还可以配置为根据自定义或外部指标做出扩展决策。
- Cluster Autoscaler (CA):调整集群中的节点数。当节点没有足够的资源来运行 Pod(添加节点)或节点仍未充分利用时,群集自动缩放程序会自动添加或删除群集中的节点,并且可以将其 Pod 分配给另一个节点(删除节点)。
- Vertical Pod Autoscaler (VPA):调整集群中容器的资源请求和限制。
什么是 Kubernetes VPA?
Kubernetes Vertical Pod Autoscaler (VPA) 是在集群中安装的组件。它增加和减少容器 CPU 和内存资源配置,使集群资源分配与实际使用情况保持一致。
接下来,介绍一些重要的 VPA 概念。
Kubernetes VPA 资源配置类型
使用 VPA,我们可以在 Pod 的每个容器上管理两种不同类型的资源配置:
- 请求Requests
- 限制Limits
什么是请求?
请求定义容器所需的最小资源量。例如,应用程序可以使用超过 256MB 的内存,但如果其请求是 256MB 的内存,则 Kubernetes 将保证容器至少为 256MB。
什么是限制?
限制定义给定容器可以消耗的最大资源量。您的应用程序可能需要至少 256MB 的内存,但您可能希望确保它消耗的内存不超过 512MB,即将其内存消耗限制为 512MB
Kubernetes VPA vs. HPA
从根本上说,VPA 和 HPA 之间的区别在于它们的扩展方式。HPA 通过添加或删除 Pod 进行扩展,从而水平扩展容量。但是,VPA 通过增加或减少现有 Pod 容器中的 CPU 和内存资源进行扩展,从而垂直扩展容量。下表更详细地解释了 Kubernetes VPA 和 HPA 之间的差异。
需要调整容量 | HPA | VPA |
---|---|---|
需要扩容时 | 添加更多Pod | 增加现有 Pod 容器的 CPU 或内存资源 |
需要缩容时 | 移除Pod | 减少现有 Pod 容器的 CPU 或内存资源 |
参考下图了解 VPA 的工作原理:
VPA 的组件
VPA 部署有三个主要组件:VPA Recommender, VPA Updater, and VPA Admission Controller。
VPA Recommender:
- 监视资源利用率并计算目标值。
- 查看指标历史记录、OOM 事件和部署spec,并提出公平的请求。限制根据定义的限制-请求比例提高/降低。
VPA 更新程序:
- 逐出那些需要新资源限制的 Pod。
- 实现Recommender建议的内容(如果定义了“updateMode: Auto”)。
VPA 准入控制器:
- 每当 VPA 更新程序逐出并重新启动容器时,都会在新容器启动之前更改 CPU 和内存设置(使用 Webhook)。
- 如果 Pod 需要在垂直容器自动缩放程序将 updateMode 设置为“自动”时更改容器的资源请求,则逐出容器。由于 Kubernetes 的设计,修改正在运行的 Pod 的资源请求的唯一方法是重新创建 Pod。
Kubernetes VPA 如何工作?
下图提供了 Kubernetes VPA 如何工作的实际示例,并随后对每个步骤进行了编号说明。
- 用户配置 VPA。
- VPA Recommender从指标服务器读取 VPA 配置和资源利用率指标。
- VPA Recommender提供容器资源建议。
- VPA Updater程序会读取容器资源建议。
- VPA Updater程序启动容器终止。
- deployment意识到容器已终止,并将重新创建容器以匹配其副本配置。
- 当容器处于重新创建过程中时,VPA Admission Controller会获取容器资源建议。由于 Kubernetes 不支持动态更改正在运行的 Pod 的资源限制,因此 VPA 无法使用新的限制更新现有 Pod。它会终止使用过时限制的 Pod。当容器的控制器从 Kubernetes API 服务请求替换时,VPA Admission Controller会将更新的资源请求和限制值注入到新容器的spec中。
- 最后,VPA 准入控制器会覆盖对容器的建议。在我们的示例中,VPA 准入控制器向 Pod 添加了一个“250m”CPU。
Kubernetes VPA 的局限性
VPA 在许多应用程序中都很有用,但有几个重要的限制需要牢记。
- 请勿将垂直容器自动缩放与水平容器自动缩放机制一起使用,后者根据相同的资源指标(如 CPU 和内存使用情况)进行缩放。这是因为当指标(CPU/内存)达到其定义的阈值时,VPA 和 HPA 将同时发生扩展事件,这可能会产生未知的副作用并可能导致问题。
- VPA 可能会建议比集群中可用的资源更多,从而导致 Pod 未分配给节点(由于资源不足),因此永远不会运行。若要克服此限制,最好将 LimitRange 设置为最大可用资源。这将确保 Pod 请求的资源不会超过限制范围定义的资源。
总结
以下是本文关键要点的摘要:
- Kubernetes 中有三种类型的自动缩放:Horizontal Pod Autoscaler, Cluster Autoscaler, and Vertical Pod Autoscaler
- 三种自动扩缩容机制都是不同的,了解不同他们的工作原理将有助于更好地配置集群。
- 在没有 VPA 的情况下使用 HPA 可能会通过复制未充分利用的 Pod 来满足不断增加的工作负载来积累浪费的资源。
- 使用 VPA 时,请确保设置每个 Pod 的最大资源数,因为 VPA 建议可能会超过集群中的可用资源。
Kubernetes VPA相关推荐
- Kubernetes VPA配置
作者:Breeze 序言: VPA的全称为vertical-pod-autoscaler,即pod的垂直的自动伸缩, 相对于HPA的横向伸缩(增加或减少pod数量), VPA通过调整现有POD的res ...
- k8s之vpa浅析(附带案例)
VPA 参考链接:https://www.kubecost.com/kubernetes-autoscaling/kubernetes-vpa/ 官网链接:https://github.com/kub ...
- K8S中的pod自动扩容与缩容
k8s应用自动扩容缩容方案 原因: 在实际的业务场景中,我们经常会遇到某个服务需要扩容的场景(例如:测试对服务压测.电商平台秒杀.大促活动.或由于资源紧张.工作负载降低等都需要对服务实例数进行扩缩容操 ...
- Kubernetes Pod垂直自动伸缩(VPA)
VPA 简介 VPA 全称 Vertical Pod Autoscaler,即垂直 Pod 自动扩缩容,它根据容器资源使用率自动设置 CPU 和 内存 的requests,从而允许在节点上进行适当的调 ...
- Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局
传统弹性伸缩的困境 弹性伸缩是 Kubernetes 中被大家关注的一大亮点,在讨论相关的组件和实现方案之前.首先想先给大家扩充下弹性伸缩的边界与定义,传统意义上来讲,弹性伸缩主要解决的问题是容量规划 ...
- 以 Kubernetes 为代表的容器技术,已成为云计算的新界面
来源 | 阿里巴巴云原生公众号 作者 | 志敏.智清 2020 年 双11,阿里核心系统实现了全面云原生化,扛住了史上最大流量洪峰,向业界传达出了"云原生正在大规模落地"的信号.这 ...
- 灵魂拷问,上 Kubernetes 有什么业务价值?
本文整理自 2020 年 7 月 22 日<基于 Kubernetes 与 OAM 构建统一.标准化的应用管理平台>主题线上网络研讨会.文章共分为上下两篇,本文为上篇,主要和大家介绍上 K ...
- 第3章:Kubernetes监控与日志管理
1.查看集群资源状况 集群整体状态: kubectl cluster-info 更多集群信息: kubectl cluster-info dump 查看资源信息 kubectl describe &l ...
- 云计算的新界面—Kubernetes容器技术
简介:可以说,以 Kubernetes 为代表的容器技术正成为云计算新界面.容器提供了应用分发和交付标准,将应用与底层运行环境进行解耦.Kubernetes 作为资源调度和编排的标准,屏蔽底层架构差异 ...
最新文章
- exfat驱动源码 linux_Linux 5.4内核正式发布:原生支持exFAT、AMD成最大赢家
- SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能
- 把配置的jenkins主路径删掉_Jenkins详细教程
- c语言 数组指针传递给函数_嵌入式开发-C语言-指针与数组
- easyui 年份下拉框的构建
- 转帖:django下操作数据库的字符问题
- 容器技术Docker K8s 5 容器技术在阿里巴巴落地历程
- 小学生c语言入门教程,啊哈C语言(小学生坐在马桶上都能看懂C语言入门教程).pdf...
- 焦作统计年鉴 2017年
- log4j 日志书写格式_Log4J日志配置详解
- WorkPlus即时通讯软件,满足政企局域网办公需求
- mysql支持3条用来创建循环的语句_MySql学习笔记——存储过程
- 串行通讯控制器8250
- Jmeter Ant Jenkins报告优化——jmeter.results.shanhe.me模板的response和request值为空
- html日志网页,以HTML为表现的日志记录组件
- 游狼html鼠标,《速评13》65g极轻FPS鼠标游狼SK
- 腾讯技术专家解读《FinOps,从上云到上好云》
- 半导体器件物理【5】固体量子 —— 能带与k空间
- [模拟][模电][面试][运放]仪表放大器
- scipy求解矩阵微分方程