使用 AKS 配置多个节点并启用从零开始缩放
- 6 分钟
使用 Azure Kubernetes 服务可以创建不同的节点池,以便将特定工作负荷与每个节点池中运行的节点匹配。 将工作负荷与节点匹配的过程使你可以计划计算消耗量并优化成本。
与许多容器化应用程序和服务一样,你公司的无人机跟踪解决方案也部署在 Azure Kubernetes 服务 (AKS) 上。 你的团队开发了一个新的预测建模服务,用于处理极端天气条件下的航班路径信息并创建最佳飞行路线。 此服务需要基于 GPU 的虚拟机(VM)支持,并且仅在一周内的特定日期运行。
您想要配置一个专用于处理飞行路径信息的群集节点池。 进程每天仅运行几个小时,并且想要使用基于 GPU 的节点池。 但是,你希望只有在使用节点时才为它们付费。
让我们看看节点池和 AKS 是如何使用节点的,然后看看如何缩放节点池中的节点计数。
什么是节点池?
节点池描述 AKS 群集中具有相同配置的一组节点。 这些节点包含运行应用程序的基础 VM。 可以在 AKS 托管的 Kubernetes 群集上创建两种类型的节点池:
系统节点池
用户节点池
系统节点池
系统节点池承载构成群集控制平面的关键系统 Pod。 系统节点池仅允许 Linux 作为节点 OS,并且仅运行基于 Linux 的工作负荷。 系统节点池中的节点是为系统工作负荷保留的,通常不用于运行自定义工作负荷。 每个 AKS 群集必须至少包含一个具有至少一个节点的系统节点池,并且必须定义节点的基础 VM 大小。
用户节点池
用户节点池支持工作负载,你可以将 Windows 或 Linux 指定为节点作系统。 还可以定义节点的基础 VM 大小并运行特定的工作负荷。 例如,你的无人机跟踪解决方案有一个批处理服务,你要将该服务部署到采用通用 VM 配置的节点池。 新的预测建模服务需要更高容量的基于 GPU 的 VM。 你决定配置单独的节点池,并将其配置为使用启用了 GPU 的节点。
节点池中的节点数
最多可以在节点池中配置 100 个节点。 但是,选择配置的节点数取决于每个节点运行的 Pod 数。
例如,在系统节点池中,必须将单个节点上运行的最大 Pod 数设置为 30。 此值可保证有足够的空间运行对群集运行状况至关重要的系统 Pod。 当 pod 数超过此最小值时,需要在池中添加新节点以调度额外的工作负载。 因此,系统节点池至少需要池中的一个节点。 对于生产环境,系统节点池的建议节点计数至少为三个节点。
用户节点池旨在运行自定义工作负载,并且没有 30 个 Pod 要求。 用户节点池允许将池的节点计数设置为零。
管理 AKS 群集中的应用程序需求
在 AKS 环境中,当您在 Kubernetes 群集中扩展或缩减计算资源时,您正在进行扩展。 可以缩放需要运行的工作负荷实例数或运行这些工作负荷的节点数。 您可以通过以下两种方式之一来缩放 AKS 管理的集群中的工作负载。 第一种方法是按需手动缩放 Pod 数或节点数。 第二个选项是通过自动化实现的,你可以使用水平 Pod 自动缩放程序来缩放 Pod 和群集自动缩放程序来缩放节点。
如何手动缩放节点池
如果运行的工作负载以特定已知间隔在特定时间段内执行,则要控制节点成本,一种合理方法是手动缩放节点池大小。
假设预测建模服务需要基于 GPU 的节点池,并在中午每天运行一小时。 可以使用基于 GPU 的特定节点配置节点池,并在不使用群集时将节点池缩放为零节点。
下面是可用于创建节点池的命令示例 az aks node pool add
。 请注意参数 --node-vm-size
,该参数指定 Standard_NC6
池中节点的基于 GPU 的 VM 大小。
az aks nodepool add \
--resource-group resourceGroup \
--cluster-name aksCluster \
--name gpunodepool \
--node-count 1 \
--node-vm-size Standard_NC6 \
--no-wait
池准备就绪后,可以使用 az aks nodepool scale
命令将节点池缩放为零个节点。 请注意,参数 --node-count
设置为零。 下面是命令的示例:
az aks nodepool scale \
--resource-group resourceGroup \
--cluster-name aksCluster \
--name gpunodepool \
--node-count 0
如何自动缩放群集
AKS 使用 Kubernetes 群集自动缩放程序自动缩放工作负荷。 群集可以使用两个选项进行缩放:
水平 Pod 自动缩放程序
群集自动缩放程序
接下来,让我们看一下每个选项,从水平 Pod 自动缩放程序开始。
水平 Pod 自动缩放程序
使用 Kubernetes 水平 Pod 自动扩缩器来监控群集上的资源需求,并自动调整工作负载副本的数量。
Kubernetes 指标服务器从 AKS 群集上运行的控制器、节点和容器收集内存和处理器指标。 访问此信息的一种方法是使用指标 API。 水平 Pod 自动缩放程序每隔 30 秒检查一次指标 API,以确定应用程序是否需要更多实例来满足所需的需求。
假设你的公司还有一个批处理服务,用于计划无人机飞行路径。 你注意到,该服务的请求数量急剧增加,并积压了交付订单,导致客户延迟和不满。 增加批处理服务副本的数量可以及时处理订单。
若要解决此问题,请配置水平 Pod 自动缩放程序,按需增加服务副本的数量。 当批处理请求数减少时,它会减少服务副本的数量。
但是,水平 Pod 自动缩放程序只在群集已配置的节点池中的可用节点上缩放 Pod。
群集自动缩放程序
当水平 Pod 自动缩放程序无法在节点池中的现有节点上计划另一个 Pod 时,将触发资源约束。 在受限的情况下,需要使用群集自动缩放程序来调整群集节点池中的节点数量。 群集自动缩放程序会检查定义的指标,并根据所需的计算资源缩放节点数。
群集自动缩放程序与水平 Pod 自动缩放程序一起使用。
群集自动缩放程序监视纵向扩展和缩减事件,并允许 Kubernetes 群集在资源需求发生变化时更改节点池中的节点计数。
使用不同的缩放规则配置每个节点池。 例如,你可能希望仅配置一个节点池以允许自动缩放,或者可以将节点池配置为仅缩放到特定数量的节点。
重要
当您在节点池上启用集群自动扩缩时,您将无法将节点数量缩放至零。 相反,可以将最小计数设置为零,以节省群集资源。