特定于节点的卷数限制
此页面描述了各个云供应商可挂接至一个节点的最大卷数。
谷歌、亚马逊和微软等云供应商通常对可以挂接到节点的卷数量进行限制。 Kubernetes 需要尊重这些限制。否则,在节点上调度的 Pod 可能会卡住去等待卷的挂接。
Kubernetes 的默认限制
Kubernetes 调度器对挂接到一个节点的卷数有默认限制:
云服务 | 每节点最大卷数 |
---|---|
Amazon Elastic Block Store (EBS) | 39 |
Google Persistent Disk | 16 |
Microsoft Azure Disk Storage | 16 |
动态卷限制
Kubernetes v1.17 [stable]
以下卷类型支持动态卷限制。
- Amazon EBS
- Google Persistent Disk
- Azure Disk
- 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]
(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
状态。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.