又卡了,大数据平台容器化运维走起


大家好,我是脚丫先生 (o^^o)

大数据基础平台的搭建,我采用的是全容器化Apache的大数据组件。

之前还很美滋滋的肝着。

某一天,我部署新服务的时候,突然提示我**「无法安装新的容器,提示磁盘占满 !」**

一、背景

Centos7的云服务器,内存16G,硬盘140G

实施大数据平台基础环境容器化部署。

因为大数据组件容器化的日志信息,没有定时清理,所以很快占满磁盘。

在这个云服务器资源寸土寸金的地方,没钱只能瞪眼的享受妥妥的无力感。

终不屈服的我,采用了不同的方案,以此分享给小伙伴们!!!

卡得我云服务器,真想给它一拳头。。。

  • 第一列 Filesystem 代表文件系统的名称。

  • 第二列 Size 表示文件系统的大小。

  • 第三列 Used 表示已占用多大的磁盘空间。

  • 第四列 Avail 表示可用磁盘空间的大小。

  • 第五列 Use% 表示磁盘使用率多大,100% 表示磁盘占满了。

  • 第六列 Mounted On 表示挂载在哪个目录。

二、方案总结

  • 方案零:转移数据修改docker默认存储位置,治标不治本,无法提供无限量磁盘。

  • 方案一:手动清理日志文件,可解燃眉之急,治标不治本。

  • 方案二:脚本定期清理日志文件,缺点是日志文件全丢了,无法追溯。

  • 方案三:限制所有容器的日志文件大小,治本,缺点是需要重新创建容器和启动 docker 镜像。

三、方案实施

3.0 转移数据修改docker默认存储位置

修改docker的默认存储位置

虽然有多种方式修改docker默认存储位置,但最好还是在docker安装完后,第一时间修改docker默认存储位置为其他大目录或者磁盘中。

规避迁移数据过程中造成的风险。

(1) 转移

  • 停止docker服务
systemctl stop docker
  • 创建新的docker目录

执行命令df -h,找一个大的磁盘,新建自己用于存储容器日志的目录

例如我在/home目录下面建了/home/modules/docker/lib目录

mkdir -p /home/modules/docker/lib
  • 迁移目录

把/var/lib/docker目录下面的文件到/home/modules/docker/lib目录里

迁移后的完成docker路径:/home/modules/docker/lib/docker

rsync -avz /var/lib/docker/ /home/modules/docker/lib/
  • 进行docker配置文件修改

配置文件网上很多,篇幅有限,不在此展开。

vim /etc/systemd/system/docker.service

添加如下:

ExecStart=/usr/bin/dockerd  --graph=/home/modules/docker/lib/docker
  • 重启docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker

3.1 手动清理

cat /dev/null > /var/lib/docker/containers/容器id/容器id-json.log

注意: 这里没有使用 rm 方式来删除文件。

使用 rm -rf 方式删除日志后,通过 df -h 会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过 rm -rf 或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。

如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。

正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。

3.2 定时容器日志清理

  • 编写清理docker日志文件脚本

在自己想在的目录下,编写清理脚本cleardockerlog.sh

#!/bin/sh 
echo "======== start clean docker containers logs ========"  
logs=$(find /var/lib/docker/containers/ -name *-json.log)  
for log in $logs  
        do  
                echo "clean logs : $log"  
                cat /dev/null > $log  
        done  
echo "======== end clean docker containers logs ========"
  • 加入定时任务,并设置立即生效
crontab -e
0 2 */1 * * sh /root/clean_docker_log.sh

3.3 限制 Docker 容器日志大小

新建 /etc/docker/daemon.json,若有就不用新建了。

vim /etc/docker/daemon.json

配置内容如下:

{
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}

max-size=500m,表示容器的日志文件大小上限是 500M, max-file=3,表示容器有三个日志,第一个满了 500M之后就写第二个,第二个满了 500M就写第三个,如果第三个满了,就清空第一个日志文件,重新写第一个日志文件。如下图所示:

写了 3 个日志文件,最大不超过 500M
改完之后需要重启 docker 守护进程


systemctl daemon-reload
systemctl restart docker

注意:
「这种方式只对新建的容器有效的,之前的容器不生效。」

验证容器是否已应用日志设置(以 root 身份):

/var/lib/docker/containers//hostconfig.json

猜你喜欢

转载自blog.csdn.net/shujuelin/article/details/131770061