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 如何工作的实际示例,并随后对每个步骤进行了编号说明。

  1. 用户配置 VPA。
  2. VPA Recommender从指标服务器读取 VPA 配置和资源利用率指标。
  3. VPA Recommender提供容器资源建议。
  4. VPA Updater程序会读取容器资源建议。
  5. VPA Updater程序启动容器终止。
  6. deployment意识到容器已终止,并将重新创建容器以匹配其副本配置。
  7. 当容器处于重新创建过程中时,VPA Admission Controller会获取容器资源建议。由于 Kubernetes 不支持动态更改正在运行的 Pod 的资源限制,因此 VPA 无法使用新的限制更新现有 Pod。它会终止使用过时限制的 Pod。当容器的控制器从 Kubernetes API 服务请求替换时,VPA Admission Controller会将更新的资源请求和限制值注入到新容器的spec中。
  8. 最后,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相关推荐

  1. Kubernetes VPA配置

    作者:Breeze 序言: VPA的全称为vertical-pod-autoscaler,即pod的垂直的自动伸缩, 相对于HPA的横向伸缩(增加或减少pod数量), VPA通过调整现有POD的res ...

  2. k8s之vpa浅析(附带案例)

    VPA 参考链接:https://www.kubecost.com/kubernetes-autoscaling/kubernetes-vpa/ 官网链接:https://github.com/kub ...

  3. K8S中的pod自动扩容与缩容

    k8s应用自动扩容缩容方案 原因: 在实际的业务场景中,我们经常会遇到某个服务需要扩容的场景(例如:测试对服务压测.电商平台秒杀.大促活动.或由于资源紧张.工作负载降低等都需要对服务实例数进行扩缩容操 ...

  4. Kubernetes Pod垂直自动伸缩(VPA)

    VPA 简介 VPA 全称 Vertical Pod Autoscaler,即垂直 Pod 自动扩缩容,它根据容器资源使用率自动设置 CPU 和 内存 的requests,从而允许在节点上进行适当的调 ...

  5. Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局

    传统弹性伸缩的困境 弹性伸缩是 Kubernetes 中被大家关注的一大亮点,在讨论相关的组件和实现方案之前.首先想先给大家扩充下弹性伸缩的边界与定义,传统意义上来讲,弹性伸缩主要解决的问题是容量规划 ...

  6. 以 Kubernetes 为代表的容器技术,已成为云计算的新界面

    来源 | 阿里巴巴云原生公众号 作者 | 志敏.智清 2020 年 双11,阿里核心系统实现了全面云原生化,扛住了史上最大流量洪峰,向业界传达出了"云原生正在大规模落地"的信号.这 ...

  7. 灵魂拷问,上 Kubernetes 有什么业务价值?

    本文整理自 2020 年 7 月 22 日<基于 Kubernetes 与 OAM 构建统一.标准化的应用管理平台>主题线上网络研讨会.文章共分为上下两篇,本文为上篇,主要和大家介绍上 K ...

  8. 第3章:Kubernetes监控与日志管理

    1.查看集群资源状况 集群整体状态: kubectl cluster-info 更多集群信息: kubectl cluster-info dump 查看资源信息 kubectl describe &l ...

  9. 云计算的新界面—Kubernetes容器技术

    简介:可以说,以 Kubernetes 为代表的容器技术正成为云计算新界面.容器提供了应用分发和交付标准,将应用与底层运行环境进行解耦.Kubernetes 作为资源调度和编排的标准,屏蔽底层架构差异 ...

最新文章

  1. exfat驱动源码 linux_Linux 5.4内核正式发布:原生支持exFAT、AMD成最大赢家
  2. SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能
  3. 把配置的jenkins主路径删掉_Jenkins详细教程
  4. c语言 数组指针传递给函数_嵌入式开发-C语言-指针与数组
  5. easyui 年份下拉框的构建
  6. 转帖:django下操作数据库的字符问题
  7. 容器技术Docker K8s 5 容器技术在阿里巴巴落地历程
  8. 小学生c语言入门教程,啊哈C语言(小学生坐在马桶上都能看懂C语言入门教程).pdf...
  9. 焦作统计年鉴 2017年
  10. log4j 日志书写格式_Log4J日志配置详解
  11. WorkPlus即时通讯软件,满足政企局域网办公需求
  12. mysql支持3条用来创建循环的语句_MySql学习笔记——存储过程
  13. 串行通讯控制器8250
  14. Jmeter Ant Jenkins报告优化——jmeter.results.shanhe.me模板的response和request值为空
  15. html日志网页,以HTML为表现的日志记录组件
  16. 游狼html鼠标,《速评13》65g极轻FPS鼠标游狼SK
  17. 腾讯技术专家解读《FinOps,从上云到上好云》
  18. 半导体器件物理【5】固体量子 —— 能带与k空间
  19. [模拟][模电][面试][运放]仪表放大器
  20. scipy求解矩阵微分方程

热门文章

  1. 地球大数据报告发布了,了解一下
  2. FBA发货限制大改革,准备好的货还敢发吗?
  3. 【Mac】Mac使用大全
  4. X1 CARBON加装固态
  5. c++gdal如何在大图像中截取小图像并获取其图像信息_文字、公式编辑上传一键解决,海马扫描打造教育信息化AI智能方案...
  6. IoT 笔记收录快报 - 智能摄像
  7. 10大堪称神器的Chrome插件,工作效率倍速提升
  8. Omnigraffle Pro 6 Axure RP Pro MAC注册码许可证
  9. Proteus基础元件名称
  10. 中国信通院魏博锴:云原生混部标准解读