k8s根目录超过多少会触发驱逐Pod
需要注意的是,驱逐过程可能会导致节点上的Pod被删除,因此在调整阈值时需要谨慎。在Kubernetes中,根据不同的配置和实际情况,节点上的根目录可能会出现不同的使用情况。如果在kubelet的配置文件中没有明确设置根目录使用的阈值,那么Kubernetes将会使用默认的阈值。可以通过修改kubelet的配置文件来设置根目录的使用阈值,例如在kubelet的启动参数中添加。参数用于设置根目录使用的
阈值
在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。以下是一般情况下驱逐顺序的定义:
-
驱逐非必需的本地存储卷(local volume)绑定的 Pod:如果一个 Pod 使用了本地存储卷并且没有其他节点上的备份,当节点上的磁盘空间不足时,kubelet 将首先尝试驱逐这些 Pod。
-
驱逐最早未使用的 Pod(LRU):如果仍然需要释放空间,kubelet 将选择最近最久未使用的 Pod 进行驱逐。通常情况下,这些 Pod 往往是具有低优先级的、不重要的 Pod。
-
驱逐运行着的、优先级低的 Pod:如果以上两个步骤都无法释放足够的空间,kubelet 可能会选择优先级较低的 Pod 进行驱逐。Pod 的优先级是通过设置 PodSpec 的 priorityClass 或者 Pod 的 QoS 类型来定义的。
在实际部署中,可以根据自己的需求进行优化级的规划。你可以为不同类型的 Pod 设置不同的优先级,以确保重要的应用或服务不容易被驱逐。例如,你可以为重要的应用设置较高的优先级,让它们更加稳定地运行。另外,你还可以使用 Pod 的 QoS 类型(Guaranteed、Burstable 和 BestEffort)来影响它们在驱逐过程中的顺序。
要设置 Pod 的优先级,可以通过 priorityClass 字段或 annotation 来指定。并且可以使用 kubectl 或者编排工具(如 Helm)在 Pod 创建时进行配置。请注意,在进行优化级规划时,需要综合考虑应用的需求、资源分配和业务优先级等因素。
更多推荐
所有评论(0)