优化 IP 地址分配

本页面介绍了如何为标准集群上运行的节点配置 Pod 数量上限。此值确定分配给 Google Kubernetes Engine (GKE) 上的节点的 IP 地址范围的大小。在节点上运行的 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 添加到节点或从节点移除 Pod 的 IP 地址重复使用情况。

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

下表列出了 CIDR 块的大小以及 Kubernetes 根据每个节点的 Pod 数量上限分配给节点的可用 IP 地址的相应数量:

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

AutoPilot 集群的 CIDR 设置

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

  • 子网范围:/23
  • 集群 IPv4 CIDR(Pod 的范围):/17
  • Service IPv4 CIDR(Service 的范围):/22

Autopilot 中每个节点的 Pod 数上限为 32。与 GKE 标准一样,这会导致每个节点预配 /26 范围,即 64 个 IP。Pod 地址范围 /17 生成的集群最多支持 511 个节点(32766 个可用 IP / 每个节点 64 个 IP 地址)。

确保您指定的 Pod 地址 CIDR 范围足够大,以支持预期的集群大小上限。建议使用 /16 范围(例如 cluster-ipv4-cidr=10.0.0.0/16)以支持集群的最大增长。

减少 Pod 数量上限

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

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

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

限制

  • 您只能在 VPC 原生集群中配置每个节点的 Pod 数量上限。
  • 节点创建受 Pod 地址范围中可用地址数量的限制。请参阅 IP 地址范围规划表,了解 Pod 地址范围的默认大小、最小大小和最大大小。您还可以使用不连续的多 Pod CIDR 来添加其他 Pod IP 地址。
  • 每个集群都需要在 kube-system 命名空间中创建 kube-system Pod(例如 kube-proxy)。在减少每个节点的最大 Pod 数量时,请务必同时考虑工作负载 Pod 和系统 Pod。如需列出集群中的系统 Pod,请运行以下命令:

    kubectl get pods --namespace kube-system
    

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

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

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

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

gcloud

如需使用 gcloud 工具设置每个节点的默认 Pod 数量上限,请运行以下命令:

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

请替换以下内容:

  • CLUSTER_NAME:新集群的名称。
  • SUBNET_NAME:集群的新子网的名称。
  • MAXIMUM_PODS:集群每个节点的默认 Pod 数上限。如果省略,Kubernetes 会分配默认值 110
  • 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 会使用此值为节点分配 CIDR 范围。您可以根据 Pod 的集群 IPv4 CIDR 范围和节点分配的 CIDR 范围来计算集群中的节点数量上限。

例如,如果您将默认 Pod 数上限设置为 110,并将 Pod 的集群 IPv4 CIDR 范围设置为 /21,则 Kubernetes 会为集群上的节点分配 /24 CIDR 范围。这允许集群上最多有 2(24-21) = 23 = 8 个节点。

同样,如果您将默认 Pod 数上限设置为 8,并将 Pod 的集群 IPv4 CIDR 范围设置为 /21,则 Kubernetes 会为节点分配 /28 CIDR 范围。这允许集群上最多有 2(28-21) = 27 = 128 个节点。

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

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

在节点池级层设置的 Pod 数量上限会替换集群级层的默认 Pod 数量上限。如果您在创建节点池时未配置每个节点的 Pod 数量上限,则系统会应用集群级层的最大值。

gcloud

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --max-pods-per-node MAXIMUM_PODS

请替换以下内容:

  • POOL_NAME:新节点池的名称。
  • CLUSTER_NAME:要在其中创建节点池的集群的名称。
  • MAXIMUM_PODS:节点池中的 Pod 数量上限。

控制台

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

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

  3. 点击 添加节点池

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

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

后续步骤