前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文搞懂 Kubernetes Autoscaling 技术

一文搞懂 Kubernetes Autoscaling 技术

作者头像
Luga Lee
发布2023-08-09 17:01:10
1.1K0
发布2023-08-09 17:01:10
举报
文章被收录于专栏:架构驿站架构驿站
Hello folks,我是 Luga,今天我们来聊一下云原生生态核心技术—— Kubernetes Autoscaling。

在我们管理庞大的 Kubernetes Cluster 的过程中,随着业务量的急剧增长,我们面临着一系列的挑战。为了更好地推动我们的平台发展,我们必须进行大量的性能测试,尝试大规模启用和扩展我们的服务实例。这种不断变化和扩展的需求,使得我们无法准确预测未来所需的计算资源的数量,这无疑增加了我们的运维难度。

然而,尽管我们的技术有其局限性,我们不能始终准确预测计算资源的增长,我们仍有责任确保服务始终可用,并且始终保持资源的有效利用。我们必须避免在资源不足时导致的服务中断,同时,也要避免在资源过剩时造成的资源浪费。

为了实现这一目标,我们选择使用 Kubernetes 的自动缩放功能。借助此功能可以实现根据实际的工作负载动态调整资源分配,既保证了服务的稳定性,又使得资源的高效利用。当工作负载增加时,自动缩放功能可以迅速扩展资源,保证服务的正常运行;当工作负载减少时,它又可以适时地缩减资源,避免资源的闲置和浪费。

01

业务背景

通常而言,Kubernetes Autoscaling (自动缩放)是一种计算技术,它可以根据应用程序的传入流量动态调整计算资源(如 CPU 和内存),从而更有效地利用资源。即使在虚拟机时代,自动缩放技术也已经广泛应用。现在,它已成为 Kubernetes 等容器编排工具的核心功能之一。

假设我们在 Kubernetes Cluster 上部署并运行了一个应用程序,但我们不确定应用程序的扩展需求或需要多少资源。在这种情况下,即使我们没有使用资源,我们仍然需要支付更多的成本。Autoscaling 通常可以帮助我们以如下两种方式更有效地利用资源:

1、在负载较低时减少 Pod 或 Node 的数量。

2、在流量高峰时增加 Pod 或 Node 的数量。

基于不同的业务场景,以下是一些使用自动缩放优化资源的具体方法,可供参考:

1、通过使用基础设施来节省成本。

2、在负载不可预测的情况下增加工作负载的正常运行时间。

Kubernetes Autoscaling (自动缩放)技术可以帮助我们在低流量场景下自动缩放,一旦我们拥有一些可用容量,便能够运行时间敏感性较低的工作负载。这样可以更好地管理和利用计算资源,提高系统的可用性和性能,同时减少开销和成本。

02

什么是 Kubernetes Autoscaling ?

Autoscaling,即“弹性”或“自动缩放”,是 Kubernetes 中的一种非常核心的功能,它可以根据给定的指标(例如 CPU 或内存)自动缩放 Pod 副本,从而更好地管理和利用计算资源。这是一种非常有用的工具,可以帮助我们更好地管理 Kubernetes Cluster 环境,提高系统的可用性和性能。

为了实现自动缩放,我们可以使用 Horizontal Pod Autoscaler(HPA)。HPA 是Kubernetes 提供的一种自动缩放功能,可以根据 Pod 的资源使用情况动态地调整 Pod 副本数,从而确保应用程序始终具有所需的计算资源。除了 HPA 之外,我们还可以使用集群/节点自动缩放器来动态添加新节点,以自动扩展 Kubernetes 工作节点。

一些托管 Kubernetes 产品(如 Google 的 GKE )已经提供了这种自动扩展功能,使得自动缩放变得更加容易和无缝。这样,我们就不必重新发明轮子或担心实施,可以轻松地实现自动缩放功能,确保我们的应用程序始终具有足够的计算资源。

作为一个核心功能,能够根据负载情况自动调整应用程序实例的数量,以确保应用程序的可用性和性能。Kubernetes 提供了三种不同的自动缩放方法,以满足不同的业务需求和应用程序特点:

1、 Horizontal Pod Autoscaler (HPA)

此种方法通常被称为横向扩展,它是 Kubernetes 中自动缩放功能的一种实现方式。在横向扩展中,Kubernetes 允许 DevOps 工程师、SRE 或集群管理员根据应用程序的资源使用情况自动增加或减少 pod 的数量。使用自动横向扩展(Horizontal Pod Autoscaler,HPA),通常会为 CPU 和内存等指标设置一个阈值,然后根据 Pod 的当前使用情况相对于设置的阈值来增加或减少运行的 Pod 数量。

横向扩展是一种非常重要的自动缩放方式,可以根据应用程序的负载情况自动进行容器实例的调整,从而确保应用程序的可用性和性能。使用 HPA 进行横向扩展时,需要设置目标 CPU 和内存使用率的阈值,并根据实际使用率自动调整 Pod 的数量。例如,如果应用程序的 CPU 使用率超过目标阈值,HPA 就会自动增加 Pod 的数量,以满足应用程序的负载需求。反之,如果使用率降低,则会自动减少 Pod 的数量,以避免容器资源的浪费。

需要注意的是,在使用 HPA 进行横向扩展时,需要考虑容器资源的限制和调度算法的影响。如果容器的资源限制太低,就可能会导致应用程序性能下降或者容器实例无法启动。同时,调度算法也会影响容器实例的分配和调整,因此需要根据实际情况进行调整和优化。在实际应用中,建议结合应用程序的实际情况和业务需求,进行适当的横向扩展配置和优化,以确保应用程序的可用性和性能。

2、Vertical Pod Autoscaler (VPA)

与上述水平相对而言,此种方法通常被称为按比例放大,也就是垂直扩展。在垂直扩展中,我们会向现有机器投入更多资源,例如 CPU 和内存,以满足应用程序的需求。在 Kubernetes 上下文中,Vertical Pod Autoscaler(VPA)可以自动调整 Pod 的 CPU 和内存资源请求,以确保应用程序的性能和稳定性。

VPA 是一种非常实用的自动扩展方式,它可以根据应用程序的实际需求自动调整 Pod 的 CPU 和内存资源请求。使用 VPA,我们无需担心 CPU 和内存请求的使用值以及 Pod 的限制。相反,VPA 可以通过监控应用程序的负载情况,自动调整 Pod 的资源请求,从而确保应用程序的性能和稳定性。

需要注意的是,在使用 VPA 进行垂直扩展时,同样也需要考虑容器资源的限制和调度算法的影响。

3、Cluster Autoscaler (CA)

此种方式与前面的2种弹性方式不同。Cluster Autoscaler 是一种根据 Pod 的资源请求自动添加或删除集群中节点的自动扩展功能。与水平和垂直扩展不同,Cluster Autoscaler 不会直接测量 CPU 和内存使用值来做出扩展决策。相反,每 10 秒它会检查一次,以检测任何处于挂起状态的 Pod,这表明调度程序由于集群容量不足而无法将它们分配给节点。

Cluster Autoscaler 是一种非常实用的自动扩展方式,它可以根据应用程序的负载情况自动调整集群的容量。当集群中的 Pod 数量无法满足应用程序的需求时,Cluster Autoscaler 会自动添加新节点,以扩展集群容量。另外,当负载较低时,Cluster Autoscaler 会自动删除节点,以避免资源的浪费。

03

Kubernetes Autoscaling 实现原理机制

在 Kubernetes 集群中实现自动缩放需要先安装指标服务器,以便自动缩放器(如 HPA 和 VPA)能够收集有关 Pod 的 CPU 和内存利用率等指标。

指标服务器 API 是自动缩放中的重要组成部分。自动缩放器定义为 Kubernetes API 资源和控制器,其使用指标服务器 API 定期扫描 Pod 的指标,例如平均 CPU 利用率、平均内存利用率或其他自定义指标,然后根据预设的目标值增加或减少副本数,以匹配观察到的指标。

自动缩放是一种非常实用的功能,可以根据应用程序的负载情况自动调整 Pod 的数量。在实际应用中,建议结合应用程序的实际情况和业务需求,进行适当的自动缩放配置和优化,以确保应用程序的可用性和性能。

在目前的云原生平台,Pod 弹性和 Node 弹性是 Kubernetes 中两种最为常见的自动扩展方式。两者的主要区别在于,Pod 扩展是通过增加或减少 Pod 的数量来处理负载需求的增加或减少,而 Node 扩展则是通过添加或删除集群中的节点来处理负载需求的增加或减少。

在 Pod 弹性中,我们可以根据 Pod 的资源利用率、自定义指标等指标来自动调整 Pod 的数量,以满足应用程序的需求。例如,通过水平 Pod 自动扩展器(HPA)可以根据 CPU 利用率或其他自定义指标来动态地调整 Pod 的数量。

相比之下,Node 弹性是通过向集群添加新节点来自动扩展集群容量,以满足负载需求的增加。例如,集群自动扩放器(CA)可以根据集群的负载情况自动添加新节点。

04

Kubernetes Autoscaling 的最佳实践指南

如下为在实际的业务场景中,Kubernetes Autoscaling 的最佳实践,可供参考,具体:

1、确保 HPA 和 VPA 策略不冲突

在 Kubernetes 中,Vertical Pod Autoscaler (VPA) 可以自动调整容器请求和限制配置,从而减少资源浪费,实现成本节约。而 Horizontal Pod Autoscaler (HPA) 则旨在根据负载变化自动调整 Pod 数量,以实现应用程序的水平扩展。因此,在同时使用 VPA 和 HPA 时,需要仔细检查它们的策略是否相互干扰。因此,在为业务或应用程序设计集群时,我们尽可能检查我们所定义的相关设置,以确保应用程序能够在不同负载下平稳运行,并且资源利用率得到最大化。

2、采用实例加权分数模型

在选择最适合自动扩展的实例大小和类型时,建议使用实例加权分数。这种方法非常适用于采用多样化的资源分配策略和使用特定实例的场景。有时候,我们的工作负载可能会占用超过其请求的资源,这可能是因为应用程序确实需要更多的资源,还是因为这些资源仅仅是可用的,但并非迫切需要的呢?通过使用实例加权分数,我们可以更好地了解每个实例类型和大小在满足工作负载需求方面的表现,从而更好地优化资源利用和成本控制。这样可以确保我们的应用程序在各种负载情况下都能够平稳运行,并最大程度地利用可用资源。

3、设计混合实例策略

混合实例策略可以帮助我们以更合理的成本开展高可用性和性能优异的工作负载。通过从多种实例类型中进行选择,我们可以选择某些成本更低但性能足够好的实例来运行我们的容器实例,但这可能不太适合需要高吞吐量和低延迟的负载。根据实际的工作负载情况,我们可以选择使用最便宜的机器并使其全部正常工作,或者可以在数量较少但规格较高的机器上运行,从而会为带来巨大的成本节省。但由于每个 Node 节点上都需要安装 Kubernetes,从而会增加一定的资源开销。

那么,问题便是如何扩展混合实例呢?

在混合实例情况下,每个实例使用不同类型的资源。因此,当我们扩展自动缩放组中的实例并使用 CPU 和网络利用率等指标时,我们通常可能会得到不一致的指标。为了解决这个问题,Cluster Autoscaler (CA) 是必不可少的工具。它允许在节点组中混合实例类型,但我们所承载的 Node 的实例需要具有相同的 CPU 和内存容量。通过 CA,我们可以根据负载变化自动调整节点数量,从而更好地利用所构建的混合实例集群,并确保我们的工作负载始终得到满足。

05

Kubernetes Autoscaling 的价值 & 意义

基于上述所述,Kubernetes Autoscaling 本质旨在根据应用程序的负载自动调整Kubernetes集群中的资源。它可以根据集群中的负载自动扩展或缩小资源,以满足应用程序的需求,从而提高应用程序的可用性和性能。

Kubernetes Autoscaling 的价值和意义在于它能够帮助企业更好地管理他们的应用程序和资源。具体主要体现在如下方面:

1、提高应用程序的可扩展性和可用性:Kubernetes Autoscaling 可以根据实际负载自动扩展或缩小资源,确保应用程序始终具有所需的资源。这可以提高应用程序的可用性,并确保在高峰期间应用程序能够继续正常运行。

2、提高资源利用率:Kubernetes Autoscaling 可以根据负载自动调整资源,从而提高资源利用率。这意味着企业可以更好地管理他们的资源,并节省成本。

3、支持业务增长:Kubernetes Autoscaling 可以根据负载自动调整资源,从而支持业务增长。这意味着企业可以更好地满足客户需求,处理更多的请求,并实现业务增长。

4、提高应用程序性能:Kubernetes Autoscaling可以根据负载自动调整资源,使应用程序能够更快地响应请求。这可以提高应用程序性能,并提高用户满意度。

当然,除了上述之外,也有其他层面的价值,此处暂不啰嗦,大家可关注后续的文章以了解更多关于 Kubernetes Autoscaling 技能。

Adiós !

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构驿站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 业务背景
  • 什么是 Kubernetes Autoscaling ?
  • Kubernetes Autoscaling 实现原理机制
  • Kubernetes Autoscaling 的最佳实践指南
  • Kubernetes Autoscaling 的价值 & 意义
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档