我所看到的:Kubernetes 在调度新 Pod 时仅考虑其组件使用的内存,并将剩余内存视为空闲内存,即使它正在被 Kubernetes 之外的其他系统进程使用。因此,在创建新部署时,它会尝试在窒息的节点上安排新的 pod。
我期望看到的:Kubernetes 会自动考虑总内存使用量(通过 kubernetes 组件 + 系统进程)并将其调度到另一个节点上。
作为一种解决方法,是否有我需要设置的配置参数或者它是一个错误?
我所看到的: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。
Kubelet 具有--system-reserved
允许您为系统进程预留 cpu 和内存的参数。
它不是动态的(您仅在启动时保留资源),而是告诉 Kubelet 不要使用节点中的所有资源的唯一方法。
--系统保留的mapStringString
一组 ResourceName=ResourceQuantity(例如 cpu=200m,memory=500Mi,ephemeral-storage=1Gi)对,描述为非 kubernetes 组件保留的资源。目前仅支持 cpu 和 memory。有关更多详细信息,请参阅http://kubernetes.io/docs/user-guide/compute-resources。[默认=无]