--- title: 特定于节点的卷数限制 content_type: concept weight: 90 --- 此页面描述了各个云供应商可挂接至一个节点的最大卷数。 谷歌、亚马逊和微软等云供应商通常对可以挂接到节点的卷数量进行限制。 Kubernetes 需要尊重这些限制。否则,在节点上调度的 Pod 可能会卡住去等待卷的挂接。 ## Kubernetes 的默认限制 {#kubernetes-default-limits} Kubernetes 调度器对挂接到一个节点的卷数有默认限制:
云服务每节点最大卷数
Amazon Elastic Block Store (EBS)39
Google Persistent Disk16
Microsoft Azure Disk Storage16
## 自定义限制 {#custom-limits} 你可以通过设置 `KUBE_MAX_PD_VOLS` 环境变量的值来设置这些限制,然后再启动调度器。 各个 CSI 驱动可能采用不同的步骤,关于如何自定义其限制请参阅相关文档。 如果设置的限制高于默认限制,请谨慎使用。请参阅云提供商的文档以确保节点可支持你设置的限制。 此限制应用于整个集群,所以它会影响所有节点。 ## 动态卷限制 {#dynamic-volume-limits} {{< feature-state state="stable" for_k8s_version="v1.17" >}} 以下卷类型支持动态卷限制。 - Amazon EBS - Google Persistent Disk - Azure Disk - CSI 对于由树内插件管理的卷,Kubernetes 会自动确定节点类型并确保节点上可挂接的卷数目合规。例如: * 在 Google Compute Engine 环境中, [根据节点类型](https://cloud.google.com/compute/docs/disks/#pdnumberlimits)最多可以将 127 个卷挂接到节点。 * 对于 M5、C5、R5、T3 和 Z1D 实例类型的 Amazon EBS 磁盘,Kubernetes 仅允许 25 个卷挂接到节点。 对于 Amazon Elastic Compute Cloud (EC2) 上的其他实例类型, Kubernetes 允许 39 个卷挂接至节点。 * 在 Azure 环境中,根据节点类型,最多 64 个磁盘可以挂接至一个节点。 更多详细信息,请参阅 [Azure 虚拟机的数量大小](https://docs.microsoft.com/zh-cn/azure/virtual-machines/windows/sizes)。 * 如果 CSI 存储驱动(使用 `NodeGetInfo`)为节点通告卷数上限,则 {{< glossary_tooltip text="kube-scheduler" term_id="kube-scheduler" >}} 将遵守该限制值。 参考 [CSI 规范](https://github.com/container-storage-interface/spec/blob/master/spec.md#nodegetinfo)获取更多详细信息。 * 对于由已迁移到 CSI 驱动的树内插件管理的卷,最大卷数将是 CSI 驱动报告的卷数。 ### 可变的 CSI 节点可分配数 {#mutable-csi-node-allocatable-count} {{< feature-state state="alpha" for_k8s_version="v1.33" >}} CSI 驱动可以在运行时动态调整可以挂载到 Node 的最大卷数量。 这提高了调度准确性,并减少了由于资源可用性变化导致的 Pod 调度失败。 这是一个 Alpha 级别特性,默认情况下是禁用的。 要使用此特性,你必须在以下组件上启用 `MutableCSINodeAllocatableCount` 特性门控: - `kube-apiserver` - `kubelet` #### 定期更新 当启用时,CSI 驱动可以通过在 `CSIDriver` 规约中设置 `nodeAllocatableUpdatePeriodSeconds` 字段来请求定期更新其卷限制。 例如: ```yaml 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 的可分配卷数量的更新。