GKE 节点的永久性卷连接限制

本文档可帮助您了解 Compute Engine 永久性磁盘和 Hyperdisk 的永久性卷连接限制在 Google Kubernetes Engine (GKE) 节点上的运作方式。为了正确调度工作负载和调整节点池大小,您必须了解可附加到 GKE 节点的永久性卷数量上限。如果您希望更好地控制工作负载调度,尤其是在单个实例上使用多种附加限制各不相同的磁盘类型时,可以使用节点标签替换默认的附加限制。

本文档适用于创建和分配存储空间的存储专家,以及管理工作负载调度和节点池大小调整的 GKE 管理员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务

概览

在 GKE 中,当您使用 Compute Engine 永久性磁盘 CSI 驱动程序 (pd.csi.storage.gke.io) 请求 PersistentVolume (PV) 时,系统会从 Google Cloud 永久性磁盘服务预配块存储卷。

在 GKE 集群上启用 Compute Engine Persistent Disk CSI 驱动程序 (PDCSI) 后,PDCSI 驱动程序会计算每个节点的永久性卷连接限制,并将其报告给 kubelet。根据此信息,Kubernetes 调度程序会做出调度决策,以确保不会在已达到其连接容量的节点上调度过多的需要持久卷的 Pod。如果 PDCSI 驱动程序报告的附加限制不准确(更具体地说,是高于实际限制的数字),则 Pod 将无法调度,并卡在 Pending 状态。这种情况可能会发生在第三代机器类型(例如 C3)上,因为这些机器类型对 Hyperdisk 和永久性磁盘的挂接限制不同。

了解永久性卷的连接限制

对于第四代之前的机器,Compute Engine PDCSI 驱动程序将所有机器类型的总计永久性卷挂接数量上限设置为 128 个磁盘(127 个数据磁盘加 1 个启动磁盘)。挂接限制适用于 Persistent Disk 和 Hyperdisk 卷的总数。对于 Hyperdisk,挂接数量上限取决于底层 Compute Engine 机器类型、机器的 vCPU 数量和具体的 Hyperdisk 类型。

例如:

  • 对于 C4 等第四代机器类型,PDCSI 驱动程序会向 Kubernetes 准确报告根据节点的 vCPU 数量计算出的默认挂接限制。报告的附加限制通常介于 8 到 128 个永久性卷之间。
  • 相比之下,对于 C3 等第三代机器类型,PDCSI 驱动程序会向 Kubernetes 报告一个默认的附加限制,即固定的 128 个磁盘限制,这可能会导致 Pod 调度失败,因为实际限制可能会低于 128,具体取决于 vCPU 数量。

您可以使用节点标签替换默认的附加限制

请参阅 Compute Engine 文档中的以下实用资源:

替换默认的永久性卷附加限制

如果您有特定要求或节点配置,希望将特定数量的永久性卷附加到节点,可以使用以下节点标签替换节点池的默认永久性卷附加限制:node-restriction.kubernetes.io/gke-volume-attach-limit-override: VALUE

您可以在以下 GKE 版本中使用此节点标签:

  • 1.32.4-gke.1698000 及更高版本。
  • 1.33.1-gke.1386000 及更高版本。

新节点池

如需创建具有特定永久性卷附加限制的新节点池,请运行以下命令:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE

现有节点池

如需修改现有节点池的当前永久性卷连接限制,请按以下步骤操作:

  1. 更新节点池的附加限制:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE
    
  2. 重启 pdcsi-node DaemonSet:

    kubectl rollout restart ds pdcsi-node -n kube-system
    

    新的附加限制在 pdcsi-node Pod 处于 Running 状态后生效。

替换以下内容:

  • NODE_POOL_NAME:要创建或更新的节点池的名称。
  • CLUSTER_NAME:要创建或更新的节点池的集群的名称。
  • VALUE:介于 0127 之间的整数,用于指定可附加的新永久性卷数量。如果您指定的值高于 127,系统会忽略节点标签,而 PDCSI 驱动程序会改用默认的永久性卷附加限制。对于第三代机器,默认限制为 128;对于第四代机器,默认限制为基于 vCPU 数量的值。

验证替换

如需验证替换是否已正确应用,请检查节点标签和节点容量。

在以下命令中,将 NODE_NAME 替换为属于您应用了替换节点标签的特定节点池的节点的名称。

  1. 检查节点标签:

    kubectl get node NODE_NAME --show-labels
    

    输出应包含标签 node-restriction.kubernetes.io/gke-volume-attach-limit-override

  2. 检查节点容量:

    kubectl describe node NODE_NAME
    

    输出应包含 attachable-volumes-gce-pd 容量,该容量应与您为节点池设置的替换值一致。如需了解详情,请参阅检查节点上的可分配资源

后续步骤