gpt4 book ai didi

python - 从 docker 容器中隐藏节点核心数

转载 作者:行者123 更新时间:2023-12-05 07:21:58 27 4
gpt4 key购买 nike

我目前正在构建一个系统,该系统在 kubernetes 集群中的各个部署中运行服务,并且需要限制容器内的可见内核。

节点规范:
8 核
16 GB 内存

当我部署时,登录到容器并使用 python 的 multiprocessing 模块检查核心计数,我得到以下输出:

In [1]: import multiprocessing
In [2]: multiprocessing.cpu_count()
Out[2]: 8

这个输出是正确的,因为我的节点有 8 个核心。

我希望容器在运行相同的 multiprocessing.cpu_count() 命令时返回核心数 1 作为核心数。

示例用例如下:

开发人员创建一个运行 python 和 gunicorn 的 api 服务,gunicorn 的默认行为是为可用内核数创建 worker。

当 pod 只允许 100m CPU 和 300m Mem 时,以上将是一个问题,因为 8 个 worker 会在某个时候填满内存并且 pod 会崩溃,我也想隐藏这个为了潜在的以编程方式检测资源时的困惑和意外行为。

我曾尝试使用 --cpuset-cpus=0 标志,因为它作为一个潜在的解决方案脱颖而出,但根据我的理解和经验,这只会将容器限制在指定的范围内核心,不隐藏其他 7 个核心。

有什么方法可以做到这一点,我们将不胜感激。

最佳答案

您可以有一个环境变量 NUM_CPUS,如果它存在,您应该使用它而不是 multiprocessing.cpu_count()。像这样的东西:

import os

num_cpus = os.getenv("NUM_CPUS")
if num_cpus is not None:
cpu_count = max(round(num_cpus), 1)
else:
cpu_count = multiprocessing.cpu_count()

关于python - 从 docker 容器中隐藏节点核心数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56701824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com