我需要将应用程序/部署限制为仅在特定 cpus 上运行(例如 0-3 或仅 1 或 2 等)。我发现了 CPU Manager 并尝试使用static
策略实现它,但无法实现我想要的。
到目前为止,我尝试了以下方法:
- 在 kubelet 上启用 cpu manager
static
策略并验证它是否已启用 --reserved-cpus=0-3
在 kubelet 中保留带有选项的 cpu- 运行一个示例 nginx 部署,其限制等于请求和整数值的 cpu,即保证的 QoS 得到保证,并且能够验证 cpu 亲和性
taskset -c -p $(pidof nginx)
因此,这使我的 nginx 应用程序被限制在保留 cpus (0-3) 以外的所有 cpus 上运行,即如果我的机器有 32 个 cpus,则该应用程序可以在 4-31 个 cpus 上运行。任何其他将运行的应用程序/部署也可以。据我了解,保留的 cpus 0-3 将保留给系统守护进程、操作系统守护进程等。
我的问题-
- 使用 Kubernetes CPU 管理器功能,是否可以将某些 cpu 固定到应用程序/pod(在本例中为我的 nginx 应用程序)以仅在特定 cpu 上运行(例如 2 或 3 或 4-5)?如果是,如何?
- 如果点 1 是可能的,我们是否也可以在容器级别执行固定,即说 Pod A 有两个容器 Container B 和 Container D。是否可以将 cpu 0-3 固定到 Container B 并将 cpu 4 固定到 Container B?
- 如果使用 Kubernetes CPU 管理器都无法实现这一切,那么目前有哪些可用的替代方案(如果有的话)?