特定于节点的卷数限制

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

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

Kubernetes 的默认限制

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

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

动态卷限制

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

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

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

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

  • 对于 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] (enabled by default: false)

CSI 驱动可以在运行时动态调整可以挂载到 Node 的最大卷数量。 这提高了调度准确性,并减少了由于资源可用性变化导致的 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 状态。

最后修改 September 09, 2025 at 8:29 PM PST: Merge pull request #52317 from windsonsea/ctlget (ebf0930)