linux - Kubernetes 在启动 Pod 时不考虑总节点内存使用量
问题描述
我所看到的:Kubernetes 在调度新 Pod 时仅考虑其组件使用的内存,并将剩余内存视为空闲内存,即使它正在被 Kubernetes 之外的其他系统进程使用。因此,在创建新部署时,它会尝试在窒息的节点上安排新的 pod。
我期望看到的:Kubernetes 会自动考虑总内存使用量(通过 kubernetes 组件 + 系统进程)并将其调度到另一个节点上。
作为一种解决方法,是否有我需要设置的配置参数或者它是一个错误?
解决方案
是的,分配资源的参数很少:您可以为您的 pod 分配内存和 CPU,并为您的系统守护进程手动分配内存和 CPU。在文档 中,您可以找到它如何与示例一起使用:
示例场景
这是一个说明节点可分配计算的示例:
- 节点 有
32Gi
, 和memory
_16 CPUs
100Gi
Storage
--kube-reserved
被设定为cpu=1,memory=2Gi,ephemeral-storage=1Gi
--system-reserved
被设定为cpu=500m,memory=1Gi,ephemeral-storage=1Gi
--eviction-hard
被设定为memory.available<500Mi,nodefs.available<10%
在这种情况下, 将 Allocatable
是 内存和 本地存储。调度程序确保 该节点上所有 Pod 的总内存不超过 ,存储不超过 . 每当 pod 之间的总内存使用量超过 时,Kubelet 就会驱逐 pod ,或者如果整个磁盘使用量超过, 如果节点上的所有进程都消耗尽可能多的 CPU,则 pod 加起来消耗的 CPU 不能超过 .14.5 CPUs
28.5Gi
98Gi
requests
28.5Gi
88Gi
28.5Gi
88Gi
14.5 CPUs
如果 kube-reserved
和/或未 system-reserved
强制执行且系统守护程序超出其保留, kubelet
则每当总节点内存使用量高于 31.5Gi
或 storage
大于 90Gi
您可以根据需要为带有 flag 的 Kubernetes 和带有 flag--kube-reserved
的系统分配任意数量-system-reserved
。
此外,如果您需要更严格的 pod 生成规则,您可以尝试使用Pod Affinity。
推荐阅读
- java - 变异集合上的 Java 8 Lambda 闭包
- java - 返回 double 类型而不尝试零
- qt - QScriptEngine::evaluate("print(test)") 不再起作用
- c++ - 如何在 mac 终端上运行带有 .txt 文件的 c++ 程序作为参数?
- json - 我想使用 jolt 将一个输入 json 转换为所需的格式
- ruby-on-rails - 是否可以将 wisper 与 Ruby GraphQL 集成?
- html - 移动 safari 和 chrome 上的背景视频故障
- jsf - 使用jsf上传多个文件
- excel - 如何使用 2 个分隔符解析文本文件
- ruby - shopify网站需要很长时间才能加载