优化 IP 地址分配

本页面介绍了如何为标准集群上运行的节点配置 Pod 数量上限。此值确定分配给 Google Kubernetes Engine 上的节点的 IP 地址范围的大小。在节点上运行的 Pod 从节点的 Pod CIDR 范围分配 IP 地址。

本页面中的步骤不适用于 AutoPlot 集群,因为节点数上限已预先配置,并且不可变。

概览

默认情况下,GKE 将标准集群上的节点配置为运行不超过 110 个 Pod。Autopilot 集群的每个节点最多运行 32 个 Pod。Kubernetes 为每个节点分配一个 IP 地址范围,即 CIDR 地址块,以便每个 Pod 可以拥有唯一的 IP 地址。CIDR 地址块的大小对应于每个节点的最大 Pod 数量。

标准集群的 CIDR 范围

标准集群的每个节点默认最多 110 个 Pod,Kubernetes 为每个节点分配一个 /24 CIDR 地址块(256 个地址)。通过将可用 IP 地址数量设为大约一个节点上可创建的 Pod 数量的两倍,Kubernetes 可以在 Pod 添加到节点以及从节点中移除时减少 IP 地址的重复使用现象。

尽管每个节点的最大 Pod 数量硬性限制为 110 个,但您可以减少每个节点的 Pod 数量。如果您在默认值的基础上减少数量,Kubernetes 会为节点分配相应较小的 CIDR 地址块。该地址块包含的地址数量始终至少是每个节点的最大 Pod 数量的两倍。下表列出了 Kubernetes 根据每个节点的最大 Pod 数量分配给每个节点的 CIDR 地址块的大小:

每个节点的最大 Pod 数量 每个节点的 CIDR 范围
8 /28
9 - 16 /27
17 - 32 /26
33 - 64 /25
65 - 110 /24

配置每个节点的最大 Pod 数量时,您会间接配置每个集群节点需要多少 IP 地址空间。例如,如果将每个节点的最大 Pod 数量设置为 30,则根据上表,应使用 /26 CIDR 范围,即每个节点可分配 64 个 IP 地址。如果未配置每个节点的最大 Pod 数量,则使用 /24 CIDR 范围,即每个节点分配 256 个 IP 地址。

Autopilot 集群的 CIDR 设置

Autopilot 集群 CIDR 大小的默认设置是:

  • 子网范围:/23
  • 集群 IP4 CIDR(Pod 的范围):/17
  • 服务 IP4 CIDR(服务的范围):/22

减少 Pod 数量上限

减少每个节点的最大 Pod 数量可以使集群拥有更多节点,因为每个节点所需的总 IP 地址空间较小。或者,您可以通过在创建集群时为 Pod 指定较小的 IP 地址空间来支持集群中相同数量的节点。

减少每个节点的最大 Pod 数量也可以创建需要较少 IP 地址的较小集群。例如,每个节点有 8 个 Pod,每个节点分配一个 /28 CIDR。这些 Pod IP 地址范围加上用户定义的子网和次要范围确定了成功创建集群所需的 IP 地址数量。

您可以在创建集群和节点池时配置每个节点的最大 Pod 数量。

限制

  • 您只能在 VPC 原生集群中配置每个节点的最大 Pod 数量。
  • 节点创建受 Pod 地址范围中可用地址数量的限制。如需了解默认、最小和最大 Pod 地址范围大小,请参阅此表。 您还可以使用连续的多 Pod CIDR 添加其他 Pod IP 地址。

配置每个节点的最大 Pod 数量

您可以在创建集群或创建节点池时配置每个节点的最大 Pod 数量。创建集群或节点池后,无法更改此设置。

但是,如果耗尽 Pod 的 IP 地址,您可以使用连续的多 Pod CIDR 创建其他 Pod IP 地址范围。

您可以在创建集群时使用 gcloud 工具或 Google Cloud Console 设置 Pod 地址范围的大小。

创建每个节点最多 110 个 Pod 的集群

gcloud

gcloud container clusters create cluster-name \
  --enable-ip-alias --cluster-ipv4-cidr=10.0.0.0/21 \
  --create-subnetwork=name='cluster-name-subnet',range=10.4.32.0/27 \
  --services-ipv4-cidr=10.4.0.0/19 --default-max-pods-per-node=110 \
  --zone=compute-zone

控制台

  1. 访问 Cloud Console 中的 Google Kubernetes Engine 菜单。

    访问 Google Kubernetes Engine 菜单

  2. 点击 创建

  3. 根据需要配置集群。

  4. 在导航窗格的集群下,点击网络

  5. 确保选中启用 VPC 原生流量路由(使用别名 IP)复选框。

  6. 在导航窗格的节点池下,点击节点

  7. 每个节点的最大 Pod 数量字段设置为 110。GKE 使用此值来调整分配给节点的 IP 地址范围的大小。

  8. 点击创建

这将创建一个最多可包含八个节点的集群。根据每个节点的最大 Pod 数量,Kubernetes 会为每个节点分配一个 /24 CIDR 范围以供节点的 Pod 使用。由于此集群从 /21 CIDR 范围 (cluster-ipv4-cidr) 分配 Pod IP 地址,因此最多可以有八个节点(24-21 = 3,23 = 8)。default-max-pods-per-node 选项可以省略,因为默认值为 110。

创建每个节点最多 8 个 Pod 的集群

gcloud

gcloud container clusters create cluster-name \
  --enable-ip-alias --cluster-ipv4-cidr=10.0.0.0/21 \
  --create-subnetwork=name='cluster-name-subnet',range=10.4.32.0/21 \
  --services-ipv4-cidr=10.4.0.0/19 --default-max-pods-per-node=8 \
  --zone=compute-zone

控制台

  1. 访问 Cloud Console 中的 Google Kubernetes Engine 菜单。

    访问 Google Kubernetes Engine 菜单

  2. 点击 创建

  3. 根据需要配置集群。

  4. 在导航窗格的集群下,点击网络

  5. 确保选中启用 VPC 原生流量路由(使用别名 IP)复选框。

  6. 在导航窗格的节点池下,点击节点

  7. 每个节点的最大 Pod 数量字段设置为 8。GKE 使用此值来调整分配给节点的 IP 地址范围的大小。

  8. 点击创建

这将创建一个最多可包含 128 个节点的集群。根据每个节点的最大 Pod 数量,Kubernetes 会为每个节点分配一个 /28 CIDR 范围以供节点的 Pod 使用。因为所有 Pod 的可用范围 (cluster-ipv4-cidr) 是 /21 范围,这意味着最多可以有 128 个节点(28-21 = 7,27 = 128)。

设置现有集群新节点池中的最大 Pod 数量

您也可以在现有集群中创建节点池时指定每个节点的最大 Pod 数量。通过创建新节点池,您可以优化 IP 地址分配,即使在未在集群级层配置 default-max-pods-per-node 的现有集群中也是如此。

gcloud

gcloud container node-pools create pool-name \
  --cluster=cluster-name \
  --max-pods-per-node=30

控制台

  1. 访问 Cloud Console 中的 GKE 菜单。

    访问 Google Kubernetes Engine 菜单

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 点击 添加节点池

  4. 在导航窗格中,点击节点

  5. 网络下,输入每个节点的 Pod 数上限字段的值。GKE 使用此值来调整分配给节点的 IP 地址范围的大小。

此值将替换在集群级层应用的 default-max-pods-per-node 选项。如果在创建节点池时省略 max-pods-per-node 选项,则使用集群级层的默认配置。

后续步骤