阈值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在Kubernetes中,根据不同的配置和实际情况,节点上的根目录可能会出现不同的使用情况。当根目录使用超过阈值时,节点可能会出现驱逐的情况。默认情况下,当根目录使用超过90%时,节点将开始启动驱逐过程。

这个阈值可以通过Kubernetes的配置进行修改。可以通过修改kubelet的配置文件来设置根目录的使用阈值,例如在kubelet的启动参数中添加--eviction-hard=memory.available<500Mi,nodefs.available<10%,nodefs.inodesFree<5%,其中nodefs.available参数用于设置根目录使用的阈值。这里的10%表示当根目录使用超过10%时,节点将开始启动驱逐过程。需要注意的是,驱逐过程可能会导致节点上的Pod被删除,因此在调整阈值时需要谨慎。建议在根目录使用接近阈值时就开始进行清理或扩容操作,以避免出现驱逐的情况。

在Kubernetes中,kubelet的配置文件通常位于/etc/kubernetes/kubelet.conf。你可以通过修改kubelet的启动参数来设置根目录使用的阈值,例如在kubelet的启动参数中添加--eviction-hard=memory.available<500Mi,nodefs.available<10%,nodefs.inodesFree<5%>,其中--eviction-hard参数用于设置Pod被驱逐的硬性条件,memory.available用于设置内存可用的百分比或绝对值,nodefs.available用于设置节点根目录可用的百分比,nodefs.inodesFree用于设置节点根目录可用的inode百分比。这里的nodefs.available参数用于设置根目录使用的阈值。需要注意的是,在修改kubelet配置文件之前,请备份原始配置文件以便需要时进行还原。

如果在kubelet的配置文件中没有明确设置根目录使用的阈值,那么Kubernetes将会使用默认的阈值。根据不同的Kubernetes版本,这个默认的阈值可能会有所不同。在Kubernetes 1.15及之前的版本中,默认的根目录使用阈值为90%。在Kubernetes 1.16及之后的版本中,默认的根目录使用阈值为80%。如果你的配置文件中没有设置--eviction-hard参数,则Kubernetes将会使用默认的阈值。如果你想要修改根目录使用的阈值,可以在kubelet的启动参数中添加--eviction-hard=memory.available<500Mi,nodefs.available<10%,nodefs.inodesFree<5%>这样的参数,其中nodefs.available参数用于设置根目录使用的阈值。需要注意的是,在修改kubelet配置文件之前,请备份原始配置文件以便需要时进行还原。

目录满导致驱逐的顺序@1

/var/lib/docker//var/lib/kubelet/目录满了时,可能会导致Kubernetes节点上的容器或Pod被驱逐(Evicted)。这是由于存储资源不足而引起的。

1. 目录满导致驱逐的顺序:
/var/lib/docker//var/lib/kubelet/目录满了时,kubelet 将按照以下顺序执行 Pod 驱逐:

  • 驱逐非必需的本地存储卷(local volume)绑定的 Pod。
  • 驱逐最早未使用的 Pod(Least Recently Used, LRU)。这些Pod往往是具有低优先级的、不重要的Pod。
  • 如果仍然需要释放空间, kubelet 可能会驱逐运行着的、优先级低的Pod。

grep -i 85% /var/log/messages
在这里插入图片描述
kubelet logs -> journalctl -xu kubelet > kubelet.log
在这里插入图片描述

https://stackoverflow.com/questions/54155534/kubernetes-eviction-manager-evicting-control-plane-pods-to-reclaim-ephemeral-sto/60068671#60068671

https://devpress.csdn.net/k8s/62ffc7fac67703293080625f.html

2. Pod划分为3种QoS等级:
Kubernetes将Pod根据其资源需求和容忍度分为三个品质服务(Quality of Service, QoS)等级。这些等级与Pod的调度、驱逐和资源分配有关:

  • Guaranteed(保证): 这些Pod具有明确的资源需求(包括CPU和内存),并且在集群中默认情况下不会被驱逐。它们被保证可以获得所需的资源。
  • Burstable(可伸缩): 这些Pod有限制的资源需求,但可以使用更多资源,以满足其工作负载的瞬时需求。它们可能会与其他Pod竞争资源,并在需要时被驱逐。
  • BestEffort(尽力而为): 这些Pod没有明确的资源需求,并且是最低优先级的。它们将尽量使用剩余的空闲资源,但在资源紧张时首先被驱逐。

因此,如果/var/lib/docker//var/lib/kubelet/目录满了,kubelet 将按照上述顺序驱逐Pod,而与QoS等级无直接关系。然而,Pod的QoS等级与其在集群中的调度、资源分配和优先级有关。

目录满导致驱逐的顺序@2

目录满导致驱逐的顺序是由 Kubernetes 中的 kubelet 组件执行的。kubelet 会根据一定的策略来选择要驱逐的 Pod。以下是一般情况下驱逐顺序的定义:

  1. 驱逐非必需的本地存储卷(local volume)绑定的 Pod:如果一个 Pod 使用了本地存储卷并且没有其他节点上的备份,当节点上的磁盘空间不足时,kubelet 将首先尝试驱逐这些 Pod。

  2. 驱逐最早未使用的 Pod(LRU):如果仍然需要释放空间,kubelet 将选择最近最久未使用的 Pod 进行驱逐。通常情况下,这些 Pod 往往是具有低优先级的、不重要的 Pod。

  3. 驱逐运行着的、优先级低的 Pod:如果以上两个步骤都无法释放足够的空间,kubelet 可能会选择优先级较低的 Pod 进行驱逐。Pod 的优先级是通过设置 PodSpec 的 priorityClass 或者 Pod 的 QoS 类型来定义的。

在实际部署中,可以根据自己的需求进行优化级的规划。你可以为不同类型的 Pod 设置不同的优先级,以确保重要的应用或服务不容易被驱逐。例如,你可以为重要的应用设置较高的优先级,让它们更加稳定地运行。另外,你还可以使用 Pod 的 QoS 类型(Guaranteed、Burstable 和 BestEffort)来影响它们在驱逐过程中的顺序。

要设置 Pod 的优先级,可以通过 priorityClass 字段或 annotation 来指定。并且可以使用 kubectl 或者编排工具(如 Helm)在 Pod 创建时进行配置。请注意,在进行优化级规划时,需要综合考虑应用的需求、资源分配和业务优先级等因素。

Node-pressure Eviction

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐