特定于节点的卷数限制

此页面描述了各个云供应商可挂接至一个节点的最大卷数。

谷歌、亚马逊和微软等云供应商通常对可以挂接到节点的卷数量进行限制。 Kubernetes 需要尊重这些限制。否则,在节点上调度的 Pod 可能会卡住去等待卷的挂接。

Kubernetes 的默认限制

Kubernetes 调度器对挂接到一个节点的卷数有默认限制:

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

自定义限制

你可以通过设置 KUBE_MAX_PD_VOLS 环境变量的值来设置这些限制,然后再启动调度器。 各个 CSI 驱动可能采用不同的步骤,关于如何自定义其限制请参阅相关文档。

如果设置的限制高于默认限制,请谨慎使用。请参阅云提供商的文档以确保节点可支持你设置的限制。

此限制应用于整个集群,所以它会影响所有节点。

动态卷限制

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

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

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

对于由树内插件管理的卷,Kubernetes 会自动确定节点类型并确保节点上可挂接的卷数目合规。例如:

  • 如果 CSI 存储驱动(使用 NodeGetInfo)为节点通告卷数上限,则 kube-scheduler 将遵守该限制值。 参考 CSI 规范获取更多详细信息。

  • 对于由已迁移到 CSI 驱动的树内插件管理的卷,最大卷数将是 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 的可分配卷数量的更新。

最后修改 April 24, 2025 at 1:48 PM PST: [zh-cn]sync storage-limits volumes (ae74fa0d3c)