本文档可帮助您了解 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 文档中的以下实用资源:
- 如需了解可用的 Compute Engine 机器世代,请参阅 Compute Engine 术语部分中的表格。
- 如需查看机器类型及其兼容的 Persistent Disk 类型的列表,请参阅机器系列支持。
- 如需了解基于不同 CPU 数量的不同 Hyperdisk 类型的 Hyperdisk 连接数量上限,请参阅每个虚拟机的 Hyperdisk 卷数量上限。
- 如需了解 Hyperdisk 连接限制如何应用于节点,请参阅每个虚拟机的 Hyperdisk 限制摘要。
替换默认的永久性卷附加限制
如果您有特定要求或节点配置,希望将特定数量的永久性卷附加到节点,可以使用以下节点标签替换节点池的默认永久性卷附加限制: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
现有节点池
如需修改现有节点池的当前永久性卷连接限制,请按以下步骤操作:
更新节点池的附加限制:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE
重启
pdcsi-node
DaemonSet:kubectl rollout restart ds pdcsi-node -n kube-system
新的附加限制在
pdcsi-node
Pod 处于Running
状态后生效。
替换以下内容:
NODE_POOL_NAME
:要创建或更新的节点池的名称。CLUSTER_NAME
:要创建或更新的节点池的集群的名称。VALUE
:介于0
和127
之间的整数,用于指定可附加的新永久性卷数量。如果您指定的值高于 127,系统会忽略节点标签,而 PDCSI 驱动程序会改用默认的永久性卷附加限制。对于第三代机器,默认限制为 128;对于第四代机器,默认限制为基于 vCPU 数量的值。
验证替换
如需验证替换是否已正确应用,请检查节点标签和节点容量。
在以下命令中,将 NODE_NAME
替换为属于您应用了替换节点标签的特定节点池的节点的名称。
检查节点标签:
kubectl get node NODE_NAME --show-labels
输出应包含标签
node-restriction.kubernetes.io/gke-volume-attach-limit-override
。检查节点容量:
kubectl describe node NODE_NAME
输出应包含
attachable-volumes-gce-pd
容量,该容量应与您为节点池设置的替换值一致。如需了解详情,请参阅检查节点上的可分配资源。
后续步骤
- 了解 GKE 永久性卷存储。
- 了解 Kubernetes 调度程序的工作原理。