Kubernetes 为系统守护进程预留计算资源
  TEZNKK3IfmPf 2023年11月14日 55 0

Kubernetes 的节点可以按照 Capacity 调度。默认情况下 pod 能够使用节点全部可用容量。这是个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程(system daemons)。除非为这些系统守护进程留出资源,否则它们将与 pod 争夺资源并导致节点资源短缺问题。

kubelet 公开了一个名为 Node Allocatable 的特性,有助于为系统守护进程预留计算资源。Kubernetes 推荐集群管理员按照每个节点上的工作负载密度配置 Node Allocatable。
Node Allocatable

kube-reserved

 

kube-reserved

 

system-reserved

 

eviction-threshold

 

allocatable (available for pods)

 

示例场景

这是一个用于说明节点 Allocatable 计算方式的示例:

节点拥有 32Gi 内存,16 核 CPU 和 100Gi 存储
–kube-reserved 设置为 cpu=1,memory=2Gi,storage=1Gi
–system-reserved 设置为 cpu=500m,memory=1Gi,storage=1Gi
–eviction-hard 设置为 memory.available<500Mi,nodefs.available<10%
在这个场景下,Allocatable 将会是 14.5 CPUs、28.5Gi 内存以及 98Gi 存储。调度器保证这个节点上的所有 pod 请求的内存总量不超过 28.5Gi,存储不超过 88Gi。当 pod 的内存使用总量超过 28.5Gi 或者磁盘使用总量超过 88Gi 时,Kubelet 将会驱逐它们。如果节点上的所有进程都尽可能多的使用 CPU,则 pod 加起来不能使用超过 14.5 CPUs 的资源。

当没有执行 kube-reserved 和/或 system-reserved 且系统守护进程使用量超过其预留时,如果节点内存用量高于 31.5Gi 或存储大于 90Gi,kubelet 将会驱逐 pod。

修改/etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-on=false --allow-privileged=true --system-reserved=cpu=12,memory=16Gi --kube-reserved=cpu=1,memory=2Gi --eviction-hard=memory.available<2Gi""
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
TEZNKK3IfmPf