0
点赞
收藏
分享

微信扫一扫

jenkins+kubernetes 我解决了问题 The node was low on resource_ ephemeral-storage..md

问题发现

接收到反馈,正常运行的 jenkins 服务在打镜像的时候出现了多个镜像构建失败的情况。通过排查发现问题是

The node was low on resource: ephemeral-storage.

即 目标节点的临时存储空间不足

排查解决过程

  1. 首先搞清楚,kubernetes 中“临时存储空间”的概念
  1. 临时存储空间通常是指Pod使用的ephemeral-storage资源。这是一种临时的存储空间,通常用于存储容器日志、临时文件等。ephemeral-storage是Pod的一种资源,可以在Pod的yaml文件中设置请求和限制,以确保Pod不会占用过多的磁盘空间。
  2. Kubernetes会为每个Pod分配一个独立的临时存储空间,通常是节点上的本地磁盘。当Pod被删除或终止时,Kubernetes会自动清理这个临时存储空间,以释放磁盘空间。
  3. 要注意的是,如果您的应用程序需要大量的临时存储空间,那么您应该考虑增加节点的磁盘容量,或者使用其他方式来管理和清理临时数据,以避免占用过多的磁盘空间。否则,当节点上的磁盘空间不足时,就会出现“node was low on resource: ephemeral-storage”错误
  1. 这里发现了这个错误,那么首先去查看目标节点上的磁盘空间使用情况
  1. 这里如何查看?
  2. 一般查看一个节点的临时存储空间情况使用 命令 df -h /tmp
  1. 通常情况下 /tmp 目录是 Linux系统上的一个临时文件夹,用于存储临时文件和临时数据
  2. 在Kubernetes中,节点上的临时存储空间(ephemeral-storage)通常就是通过/tmp目录实现的
  1. 这里我使用 df -h /tmp 命令发现输出如下
  1. 文件系统 容量 已用 可用 已用% 挂载点
  2. /dev/vda1 79G 12G 64G 16% /
  3. 很显然空间是够用的,不过发现了一个奇怪的地方,查看 /tmp 目录的磁盘使用情况,这里却显示了 / 目录下的磁盘使用情况
  4. 这说明了 /tmp目录 被挂载到了 /目录上
  1. 然后接着需要查看整体磁盘使用情况,这里使用 df -h
  2. 我这里并没有发现 磁盘不够使用的情况
  1. 那么接下来如何排查?
  1. 一个关键点是,既然使用了 ephemeral-storage 那么是不是可以对 ephemeral-storage 进行配置。
  2. 通过查看 jenkins 的脚本发现并没有该配置项
  3. 查看describe pod查看pod运行时的信息也发现 ephemeral-storage 并没有配置
  4. 这个时候获取了一个关键的信息:不同的kubernetes 版本关于 ephemeral-storage 的默认配置有着不同的差别
  1. 即在有的版本,不配置就没有办法使用 ephemeral-storage 不然就会报错
  1. 配置ephemeral-storage,参考如下配置,配置完成之后重试,成功解决问题

apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
ephemeral-storage: "1Gi"
limits:
ephemeral-storage: "2Gi"

举报

相关推荐

0 条评论