Azure Kubernetes 服务 (AKS) 中的应用程序缩放选项

在 Azure Kubernetes 服务 (AKS) 中运行应用程序时,可能需要增加或减少计算资源量。 更改拥有的应用实例数量时,可能需要更改基础 Kubernetes 节点的数量。 可能还需要预配大量额外的应用实例。

本文介绍核心 AKS 应用程序缩放概念,包括手动缩放 pod 或节点、使用水平 Pod 自动缩放程序、使用群集自动缩放程序以及与 Azure 容器实例 (ACI) 集成。

手动缩放 Pod 或节点

可以手动缩放副本或 Pod 和节点,以测试应用程序如何响应可用资源和状态的更改。 手动缩放资源可以定义用于维持固定成本的设定数量的资源,例如节点数。 若要手动缩放,请定义副本或节点计数。 然后,Kubernetes API 根据该副本或节点计数计划创建其他 Pod 或排空节点。

缩减节点时,Kubernetes API 将调用与群集使用的计算类型绑定的相关 Azure 计算 API。 例如,对于基于虚拟机规模集构建的群集,虚拟机规模集 API 会确定要删除的节点。 若要详细了解如何在缩减节点时选择要删除的节点,请参阅 虚拟机规模集常见问题解答

若要开始手动缩放节点,请参阅手动缩放 AKS 群集中的节点。 若要手动缩放 Pod 数量,请参阅 kubectl scale 命令

水平 Pod 自动缩放程序

Kubernetes 使用水平 Pod 自动缩放程序 (HPA) 来监视资源需求并自动缩放 Pod 数量。 默认情况下,HPA 每隔 15 秒检查一次指标 API 以了解副本计数中所需的任何更改,且指标 API 每隔 60 秒从 Kubelet 检索一次数据。 因此,HPA 每 60 秒更新一次。 当需要进行更改时,副本的数量会相应增加或减少。 HPA 可与部署了 Metrics Server for Kubernetes 1.8 及更高版本的 AKS 群集配合使用。

Kubernetes horizontal pod autoscaling

为给定部署配置 HPA 时,请定义可运行的最小和最大副本数。 还可以定义指标以监视任何缩放决策并以此为依据,例如 CPU 使用情况。

若要开始使用 AKS 中的水平 Pod 自动缩放程序,请参阅在 AKS 中自动缩放 Pod

缩放事件的冷却时间

由于 HPA 每 60 秒进行一次有效更新,因此在进行另一次检查之前,先前的缩放事件可能尚未成功完成。 此行为可能会导致 HPA 在上一个缩放事件能够接收应用程序工作负荷且需要对资源进行相应调整之前更改副本数。

若要最大程度地减少争用事件,请设置延迟值。 此值定义 HPA 在一个缩放事件之后必须等待多长时间才能触发另一个缩放事件。 此行为允许新副本计数生效,指标 API 反映分布式工作负荷。 从 Kubernetes 1.12 开始,纵向扩展事件没有延迟,但是纵向缩减事件的默认延迟为 5 分钟

群集自动缩放程序

为响应不断变化的 Pod 需求,Kubernetes 集群自动缩放程序可根据节点池中请求的计算资源调整节点数。 默认情况下,群集自动缩放程序每隔 10 秒检查一次指标 API 服务器,以了解节点计数所需的任何更改。 如果群集自动缩放程序确定需要进行更改,则 AKS 群集中的节点数会相应增加或减少。 群集自动缩放程序适用于运行 Kubernetes 1.10.x 或更高版本的支持 Kubernetes RBAC 的 AKS 群集。

Kubernetes cluster autoscaler

群集自动缩放程序通常与水平 Pod 自动缩放程序配合使用。 组合时,水平 pod 自动缩放器会根据应用程序需求增加或减少 pod 的数量,并且群集自动缩放器会调整节点数以运行更多 pod。

若要开始使用 AKS 中的群集自动缩放程序,请参阅 AKS 上的群集自动缩放程序

横向扩展事件

如果节点没有足够的计算资源来运行请求的 Pod,则该 Pod 无法按照计划继续运行。 只有在节点池中有更多计算资源可用时,才能启动 Pod。

当群集自动缩放程序通知由于节点池资源限制而无法将 Pod 列入计划时,节点池中的节点数量会增加,提供额外的计算资源。 当这些节点成功部署并可在节点池中使用时,可将 Pod 计划为运行。

如果应用程序需要快速缩放,则某些 Pod 可能会保持等待计划的状态,直到群集自动缩放程序部署的更多节点可以接受列入计划的 Pod。 对于具有高突发需求的应用程序,可以使用虚拟节点和 Azure 容器实例进行缩放。

横向缩减事件

群集自动缩放程序还会监视最近未收到新计划请求的节点的 Pod 计划状态。 此方案表明节点池具有的计算资源多于所需资源,并且可以减少节点数。 默认情况下,将安排删除超过 10 分钟不再需要的阈值的节点。 发生这种情况时,会计划 Pod 在节点池中的其他节点上运行,并且群集自动缩放程序会减少节点数。

当群集自动缩放程序减少节点数时,由于在不同节点上计划 Pod,应用程序可能会发生一些中断。 为最大限度地减少中断,请避免使用单个 Pod 实例的应用程序。

突发到 Azure 容器实例 (ACI)

若要快速缩放 AKS 群集,可以与 Azure 容器实例 (ACI) 集成。 Kubernetes 具有内置组件,可缩放副本和节点数。 但是,如果应用程序需要快速缩放,则水平 Pod 自动缩放程序可以计划比节点池中现有计算资源提供的更多 Pod。 如果已配置,则此方案将触发群集自动缩放程序在节点池中部署更多节点,但可能需要几分钟后,这些节点才能成功配置并允许 Kubernetes 计划程序在其上运行 Pod。

Kubernetes burst scaling to ACI

使用 ACI,可以快速部署容器实例,而无需额外的基础结构开销。 当与 AKS 连接时,ACI 会成为 AKS 群集的安全逻辑扩展。 虚拟节点组件基于虚拟 Kubelet,它安装在 AKS 群集中,将 ACI 显示为虚拟 Kubernetes 节点。 然后,Kubernetes 可以计划通过虚拟节点作为 ACI 实例运行的 Pod,而不是直接在 AKS 群集中的 VM 节点上运行的 Pod。

应用程序无需修改即可使用虚拟节点。 集群自动缩放程序在 AKS 集群中部署新节点后,部署可以跨 AKS 和 ACI 进行缩放,且没有延迟。

虚拟节点将部署到与 AKS 群集相同的虚拟网络中的其他子网。 这种虚拟网络配置确保了 ACI 和 AKS 之间的流量。 与 AKS 群集一样,ACI 实例是与其他用户隔离的安全逻辑计算资源。

后续步骤

若要开始缩放应用程序,请参阅以下资源:

有关核心 Kubernetes 和 AKS 概念的详细信息,请参阅以下文章: