节点专属卷限制
此页面描述了可以连接到节点的最大卷数,适用于各种云提供商。
Google、Amazon 和 Microsoft 等云提供商通常限制可以连接到节点的卷数。 Kubernetes 尊重这些限制非常重要。 否则,调度到节点上的 Pod 可能会卡在等待卷连接的状态。
Kubernetes 默认限制
Kubernetes 调度器对可以连接到节点的卷数有默认限制
| 云服务 | 每个节点的最大卷数 |
|---|---|
| Amazon Elastic Block Store (EBS) | 39 |
| Google Persistent Disk | 16 |
| Microsoft Azure Disk Storage | 16 |
动态卷限制
Kubernetes v1.17 [稳定]以下卷类型支持动态卷限制。
- Amazon EBS
- Google Persistent Disk
- Azure Disk
- CSI
对于由树内卷插件管理的卷,Kubernetes 会自动确定节点类型并强制执行该节点适当的最大卷数。 例如
在 Google Compute Engine 上,最多可以连接 127 个卷到节点,具体取决于节点类型。
对于 Amazon EBS 磁盘在 M5、C5、R5、T3 和 Z1D 实例类型上,Kubernetes 仅允许将 25 个卷连接到节点。 对于 Amazon Elastic Compute Cloud (EC2) 上的其他实例类型,Kubernetes 允许将 39 个卷连接到节点。
在 Azure 上,最多可以连接 64 个磁盘到节点,具体取决于节点类型。 有关详细信息,请参阅 Azure 虚拟机大小。
如果 CSI 存储驱动程序通告了节点的卷的最大数量(使用
NodeGetInfo),则 kube-scheduler 会遵守该限制。 有关详细信息,请参阅 CSI 规范。对于由树内插件管理的已迁移到 CSI 驱动程序的卷,最大卷数将由 CSI 驱动程序报告的卷数。
可变的 CSI 节点可分配计数
Kubernetes v1.35 [beta](默认启用)CSI 驱动程序可以在运行时动态调整可以连接到节点的卷的最大数量。 这提高了调度准确性,并减少了由于资源可用性变化而导致的 Pod 调度失败。
要使用此功能,必须在以下组件上启用 MutableCSINodeAllocatableCount 特性门控
kube-apiserverkubelet
定期更新
启用后,CSI 驱动程序可以通过在 CSIDriver 规范中设置 nodeAllocatableUpdatePeriodSeconds 字段来请求其卷限制的定期更新。 例如
apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
name: hostpath.csi.k8s.io
spec:
nodeAllocatableUpdatePeriodSeconds: 60
Kubelet 将定期调用相应 CSI 驱动程序的 NodeGetInfo 端点,以使用 nodeAllocatableUpdatePeriodSeconds 中指定的间隔刷新可连接的最大卷数。 此字段的允许最小值是 10 秒。
如果卷附加操作因 ResourceExhausted 错误(gRPC 代码 8)而失败,Kubernetes 会立即触发该节点的可用卷数的更新。 此外,kubelet 会将受影响的 Pod 标记为 Failed,允许其控制器处理重新创建。 这可以防止 Pod 在 ContainerCreating 状态下无限期地卡住。
防止在没有 CSI 驱动程序的情况下放置 Pod
Kubernetes v1.35 [alpha](默认禁用)如果启用了 VolumeLimitScaling 特性门控 并且安装了相应的 CSIDriver 对象,则调度器将防止将 Pod 放置到尚未安装 CSI 驱动程序的节点。 此限制仅适用于需要相应 CSI 卷的 Pod。