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


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

在调度时,GKE 会使用每个节点的最大 Pod 数量来确定是否有足够的容量来调度 Pod。只有已分配给节点且尚未终止(FailedSucceeded 阶段)的 Pod 才会计入此容量。

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

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

限制

  • 您只能在 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 CLI 或 Google Cloud 控制台设置 Pod 地址范围的大小。

gcloud

如需使用 gcloud CLI 设置每个节点的默认 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.5.32.0/27 \
    --default-max-pods-per-node=MAXIMUM_PODS \
    --location=COMPUTE_LOCATION

替换以下内容:

  • CLUSTER_NAME:新集群的名称。
  • SUBNET_NAME:集群的新子网的名称。
  • MAXIMUM_PODS:集群的每个节点的默认 Pod 数上限,最多可以配置为 256。如果省略,Kubernetes 会分配默认值 110
  • COMPUTE_LOCATION:新集群的 Compute Engine 位置

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 配置新集群。

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

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

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

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

  8. 点击创建

为集群配置每个节点的 Pod 数量上限时,Kubernetes 会使用此值为节点分配 CIDR 范围。您可以根据集群的 Pod 次要 IP 地址范围和节点分配到的 CIDR 范围来计算集群中的节点数上限。

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

同样,如果您将最大 Pod 数设置为 8 并将集群的 Pod 次要 IP 地址范围设置为 /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. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

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

  3. 点击 添加节点池

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

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

关于每个节点的默认 Pod 数上限

默认情况下,GKE 允许标准集群上的每个节点最多有 110 个 Pod,但标准集群本身可以配置为允许每个节点最多有 256 个 Pod。Autopilot 集群会根据预期的工作负载 Pod 密度,从 8 到 256 之间选择每个节点的最大 Pod 数量。Kubernetes 为每个节点分配一个 IP 地址范围,即 CIDR 地址块,以便每个 Pod 可以拥有唯一的 IP 地址。CIDR 地址块的大小对应于每个节点的最大 Pod 数量。

Standard 集群中的 Pod CIDR 范围

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

尽管每个节点的 Pod 数量上限硬性限制为 256 个,但您可以减少节点上的 Pod 数量。分配给节点的 CIDR 地址块的大小取决于每个节点的 Pod 数上限值。该地址块包含的地址数量始终至少是每个节点的 Pod 数上限的两倍。

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

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

Autopilot 集群中的 Pod CIDR 范围

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

  • 子网范围:/23
  • Pod 的次要 IP 地址范围:/17
  • Service 的次要 IP 地址范围:/22

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

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

减少 Pod 数上限

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

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

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

后续步骤