你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Kubernetes 服务 (AKS) 群集的 IP 地址规划

本文提供有关 Azure Kubernetes 服务 (AKS) 群集的 IP 地址规划指南。

有关单个 CNI 选项 IP 地址规划的具体指南,请参阅后续步骤部分获取插件文档的链接。

子网大小调整

Azure VNet 子网必须足够大,以适应群集,具体取决于使用的是覆盖网络还是平面网络

覆盖网络

使用覆盖网络(例如 Azure CNI 覆盖)时,子网需要足够大,才能将 IP 分配到节点。 Pod 是从单独的专用 CIDR 范围分配 IP,不需要 VNet IP。 用于群集的 VNet 子网可以小于平面网络。

请务必确保在专用 CIDR 范围内为 Pod 分配足够的空间来考虑缩放。 规划 IP 地址范围大小时,应计算最大 Pod 计数。 为 Pod 分配群集中的每个节点分配一个 /24(256 个 IP 地址)子网。 应计划覆盖网络子网,以适应预期运行的最大节点数。

平面网络

平面网络(例如 Azure CNI Pod 子网)需要足够大的子网来容纳节点 Pod。 由于节点和 Pod 从 VNet 接收 IP,需要规划预期运行的最大节点数和 Pod 数。 Azure CNI Pod 子网为节点使用子网,为 Pod 使用单独的子网,因此需要同时规划这两个子网。

IP 地址大小调整

升级和缩放注意事项

为 AKS 群集规划 IP 地址时,应考虑升级和缩放操作所需的 IP 地址数。 如果将 IP 地址范围设置为仅支持固定数量的节点,则无法升级或缩放群集。

升级 AKS 群集时,群集中会部署一个新节点。 服务和工作负荷开始在新节点上运行,旧节点将从群集中删除。 这种滚动升级过程要求至少有一个额外的 IP 地址块可用。 节点计数为 n + 1,其中 n 是群集中的节点数。

缩放 AKS 群集时,群集中会部署一个新节点。 服务和工作负荷开始在新节点上运行。 确定 IP 地址范围时需要考虑到如何纵向扩展群集可以支持的节点和 Pod 数目。 此外,应该为升级操作包含一个额外的节点。 那么,节点计数是 n + number-of-additional-scaled-nodes-you-anticipate + max surge

如果使用 Azure CNI Pod 子网,并且希望节点运行最大数量的 Pod,另外定期销毁和部署 Pod,则还应考虑每个节点的额外 IP 地址。 删除服务并释放其 IP 地址可能需要几秒钟的延迟,以便部署并获取该地址的新服务。 额外的 IP 地址考虑到了这种可能性。

AKS 群集 IP 地址计划包括虚拟网络、至少一个节点和 Pod 子网以及 Kubernetes 服务地址范围。

Azure 资源 地址范围 限制和调整大小
Azure 虚拟网络 最大大小 /8。 65,536 个配置的 IP 地址限制。 有关异常,请参阅 Azure CNI Pod 子网静态块分配 网络中重叠的地址空间可能会导致问题。
子网 必须足够大,可以容纳群集中的节点、Pod 以及所有 Kubernetes 和 Azure 资源。 例如,如果部署内部 Azure 负载均衡器,其前端 IP 分配自群集子网(而不是公共 IP)。 子网大小还应考虑到升级操作和将来的缩放需求。

使用以下公式计算最小子网大小,包括升级操作的额外节点:(number of nodes + 1) + ((number of nodes + 1) * maximum pods per node that you configure)

50 节点群集的示例:(51) + (51 * 30 (default)) = 1,581(/21 或更大)

50 节点群集的示例,准备增加额外的 10 个节点:(61) + (61 * 30 (default)) = 1,891(/21 或更大)

如果在创建群集时未指定每个节点的最大 Pod 数,则每个节点的最大 Pod 数设置为 30。 所需的最小 IP 地址数取决于该值。 如果基于不同的最大值计算最小 IP 地址要求,请参阅每个节点的最大 Pod 数,以便在部署群集时设置此值。

Kubernetes 服务地址范围 此虚拟网络上或连接到此虚拟网络的任何网络元素都不应使用此范围。 服务地址 CIDR 必须小于 /12。 可以在不同 AKS 群集中重复使用此范围。
Kubernetes DNS 服务 IP 地址 群集服务发现使用的 Kubernetes 服务地址范围内的 IP 地址。 请勿使用地址范围内的第一个 IP 地址。 子网范围内的第一个地址用于 kubernetes.default.svc.cluster.local 地址。

每个节点的最大 Pod 数

AKS 群集中每个节点的最大 Pod 数为 250。 每个节点的默认最大 Pod 数因 kubenetAzure CNI 网络以及群集部署方法而异。

CNI 默认的最大 Pod 数 可在部署时配置
Azure CNI 覆盖 250 是(最大 250)
Azure CNI Pod 子网 110 是(最大 250)
Azure CNI(旧版) 30 是(最大 250)
Kubenet 110 是(最大 250)

为群集配置每个节点的最大 Pod 数

可以在群集部署时或在添加新节点池时配置每个节点的最大 Pod 数。 可将每个节点的 Pod 数目上限值设置为最大 250。

强制执行每个节点最大 Pod 的最小值,以保证对于群集运行状况而言至关重要的系统 Pod 空间。 当且仅当每个节点池的配置有至少 30 个 Pod 的空间时,可以为每个节点的最大 Pod 数设置的最小值为 10。 例如,要将每个节点的最大 Pod 数设置为最少 10 个,要求每个单独的节点池至少有 3 个节点。 此要求也适用于创建的每个新节点池,因此,如果将每个节点的最大 Pod 数定义为 10,则后续添加的每个节点池必须至少有 3 个节点。

网络 最小值 最大值
Azure CNI 10 250
Kubenet 10 250

注意

上表中的最小值由 AKS 服务严格强制实施。 不能为 maxPods 设置低于所示最小值的值,因为这样做可以防止群集启动。

新群集

使用下列方法之一创建新群集时,可以定义每个节点的最大 Pod 数:

  • Azure CLI:使用 az aks create 命令部署群集时,请指定 --max-pods 参数。
  • Azure 资源管理器模板:使用 Azure 资源管理器模板部署群集时,在 [ManagedClusterAgentPoolProfile] 对象中指定 maxPods 属性。
  • Azure 门户:在创建群集或添加新节点池时更改节点池设置中的 Max pods per node 字段。

现有群集

创建新节点池时,可以定义每个节点的最大 Pod 数。 如果需要增加现有群集的 maxPod 设置,请使用新的所需 maxPod 计数添加新的节点池。 将 Pod 迁移到新池后,删除节点较旧的池。

后续步骤