本文介绍如何解决InsufficientSubnetSize尝试部署使用高级网络的 Microsoft Azure Kubernetes 服务 (AKS) 群集时发生的错误。 本文适用于 Kubernetes 群集和 Azure 容器网络接口 (CNI) 群集。
现象
此错误 InsufficientSubnetSize 发生在以下任一操作期间。 AKS 诊断中 也遇到此错误,该诊断会主动发现子网大小不足等问题。
操作 1:缩放 AKS 群集或 AKS 节点池
| 群集类型 | 症状: 子网 中的可用 IP 地址数小于... |
|---|---|
| Kubenet | 请求的新节点数。 |
| Azure CNI | 请求 的新节点数是 参数中的 --max-pod 节点池值的时间。 |
| Azure CNI 覆盖 | 请求的新节点数。 (在使用自动缩放程序的节点池中,节点数是参数中的 --max-count 值。 |
操作 2:升级 AKS 群集或 AKS 节点池
| 群集类型 | 症状: 子网 中的可用 IP 地址数小于... |
|---|---|
| Kubenet | 必须升级的缓冲区节点数。 |
| Azure CNI | 必须升级 的缓冲区节点数是 参数中的 --max-pod 节点池值的时间。 |
| Azure CNI 覆盖 | 必须升级的缓冲区节点数。 (在使用自动缩放程序的节点池中,节点数是参数中的 --max-count 值。 |
默认情况下,AKS 群集设置最大激增(升级缓冲区)值 1(1)。 但是,可以通过设置节点池的最大激增值来自定义此升级行为。 此操作会增加完成升级所需的可用 IP 地址数。
操作 3:创建 AKS 群集或添加 AKS 节点池
| 群集类型 | 症状: 子网 中的可用 IP 地址数小于... |
|---|---|
| Kubenet | 请求的节点数。 |
| Azure CNI | 请求 的节点数是 参数中的 --max-pod 节点池值的时间。 |
| Azure CNI 覆盖 | 请求的节点数。 (在使用自动缩放程序的节点池中,节点数是参数中的 --max-count 值。 |
原因
用于群集的子网在其无类域间路由 (CIDR) 地址空间中不再具有可用的 IP 地址,以便成功分配资源。
| 群集类型 | 要求 |
|---|---|
| Kubenet | 群集中每个 节点 的足够 IP 空间 |
| Azure CNI | 群集中每个 节点和 Pod 的足够 IP 空间 |
| Azure CNI 覆盖 | 群集中每个 节点 的足够 IP 空间 |
详细了解 Azure CNI 的设计,以便将 IP 地址分配给 Pod。
解决方案
目前不支持尝试更新现有节点池中的子网 CIDR 地址空间。 若要将工作负荷迁移到较大子网中的新节点池,请执行以下步骤:
在群集虚拟网络中创建一个子网,其中包含比现有子网更大的 CIDR 地址范围。 有关如何为群集适当调整子网大小的信息,请参阅 为群集规划 IP 寻址。
通过运行 az aks nodepool add 命令和
--vnet-subnet-id参数,在新子网上创建节点池。通过清空旧节点池中的节点,将工作负荷迁移到新节点池。 有关如何安全地清空 AKS 工作节点的信息,请参阅 “安全地清空节点”。
通过运行 az aks nodepool delete 命令删除原始节点池。
第三方联系人免责声明
Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。