特定于节点的卷数限制
此页面描述了各个云供应商可挂接至一个节点的最大卷数。
谷歌、亚马逊和微软等云供应商通常对可以挂接到节点的卷数量进行限制。 Kubernetes 需要尊重这些限制。否则,在节点上调度的 Pod 可能会卡住去等待卷的挂接。
Kubernetes 的默认限制
Kubernetes 调度器对挂接到一个节点的卷数有默认限制:
云服务 | 每节点最大卷数 |
---|---|
Amazon Elastic Block Store (EBS) | 39 |
Google Persistent Disk | 16 |
Microsoft Azure Disk Storage | 16 |
自定义限制
你可以通过设置 KUBE_MAX_PD_VOLS
环境变量的值来设置这些限制,然后再启动调度器。
各个 CSI 驱动可能采用不同的步骤,关于如何自定义其限制请参阅相关文档。
如果设置的限制高于默认限制,请谨慎使用。请参阅云提供商的文档以确保节点可支持你设置的限制。
此限制应用于整个集群,所以它会影响所有节点。
动态卷限制
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.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 的可分配卷数量的更新。