节点特定卷限制

本页面描述了不同云提供商可以附加到节点的最大卷数。

像 Google、Amazon 和 Microsoft 这样的云提供商通常对可以附加到节点的卷数有限制。Kubernetes 尊重这些限制非常重要。否则,调度到节点上的 Pod 可能会卡住,等待卷附加。

Kubernetes 默认限制

Kubernetes 调度器对可以附加到节点的卷数有默认限制

云服务每个节点的最大卷数
Amazon Elastic Block Store (EBS)39
Google 持久磁盘16
Microsoft Azure 磁盘存储16

动态卷限制

功能状态: `Kubernetes v1.17 [稳定]`

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

  • Amazon EBS
  • Google 持久磁盘
  • Azure 磁盘
  • CSI

对于由树内卷插件管理的卷,Kubernetes 会自动确定节点类型,并为该节点强制执行适当的最大卷数。例如:

  • Google Compute Engine 上,最多可以将 127 个卷附加到节点,具体取决于节点类型

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

  • 在 Azure 上,最多可以将 64 个磁盘附加到节点,具体取决于节点类型。有关更多详细信息,请参阅 Azure 虚拟机大小

  • 如果 CSI 存储驱动程序(使用 NodeGetInfo)声明了节点的最大卷数,则 kube-scheduler 将遵守该限制。有关详细信息,请参阅 CSI 规范

  • 对于已迁移到 CSI 驱动程序的树内插件管理的卷,最大卷数将是 CSI 驱动程序报告的卷数。

可变 CSI 节点可分配计数

特性状态: Kubernetes v1.34 [beta] (默认禁用)

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

要使用此功能,你必须在以下组件上启用 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 将触发对该节点的可分配卷计数进行即时更新。此外,kubelet 将受影响的 Pod 标记为 Failed,允许其控制器处理重新创建。这可以防止 Pod 无限期地卡在 ContainerCreating 状态。

上次修改于 2025 年 8 月 28 日太平洋标准时间下午 3:32:清理关于 `KUBE_MAX_PD_VOLS` 环境变量的文档 (2c88dc6da9)