deepwzh的技术笔记
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • 云原生
  • Helm
  • Etcd
  • harbor
  • 学习资料
  • Fass
  • argo

    • argo
    • Argo cli 用法
  • Docker

    • Docker
    • docker 镜像打包
    • docker 镜像加速
    • 常用命令
    • 进阶 docker 资料
    • distribution/distribution
    • Docker
    • dockerfile 与镜像构建
  • K8s

    • K8s
    • 日志收集
    • 服务网格
    • 常用命令
    • 污点与容忍度
    • Kubectl
    • 应用发布
    • 存储
    • Cert-Manager
    • K8s Pod 生命周期与健康检查
    • 负载均衡器
    • 压力节点驱逐
    • Helm chart
    • 准入控制器

压力节点驱逐

概述

k8s node 上有一组参数,控制 k8s 中的内存,磁盘等资源占用占全部资源的最大比例,超过这个比例,pod 可能会被驱逐(evicted)

关于驱逐有以下几个概念

有三个概念:

  • 驱逐信号

  • 驱逐条件

    • 软驱逐条件
    • 硬驱逐条件
  • 节点条件

这些概念之间的关系是:

  • 节点条件 = f(驱逐条件),当满足不同的驱逐条件,节点条件会被设置成不同的值
  • 驱逐条件 = 驱逐信号 关系运算符(<,=,>) 条件值

驱逐信号

注意其中的 nodefs 和 imagefs 区别:

  1. nodefs:

    1. 节点的主要文件系统,用于本地磁盘卷、emptyDir、日志存储等。 例如,nodefs 包含 /var/lib/kubelet/。
    2. 默认就是/var/lib/kubelet 所在的分区,可以通过 kubelet 参数--root-dir 指定
  2. imagefs:

    1. 可选文件系统,供容器运行时存储容器镜像和容器可写层。
    2. 就是 docker 所在的分区

驱逐条件

驱逐条件公式: 驱逐信号 关系运算符(<,=,>) 条件值

分为软驱逐条件和硬驱逐条件。

区别是一个有宽限期一个没有宽限期

软驱逐条件相关配置(kubelet 配置中指定):

  • eviction-soft:一组驱逐条件,如 memory.available<1.5Gi, 如果驱逐条件持续时长超过指定的宽限期,可以触发 Pod 驱逐。
  • eviction-soft-grace-period:一组驱逐宽限期, 如 memory.available=1m30s,定义软驱逐条件在触发 Pod 驱逐之前必须保持多长时间。
  • eviction-max-pod-grace-period:在满足软驱逐条件而终止 Pod 时使用的最大允许宽限期(以秒为单位)

eviction-soft 默认值为 nil,即不设置软驱逐条件,具体见文档

硬驱逐条件相关配置(kubelet 配置中指定)

  • eviction-hard

默认值: memory.available: "100Mi" nodefs.available: "10%" nodefs.inodesFree: "5%" imagefs.available: "15%"

两组配置默认值详见参考文档 2

节点条件

当某 pod 满足了驱逐条件,会反映在 node 的节点条件上

可以根据这个信息去判断驱逐的原因

某机器某 pod 驱逐事件分析

分析过程

首先发现某服务执行会长时间卡住不动,去 k8s 平台查看 pod 状态

发现处于驱逐状态

驱逐的原因可能为磁盘,pid,内存不够,要具体确认的话需要看下节点事件中的条件状态

发现是 DiskPressure,查阅官网文档得知,可能是 nodefs 或者 imagefs 到达了阈值

登上机器 df 看一下

根目录分区到达 85%,目前配置中 nodefs 与 imagefs 均在根目录,驱逐条件没用手动设置过,默认值分别为 5% 和 15%,即已到达驱逐条件

解决方案

根分区中删点文件

参考资料

Prev
负载均衡器
Next
Helm chart