如何去掉k8s对hugepages的管理或者对容器分配hugepages时平均分配到NUMA nodes上?

darkseaforever 2023-09-07 10:43:03

k8s在给容器分配hugepages时总是趋向于用最少的NUMA node: 分配完NUMA 0, 才去分配NUMA 1。

问题是部分应用需要在NUMA nodes间平均分配需要的CPU和hugepages. 

请问如下例子,如果配置实现?

Server上有32 hugepages, 2 NUMA nodes, 容器需要8 hugepages, 请问如果实现NUMA 0和NUMA 1上各分4个?

 

如果有完全去掉hugepages的管理的方法也行。比如Docker不对hugepages做管理, 容器可以自由申请需要的hugepages. 问题是K8S中的容器,如果不在POD中定义需要的hugepages, 应用在容器中无法像docker一样申请到hugepages, 会报错。

请问有没有方法可以彻底去掉k8s对hugepages的管理?

...全文
请提供帮助,谢谢!
拼手气红包 150.00元
1071 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yule.yang 2023-09-07
  • 打赏
  • 举报
回复

在Kubernetes中,每个节点能够预先分配多种规格的巨页,但Kubernetes在给容器分配巨页时总是趋向于使用最少的NUMA node。

要实现NUMA 0和NUMA 1上各分配4个hugepages,可以尝试以下方法:

在每个节点上预先分配8个hugepages,并公开可调度的资源hugepages-2Mi和hugepages-1Gi。
在Pod的spec中请求8个hugepages资源,并指定在NUMA 0和NUMA 1上各分配4个。
在请求巨页资源时,必须请求内存或CPU资源。
至于完全去掉Kubernetes对hugepages的管理,目前没有很好的方法。因为Kubernetes需要预先分配巨页,以便节点能够上报巨页容量。如果不在POD中定义需要的hugepages,应用在容器中无法像Docker一样申请到hugepages,会报错。如有其他问题,建议咨询Kubernetes专家或官方文档。

Java方文山 2023-09-07
  • 打赏
  • 举报
回复

要实现NUMA 0和NUMA 1上各分4个hugepages,可以在Pod的YAML文件中设置resources.requests.memory和resources.limits.memory。以下是一个示例:

复制代码

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
    resources:
      requests:
        memory: "8Gi"
      limits:
        memory: "8Gi"

在这个例子中,我们为容器设置了8个GiB的内存请求和限制。这将导致Kubernetes在调度时尽量均匀地分配内存,包括hugepages。然而,这种方法不能保证NUMA节点上的内存分布是1:1的,因为Kubernetes可能会优先考虑其他因素,如Pod的其他资源需求、节点上的其他容器等。

要彻底去掉k8s对hugepages的管理,可以尝试将--feature-gates=MemoryManager=off添加到运行容器的命令中。例如:

复制代码

kubectl run my-pod --image=my-image --restart=Never --command="sh" --feature-gates=MemoryManager=off

这将禁用Kubernetes的内存管理器,允许容器自由申请需要的hugepages。然而,请注意,这可能会导致内存使用不均衡和其他问题,因此在使用此选项时要谨慎。

59,829

社区成员

发帖
与我相关
我的任务
社区描述
Kubernetes起源于古希腊,舵手的意思。谷歌用它命名,不言而喻。社区收录k8s学习开发运维相关博文,欢迎小伙伴积极投稿,可以发帖引流到站内站外博文。路飞说立志要成为海贼王的男人,小伙伴共勉^_^
kubeless 个人社区 北京·房山区
社区管理员
  • 山河已无恙
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧