3

我所看到的:Kubernetes 在调度新 Pod 时仅考虑其组件使用的内存,并将剩余内存视为空闲内存,即使它正在被 Kubernetes 之外的其他系统进程使用。因此,在创建新部署时,它会尝试在窒息的节点上安排新的 pod。

我期望看到的:Kubernetes 会自动考虑总内存使用量(通过 kubernetes 组件 + 系统进程)并将其调度到另一个节点上。

作为一种解决方法,是否有我需要设置的配置参数或者它是一个错误?

4

2 回答 2

1

是的,分配资源的参数很少:您可以为您的 pod 分配内存和 CPU,并为您的系统守护进程手动分配内存和 CPU。在文档 中,您可以找到它如何与示例一起使用:

示例场景

这是一个说明节点可分配计算的示例:

  • 节点 有 32Gi , 和 memory_ 16 CPUs100GiStorage
  • --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 CPUs28.5Gi98Girequests28.5Gi88Gi28.5Gi88Gi14.5 CPUs

如果 kube-reserved 和/或未 system-reserved 强制执行且系统守护程序超出其保留, kubelet 则每当总节点内存使用量高于 31.5Gistorage 大于 90Gi

您可以根据需要为带有 flag 的 Kubernetes 和带有 flag--kube-reserved 的系统分配任意数量-system-reserved

此外,如果您需要更严格的 pod 生成规则,您可以尝试使用Pod Affinity。

于 2018-05-23T14:59:56.053 回答
-1

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。[默认=无]

于 2018-05-22T15:41:30.283 回答