我想为我们的自我管理集群做好充分的准备,以应对资源压力的情况。从文档我无法理解配置参数的必要性,因为我们可以通过为 kubelet 和系统守护进程--eviction-hard
设置适当的值来实现相同的效果。--kube-reserved
--system-reserved
让我通过一个例子来问一下。为什么我需要设置 Kubelet 和 system-daemons 的预留,而这似乎只需要 configure --eviction-hard
?一般来说,每当有资源压力时,这应该足以触发 pod 驱逐事件。那么 Kubelet 和 system-daemons 预留选项存在的原因是什么?
答案1
根据官方文件:
节点可分配
Kubernetes 节点上的“可分配”定义为 Pod 可用的计算资源量。调度程序不会超额订阅“可分配”。目前支持“CPU”、“内存”和“临时存储”。
可分配资源Node
(调度程序可以用来分配工作负载的资源)可以定义为:
Node allocatable
=Node capacity
-kube-reserved
-system-reserved
另外,至于:
kube-reserved
:
kube-reserved
旨在捕获 kubernetes 系统守护进程(如、、等)的资源预留。它kubelet
并不旨在为作为 pod 运行的系统守护进程预留资源。通常是节点上的功能。container runtime
node problem detector
kube-reserved
pod density
system-reserved
:
system-reserved
旨在捕获 OS 系统守护进程(如、等)的资源预留。sshd
也udev
应system-reserved
为 预留,memory
因为kernel
此时kernel
内存尚未计入 Kubernetes 中的 pod。还建议为用户登录会话预留资源(user.slice
在 systemd 世界中)。
简而言之,你可以很容易地想象当你没有为系统组件和保留足够的资源时会发生什么Kubelet
。
您甚至可能会遇到这样的情况:由于系统已经进入不稳定状态,驱逐处理程序将无法发挥作用。
另外值得一提的是:
您可以使用的一件事
--kube-reserved
是保留那些仅基于内存和临时存储的--system-reserved
组件所需的 CPU 。--eviction-hard