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 在许多应用程序中都很有用,但有几个重要的限制需要牢记。文章来源:https://www.toymoban.com/news/detail-402739.html
- 请勿将垂直容器自动缩放与水平容器自动缩放机制一起使用,后者根据相同的资源指标(如 CPU 和内存使用情况)进行缩放。这是因为当指标(CPU/内存)达到其定义的阈值时,VPA 和 HPA 将同时发生扩展事件,这可能会产生未知的副作用并可能导致问题。
- VPA 可能会建议比集群中可用的资源更多,从而导致 Pod 未分配给节点(由于资源不足),因此永远不会运行。若要克服此限制,最好将 LimitRange 设置为最大可用资源。这将确保 Pod 请求的资源不会超过限制范围定义的资源。
总结
以下是本文关键要点的摘要:文章来源地址https://www.toymoban.com/news/detail-402739.html
- Kubernetes 中有三种类型的自动缩放:Horizontal Pod Autoscaler, Cluster Autoscaler, and Vertical Pod Autoscaler
- 三种自动扩缩容机制都是不同的,了解不同他们的工作原理将有助于更好地配置集群。
- 在没有 VPA 的情况下使用 HPA 可能会通过复制未充分利用的 Pod 来满足不断增加的工作负载来积累浪费的资源。
- 使用 VPA 时,请确保设置每个 Pod 的最大资源数,因为 VPA 建议可能会超过集群中的可用资源。
到了这里,关于Kubernetes VPA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!