我看到:Kubernetes在调度新Pod时仅考虑其组件使用的内存,并将剩余内存视为空闲,即使它被Kubernetes之外的其他系统进程使用。因此,在创建新部署时,它会尝试在窒息的节点上安排新的pod。
我期望看到的内容:Kubernetes 自动考虑总内存使用量(通过kubernetes组件+系统进程)并在另一个节点上安排它。
作为解决方法,是否需要设置配置参数或是否为错误?
答案 0 :(得分:1)
是的,分配资源的参数很少: 您可以为pod分配内存和CPU,并手动为系统守护程序分配内存和CPU。 In documentation您可以通过示例找到它的工作原理:
以下是说明节点可分配计算的示例:
INSERT INTO INVOICES
(UID, POID, REFID)
SELECT IMPORT.UID,
IMPORT.POID,
IMPORT.REFID
FROM INVOICES
WHERE NOT EXISTS(STUCK HERE)
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
,14.5 CPUs
内存和28.5Gi
本地存储。调度程序可确保此节点上所有容器中的总内存98Gi
不超过requests
且存储空间不超过28.5Gi
。每当整个pod的内存使用量超过88Gi
时,或者如果整体磁盘使用量超过28.5Gi
,Kubelet就会逐出pods。如果节点上的所有进程都消耗尽可能多的CPU,那么pod一起消耗的数量不会超过{{ 1}}。
如果未强制执行88Gi
和/或14.5 CPUs
并且系统守护程序超出其预留,则kube-reserved
会在整个节点内存使用率高于system-reserved
或kubelet
时逐出pod {1}}大于31.5Gi
您可以使用标记storage
为Kubernetes分配所需数量,为标记90Gi
分配系统。
此外,如果您需要更严格的产卵荚规则,可以尝试使用Pod Affinity.