节点专属的卷限制
此页面描述了针对各种云服务提供商,可以挂载到 Node 的最大卷数。
像 Google、Amazon 和 Microsoft 这样的云服务提供商通常对可以挂载到 Node 的卷数设有上限。Kubernetes 遵守这些限制非常重要。否则,调度到 Node 上的 Pod 可能会因等待卷挂载而卡住。
Kubernetes 默认限制
Kubernetes 调度器对可以挂载到 Node 的卷数有默认限制
云服务 | 每个 Node 的最大卷数 |
---|---|
Amazon Elastic Block Store (EBS) | 39 |
Google Persistent Disk | 16 |
Microsoft Azure Disk Storage | 16 |
自定义限制
你可以通过设置环境变量 KUBE_MAX_PD_VOLS
的值,然后启动调度器来修改这些限制。CSI 驱动程序可能有不同的过程,请参阅其文档了解如何自定义其限制。
如果你设置的限制高于默认限制,请谨慎操作。请查阅云服务提供商的文档,确保 Node 实际上能够支持你设置的限制。
该限制适用于整个集群,因此会影响所有 Node。
动态卷限制
Kubernetes v1.17 [stable]
以下卷类型支持动态卷限制。
- Amazon EBS
- Google Persistent Disk
- Azure Disk
- CSI
对于由 in-tree 卷插件管理的卷,Kubernetes 会自动确定 Node 类型并强制执行该 Node 对应的最大卷数。例如:
在 Google Compute Engine 上,最多可以将 127 个卷挂载到 Node,具体取决于 Node 类型。
对于 M5、C5、R5、T3 和 Z1D 实例类型上的 Amazon EBS 磁盘,Kubernetes 仅允许将 25 个卷挂载到 Node。对于 Amazon Elastic Compute Cloud (EC2) 上的其他实例类型,Kubernetes 允许将 39 个卷挂载到 Node。
在 Azure 上,最多可以将 64 个磁盘挂载到 Node,具体取决于 Node 类型。更多详情请参阅 Azure 虚拟机大小。
如果 CSI 存储驱动程序通告了 Node 的最大卷数(使用
NodeGetInfo
),kube-scheduler 会遵守该限制。有关详情,请参阅 CSI 规范。对于已迁移到 CSI 驱动程序的 in-tree 插件管理的卷,最大卷数将由 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 的可分配卷数量。