我在共享 VPC 中为 GKE Autopilot 设置了一个新子网,如下所示:
node ip: 10.11.1.0/24
first secondary ip: 10.11.2.0/24
second secondary ip: 10.11.3.0/24
我尝试通过运行具有 30 个副本的简单 nginx 映像来测试它。
根据我的理解:
I have 256 possible node IP
I have 256 possible pod IP
I have 256 possible service IP
部署后,不知何故,我的 k8s 只部署并运行了 2 个 pod。其余部分处于挂起状态,错误代码:
IP_SPACE_EXHAUSTED
我的问题是怎么来的?我还有足够的 IP 地址,这是新部署的 kubernetes 集群。
Autopilot 将“每个节点的最大 Pod”设置为 32。这会导致将 /26(64 个 IP 地址)从 Pod 辅助 IP 范围分配给每个 Autopilot 节点。由于您的 Pod 范围是 /24,这意味着您的 Autopilot 集群最多可以支持 4 个节点。
默认情况下,Autopilot 集群从 2 个节点开始(其中一个节点运行一些系统内容)。看来您的 Pod 不适合这两个节点,因此 Autopilot 根据需要配置了新节点。一般来说,Autopilot 会尝试找到最适合您的部署的节点大小,在这种情况下,您最终会发现每个节点都有一个 pod。
我建议您的 Pod 系列使用 /17 或 /16,以最大限度地增加节点数量。
我从事 GKE Autopilot 工作,想分享一些建议和最近的更新:
假设我们正在讨论私有 IP (10.0.0.0/x) 稀缺的共享 VPC 类型环境,我们强烈建议尽可能使用非 RFC 1918 IP 范围。这篇博客文章概述了该策略以及 GKE Autopilot 的示例配置。必须考虑节点、服务和 Pod IP。特别建议使用E类(240.0.0.0/4),它提供250M IP。
请注意,默认情况下 Autopilot 自动为服务提供 /20 非 RFC 范围,最多支持 4000 个节点。
使用 IP Masquerading 从使用非 RFC IP 的 Pod 访问 VPC 服务。
在 1.28+ 版本中,GKE Autopilot 已从静态 Pod/节点(以及 IP/节点)转变为动态模型,其中根据节点的大小,我们分配一定比例的 IP 地址。在小节点获得与大节点相同数量的 IP 的情况下,这可以减少浪费。