大规模创建和运行 Azure Kubernetes 服务 (AKS) 群集的最佳做法
如果你的 AKS 群集满足以下任一条件,我们建议使用运行时间 SLA 功能附带的标准层来提高 Kubernetes 控制平面的可靠性和可伸缩性:
- 运行生产工作负载或可用性敏感的任务关键型工作负载的群集
- 运行的平均节点数超过 10 个的群集
- 需要扩展超过 1000 个节点的群集
若要将 AKS 群集扩展至超过 1000 个节点,需要通过在 Azure 门户中提交支持票证来请求增加节点限制配额(每个群集最多 5000 个节点)。 提高节点限制不会提高其他 AKS 服务配额限制,例如每个节点的 Pod 数。 有关详细信息,请参阅 AKS 资源的限制、配额和局限性。
若要将节点限制增加至超过 1000,必须具备以下先决条件:
- 需要增加节点限制的现有 AKS 群集。 不应删除此群集,因为也会删除增加的限制。
- 使用标准层的群集。
- 使用 Kubernetes 1.23 或更高版本的群集。
注意
最多可能需要一周时间才能为群集启用更高的节点限制。
网络注意事项和最佳做法
- 对 NAT 网关上至少有 2 个公共 IP 的群集流出量使用托管 NAT。 有关详细信息,请参阅托管 NAT 网关与 AKS。
- 将 Azure CNI 与动态 IP 分配配合使用,以获得最佳 IP 利用率,每个群集最多缩放 5 万个应用程序 Pod,每个 Pod 具有一个可路由 IP。 有关详细信息,请参阅在 AKS 中为 IP 的动态分配和增强的子网支持配置 Azure CNI 网络。
- 在内部负载均衡器后面使用内部 Kubernetes 服务时,建议创建低于 750 节点缩放的内部负载均衡器或内部服务,以获得最佳缩放性能和负载均衡器弹性。
注意
Azure Policy 网络管理器 (Azure NPM) 不支持节点数超过 250 的群集,并且不能在所有代理池中更新群集自动缩放程序管理的节点数超过 250 的群集。
节点池缩放注意事项和最佳做法
- 对于系统节点池,请使用 Standard_D16ds_v5 SKU 或等效的具有临时 OS 磁盘的核心/内存 VM SKU 为 kube-system Pod 提供足够的计算资源。
- 由于每个节点池的节点数限制为 1000 个,我们建议至少创建五个用户节点池以扩展到 5000 个节点。
- 在运行大规模 AKS 群集时,尽可能使用群集自动缩放程序,以确保根据计算资源的需求动态缩放节点池。 有关详细信息,请参阅自动缩放 AKS 群集以满足应用程序需求。
- 如果在不使用群集自动缩放程序的情况下扩展到超过 1000 个节点,我们建议一次最多分批扩展 500 到 700 个节点。 这些缩放操作还应在连续纵向扩展之间有两到五分钟的睡眠时间,以避免受到 Azure API 限制。 有关详细信息,请参阅 API 管理:缓存和限制策略。
注意
无法在启用了大于 1000 个节点限制的群集上使用停止和启动功能。
群集升级注意事项和最佳做法
- 每个 AKS 群集 5000 个节点这一硬限制会阻止达到此限制的群集执行升级。 此限制会阻止执行这些升级,因为没有更多容量用于执行具有具有激增属性的滚动更新。 如果你的群集达到此限制,我们建议在进行群集升级之前将群集规模缩小到 3000 个节点以下,以便为节点流失提供额外的容量,并将控制平面负载降至最低。
- 默认情况下,AKS 会通过最大激增设置将升级配置为使用一个额外节点进行激增。 此默认值允许 AKS 在现有应用程序的隔离/排出之前创建一个额外节点来替换旧版本的节点,从而尽可能地缩短工作负载中断时间。 升级包含大量节点的群集时,使用默认的最大激增设置可能会导致升级需要几个小时才能完成。 整个过程之所以需要这么久,是因为升级需要改动大量节点。 可以为每个节点池自定义最大激增设置,以便在升级速度与升级中断之间进行权衡。 如果增大最大激增设置,则升级过程可以更快完成,但你可能会在升级过程中遇到中断。
- 不建议采用节点的默认最大激增配置升级节点数超过 500 的群集。 我们建议将最大激增设置增大至 10% 到 20% 之间的某个值,最大激增的上限为 500 个节点。 请根据工作负载的中断承受度指定这些设置。 更多信息,请参阅自定义节点激增升级。
- 有关群集升级的详细信息,请参阅升级 AKS 群集。