Pod 原地垂直伸缩
该提案旨在允许 Pod 资源 requests 和 limits 的原地更新,而不需要重新启动 Pod 或其容器,该方案的核心思想是让 PodSpec 的 Resources 是可变的,表示所需的资源,此外 扩展 PodStatus
来反映分配给 Pod 的资源,并提供有关应用于 Pod 及其容器的实际资源信息。
此外该提案还提出了改进容器运行时接口(CRI)API,以便在运行时管理容器的 CPU 和内存资源配置,尝试扩展 UpdateContainerResources
这个 CRI API,使其适用于 Windows 和除 Linux 之外的其他未来的运行时。它还需求扩展 ContainerStatus CRI API
,以允许 Kubelet 能够发现当前配置在容器上的资源。
原因
由于各种原因,分配给 Pod 的容器资源可能需要变更比,这种场景有很多:
☑ 如 Pod 处理的负载大幅增加,而目前的资源不足了
☑ 又或者说负载大幅减少了,而分配的资源未被使用
☑ 资源配置不合理
目前,更改资源分配是需要重新创建 Pod 的,因为 PodSpec 的容器资源是不可改变的。 虽然许多无状态的工作负载被设计成可以承受这样的中断,但有些工作负载更加敏感,特别是在使用低数量的 Pod 副本时。
此外,对于有状态或批处理的工作负载,Pod 重启是一个严重的破坏行为,会导致工作负载可用性降低或运行成本提高。
允许在不重新创建 Pod