节点专属的卷限制

此页面描述了针对各种云服务提供商,可以挂载到 Node 的最大卷数。

像 Google、Amazon 和 Microsoft 这样的云服务提供商通常对可以挂载到 Node 的卷数设有上限。Kubernetes 遵守这些限制非常重要。否则,调度到 Node 上的 Pod 可能会因等待卷挂载而卡住。

Kubernetes 默认限制

Kubernetes 调度器对可以挂载到 Node 的卷数有默认限制

云服务每个 Node 的最大卷数
Amazon Elastic Block Store (EBS)39
Google Persistent Disk16
Microsoft Azure Disk Storage16

自定义限制

你可以通过设置环境变量 KUBE_MAX_PD_VOLS 的值,然后启动调度器来修改这些限制。CSI 驱动程序可能有不同的过程,请参阅其文档了解如何自定义其限制。

如果你设置的限制高于默认限制,请谨慎操作。请查阅云服务提供商的文档,确保 Node 实际上能够支持你设置的限制。

该限制适用于整个集群,因此会影响所有 Node。

动态卷限制

特性状态: Kubernetes v1.17 [stable]

以下卷类型支持动态卷限制。

  • Amazon EBS
  • Google Persistent Disk
  • Azure Disk
  • CSI

对于由 in-tree 卷插件管理的卷,Kubernetes 会自动确定 Node 类型并强制执行该 Node 对应的最大卷数。例如:

  • Google Compute Engine 上,最多可以将 127 个卷挂载到 Node,具体取决于 Node 类型

  • 对于 M5、C5、R5、T3 和 Z1D 实例类型上的 Amazon EBS 磁盘,Kubernetes 仅允许将 25 个卷挂载到 Node。对于 Amazon Elastic Compute Cloud (EC2) 上的其他实例类型,Kubernetes 允许将 39 个卷挂载到 Node。

  • 在 Azure 上,最多可以将 64 个磁盘挂载到 Node,具体取决于 Node 类型。更多详情请参阅 Azure 虚拟机大小

  • 如果 CSI 存储驱动程序通告了 Node 的最大卷数(使用 NodeGetInfo),kube-scheduler 会遵守该限制。有关详情,请参阅 CSI 规范

  • 对于已迁移到 CSI 驱动程序的 in-tree 插件管理的卷,最大卷数将由 CSI 驱动程序报告。

可变 CSI 节点可分配数量

特性状态: Kubernetes v1.33 [alpha]

CSI 驱动程序可以在运行时动态调整可以挂载到 Node 的最大卷数。这提高了调度的准确性,并减少了由于资源可用性变化而导致的 Pod 调度失败。

这是一个 Alpha 特性,默认处于禁用状态。

要使用此特性,你必须在以下组件上启用 MutableCSINodeAllocatableCount 特性门控

  • kube-apiserver
  • kubelet

周期性更新

启用后,CSI 驱动程序可以通过在 CSIDriver 规范中设置 nodeAllocatableUpdatePeriodSeconds 字段来请求对其卷限制进行周期性更新。例如:

apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  name: hostpath.csi.k8s.io
spec:
  nodeAllocatableUpdatePeriodSeconds: 60

Kubelet 将使用 nodeAllocatableUpdatePeriodSeconds 中指定的间隔周期性调用相应的 CSI 驱动程序的 NodeGetInfo 端点,以刷新最大可挂载卷数。此字段允许的最小值为 10 秒。

此外,如果卷挂载操作失败并出现 ResourceExhausted 错误(gRPC 代码 8),Kubernetes 会立即触发更新该 Node 的可分配卷数量。

最后修改于太平洋标准时间 2025 年 3 月 25 日下午 2:22:添加 Alpha 特性文档:MutableCSINodeAllocatableCount (178ce422ec)