在 Kubernetes 中,节点上的 Pod 在内存使用过高时会被驱逐,以防止节点资源耗尽。这一行为由 kubelet 组件的 --eviction-hard 或 --system-reserved 参数控制,前者定义了在触发驱逐之前必须满足的硬性资源阈值,后者则为系统预留了一些资源。
默认情况下,kubelet 可能配置了基于内存使用量的驱逐阈值,比如当节点内存使用量达到90%时驱逐 Pod。若要修改这个阈值,使其达到95%时再驱逐 Pod,你可以调整 kubelet 的配置。
注意:修改 kubelet 配置通常涉及集群节点级别的更改,这可能需要重新启动 kubelet 进程或整个节点。这些更改应当谨慎进行,并在非生产环境中先行测试。
以下是修改驱逐阈值的一般步骤:
找到 kubelet 配置文件:根据你的 Kubernetes 安装方式,kubelet 的配置文件可能位于不同的位置。例如,在使用 kubeadm 安装的集群中,它通常位于 /var/lib/kubelet/config.yaml。
编辑驱逐阈值:打开 kubelet 配置文件,并找到 evictionHard 设置(如果存在的话)。没有的话就需要自己去设置了:

上面的示例设置了当节点上可用内存少于100Mi,可用文件系统空间少于10%,可用inode少于5%,或者镜像文件系统空间少于15%时,kubelet将开始驱逐Pod。

请注意,在添加或修改任何配置之前,都应该备份原始配置文件,以防出现不可预见的问题。

修改完成后,你需要重启kubelet服务以使更改生效。重启服务的方法可能因你的操作系统和Kubernetes部署方式而异,但通常可以使用如systemctl restart kubelet的命令来完成。

修改内存使用量的阈值。例如,如果当前设置为 memory.available<10%(表示当可用内存低于10%时触发驱逐),你可以将其更改为 memory.available<5%(表示当可用内存低于5%时触发驱逐)。但请注意,这里的数字是表示可用内存的百分比,所以实际上你应该将其设置得更小以反映更大的使用量阈值。
实际上,更直观的设置可能是使用类似于 nodefs.available 或 nodefs.inodesFree 这样的指标,并基于节点总内存来计算95%的使用阈值。然而,memory.available 是更常见的设置,并且通常与系统的总体内存压力相关联。因此,你可能需要根据你的具体需求和集群的监控能力来调整这个设置。
应用配置更改:保存并关闭配置文件。
根据你的环境,你可能需要重新启动 kubelet 进程或整个节点以使更改生效。这通常可以通过系统的服务管理工具(如 systemctl)来完成。
验证更改:在应用更改后,监控节点的内存使用情况和 Pod 的驱逐行为,以确保新的驱逐阈值按预期工作。
重要提示:在调整这些参数之前,请确保你充分理解了它们对集群稳定性和性能的影响。不当的设置可能导致节点资源过度利用、Pod 频繁驱逐或节点不稳定等问题。此外,考虑到不同工作负载和应用程序的内存需求可能有所不同,因此可能需要在多个节点或节点池上应用不同的设置。

在 Kubernetes 中,节点上的 Pod 在内存使用过高时会被驱逐,以防止节点资源耗尽。这一行为由 kubelet 组件的 --eviction-hard 或 --system-reserved 参数控制,前者定义了在触发驱逐之前必须满足的硬性资源阈值,后者则为系统预留了一些资源。
默认情况下,kubelet 可能配置了基于内存使用量的驱逐阈值,比如当节点内存使用量达到90%时驱逐 Pod。若要修改这个阈值,使其达到95%时再驱逐 Pod,你可以调整 kubelet 的配置。
注意:修改 kubelet 配置通常涉及集群节点级别的更改,这可能需要重新启动 kubelet 进程或整个节点。这些更改应当谨慎进行,并在非生产环境中先行测试。
以下是修改驱逐阈值的一般步骤:
找到 kubelet 配置文件:根据你的 Kubernetes 安装方式,kubelet 的配置文件可能位于不同的位置。例如,在使用 kubeadm 安装的集群中,它通常位于 /var/lib/kubelet/config.yaml。
编辑驱逐阈值:打开 kubelet 配置文件,并找到 evictionHard 设置(如果存在的话)。
修改内存使用量的阈值。例如,如果当前设置为 memory.available<10%(表示当可用内存低于10%时触发驱逐),你可以将其更改为 memory.available<5%(表示当可用内存低于5%时触发驱逐)。但请注意,这里的数字是表示可用内存的百分比,所以实际上你应该将其设置得更小以反映更大的使用量阈值。
实际上,更直观的设置可能是使用类似于 nodefs.available 或 nodefs.inodesFree 这样的指标,并基于节点总内存来计算95%的使用阈值。然而,memory.available 是更常见的设置,并且通常与系统的总体内存压力相关联。因此,你可能需要根据你的具体需求和集群的监控能力来调整这个设置。
应用配置更改:保存并关闭配置文件。
根据你的环境,你可能需要重新启动 kubelet 进程或整个节点以使更改生效。这通常可以通过系统的服务管理工具(如 systemctl)来完成。
验证更改:在应用更改后,监控节点的内存使用情况

Logo

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

更多推荐