磁盘写满引发的后果

容器数据磁盘写满造成的后果:

  • Pod 不能删除 (一直 Terminating)
  • Pod 不能被创建 (一直 ContainerCreating)

磁盘写满分两种情况:

  • 磁盘空间全部使用完

    # 系统盘被占满$ df -Th文件系统       类型      容量  已用  可用 已用% 挂载点/dev/vda1    ext4      50G  50G   0G   100% //dev/vdb1    ext4    100G  10G  90G   10% /data
  • 磁盘 Inode 全部使用完

    # 数据盘 Inode 被占满$ df -i文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点/dev/vda1    3276800  3276800 0      100% /

判断磁盘写满方法

下面命令能快速的排查磁盘占满原因:

  • docker info | grep 'Docker Root Dir' # 检查 Docker 存储目录
  • docker system df # 查看容器磁盘使用情况
  • df -hT # 检查宿主机 磁盘空间 使用情况
  • df -i # 检查宿主机 Inode 使用情况

解决方法

PS:保证业务能正常使用为第一原则解决问题

  • 标记 Node 为不可调度

    $ kubectl drain ${node-name}
  • 查找那个容器输出日志占用最大

    $ for name in $(docker ps -a  | awk '{print $1}' | grep -v CONTAINER); do docker inspect $name | grep LogPath | awk '{print $NF}' | tr -d '",' |xargs du -sh;done5G  /var/lib/docker/containers/d0e330944a074268a1f0998fd66ee73f584642352a2fe77304c1fa49b819893a/d0e330944a074268a1f0998fd66ee73f584642352a2fe77304c1fa49b819893a-json.log
  • 清空容器日志文件

    注意:如果需要重启 docker服务,首先腾出一点磁盘空间,不然重启 docker 会失败。不能直接使用 rm 删除日志文件,这样磁盘空间是不会释放的。不小心这样操作,那只能通过 systemctl restart docker 重启 Docker 服务释放磁盘空间,如果磁盘还是没有释放,可以通过 lsof | grep -i delete 查找已删除的文件进程,找到后直接 kill掉。

    # 通过 echo 命令 清空日志文件$ echo > /var/lib/docker/containers/d0e330944a074268a1f0998fd66ee73f584642352a2fe77304c1fa49b819893a/d0e330944a074268a1f0998fd66ee73f584642352a2fe77304c1fa49b819893a-json.log
  • 清理节点不用的 images,释放磁盘空间

    # 查看 docker 镜像$ docker images# 删除不用的镜像$ docker rmi ${images_id}

上面步骤操作完后(上面清理日志方法,可能对于收集日志程序会丢失一些日志,但一般情况能接受),可以选择驱赶节点上所有pod(kubectl drain ${node-name} )再优化Docker配置。也可以不驱赶节点上pod,在现基础上优化容器日志方法,优化配置后重启 Docker,这会导致节点上pod中断一会,如果前端反向代理具备重试机制一般不会影响业务正常访问。

优化完 Docker配置后,把节点加入到k8s集群中,正常服务。

# 取消不可调度的标记$ kubectl uncordon ${node-name}

定位问题根本原因及解决思路

  • 日志输出量大,导致磁盘写满

    • 减少日志输出,调整应用日志输出级别
    • 增大磁盘空间
    • 日志输出到统一日志收集中心
  • 容器镜像占满磁盘

    • 配置k8s垃圾回收策略
    • 节点运行 images 定时清理脚本
  • 可写层量大导致磁盘写满: 优化程序逻辑,不写文件到容器内或控制写入文件的大小与数量

具体优化方法

  • 配置 Docker日志轮转,数据目录不要存放在系统盘

    $ vim /etc/docker/daemon.json{"registry-mirrors": ["https://4xr1qpsp.mirror.aliyuncs.com"], "graph": "/data/docker", "log-opts": {"max-size":"500m", "max-file":"3"}}

    配置解释:

    配置完,重启 docker才能生效,日志轮转只对以后新创建的容器有效。

    • registry-mirrors 镜像加速配置
    • graph 定义数据存储目录
    • max-size=500m 意味着一个容器日志大小上限是500M
    • max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json
  • 清理 docker images

    定时清理脚本

    $ vim docker_delete_image.sh#!/usr/bin/env bashfor images_id in `docker images | grep 'harbor.example.com' | awk '{print $3}'`do    docker rmi $images_iddone# 清理  imagesfor images_id_1 in `docker images  | awk '$2 ~ ""{print $3}'`do    docker rmi $images_id_1done

    kubernetes 垃圾回收配置,这里不在细讲,具体参考官方配置文档 https://kubernetes.io/docs/concepts/workloads/controllers/garbage-collection/

参考链接

  • https://kubernetes.io/docs/concepts/workloads/controllers/garbage-collection/
  • https://mp.weixin.qq.com/s/IolydydvQoRh1okI7aWuiA

往期精彩文章

  • OpenVpn 服务端与客户端部署
  • Kubernetes Node资源预留
  • 谈谈K8S Pod Eviction 机制
  • Mysql存储微信Emoji表情问题
  • Etcd v3备份与恢复
  • Nginx 必须知道哪些事?

您的关注是小站的动力

欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native

扫码『加群』交流技术


kubernetes 清理日志命令_Kubernetes之容器数据写满磁盘解决方法相关推荐

  1. Kubernetes之容器数据写满磁盘解决方法

    磁盘写满引发的后果 容器数据磁盘写满造成的后果: Pod 不能删除 (一直 Terminating) Pod 不能被创建 (一直 ContainerCreating) 磁盘写满分两种情况: 磁盘空间全 ...

  2. ORA-00257归档日志写满的解决方法 - xwdreamer - 博客园

    ORA-00257归档日志写满的解决方法 - xwdreamer - 博客园 参考文章: (1)ORA-00257归档日志写满的解决方法 - xwdreamer - 博客园 (2)https://ww ...

  3. ORA-00257归档日志写满的解决方法

    ORA-00257归档日志写满的解决方法 参考文章: (1)ORA-00257归档日志写满的解决方法 (2)https://www.cnblogs.com/xwdreamer/p/3804509.ht ...

  4. oracle归档日志写满错误解决方法

    最近一年,手头上负责的项目要部署到很多个地方,由于项目组里没有人对oracle比较熟悉,只能给自己增加一个DBA的角色了.由于短时间内要部署很多单位,备份策略没有设置好,结果过了一个月,用户报告程序开 ...

  5. oracle 日志写满,Oracle归档日志写满错误解决方法

    最近一年,手头上负责的项目要部署到很多个地方,由于项目组里没有人对Oracle比较熟悉,只能给自己增加一个DBA的角色了.由于短时间内要部署很多单位,备份策略没有设置好,结果过了一个月,用户报告程序开 ...

  6. php下载文件压缩包已经损坏或未知格式,这个压缩文件格式未知或者数据已经被损坏解决方法...

    "这个压缩文件格式未知或者数据已经被损坏"解决方法 1.如果是从网上下载的压缩文件,很有可能是网站提供的本身就是损坏的压缩文件.如果重新下载之后仍然是损坏的,可以从其他网站下载. ...

  7. mysql 闪回_MySQL数据误删除的快速解决方法(MySQL闪回工具)

    概述 Binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binlog解析为回滚的SQL,去除主键的INSERT SQL,是 ...

  8. dos系统不能安装python模块,无法使用pip命令安装python第三方库的原因及解决方法...

    再dos中无法使用pip,命令主要是没有发现这个命令.我们先找到这个命令的位置,一般是在python里面的scripts文件夹里面.我们可以把dos切换到对应的文件夹,再使用pip命令就可以了. 如果 ...

  9. IE浏览器下ajax缓存导致数据不更新的解决方法

    IE浏览器下ajax缓存导致数据不更新的解决方法 参考文章: (1)IE浏览器下ajax缓存导致数据不更新的解决方法 (2)https://www.cnblogs.com/xcsn/p/4745437 ...

最新文章

  1. zabbix监控Tomcat
  2. 程序员带娃有多“恐怖” ?!
  3. 新手做自媒体运营了解这几个步骤,运营效率提高5倍!(附教程)
  4. socket inet_pton
  5. win11 wsl及ubuntu设置为wsl 2
  6. c# datetime._C#| DateTime.Month属性与示例
  7. javascript中call apply的区别
  8. python django框架 比php_django 第一感觉对比 php 各大框架
  9. matlab绘图举例,MATLAB绘图教程详解
  10. TFS2010安装全过程
  11. 物联网全栈教程(1)——总目录
  12. [软件工程] UML 用例图详解
  13. matlab中radon函数6,matlab实用程序(六)
  14. 前端的性能优化-笔记
  15. 积化和差、和差化积公式及记忆
  16. 人工智能如何自己玩游戏?
  17. Excel PivotTable 使用心得手顺分享(五)
  18. Revit综合软件【加强过滤】的使用方法
  19. 华为M3平板升级鸿蒙系统,华为m3平板 日版刷国行 没有重力感应怎么解决?(篇二)...
  20. 上行30m下行200m是多少宽带_套餐内有多少流量,就加送多少流量!电信流量攻势太凶猛!...

热门文章

  1. python怎么读取列表-Python如何获取列表(List)的中位数
  2. python快速入门 pdf-零起点PYTHON机器学习快速入门 PDF |网盘链接下载|
  3. python入门教程非常详细-Python 基础教程
  4. python编程入门经典实例-Python入门经典实例
  5. Makefile文件的编写规则
  6. xor java_java基于密匙的xor加解密
  7. spring中的BeanFactoryPostProcessor
  8. LeetCode Integer to English Words(整数转化为英文字母)
  9. LeetCode Remove Duplicates from Sorted List
  10. 使用session防止表单进行重复提交