处理Docker运行中产生的Log日志

随着系统运行的时间越长,Log日志所占的空间也越来越大,但是磁盘空间是一定的,这时就需要清理一下这些无用的日志文件,主要有以下两个方式进行清理

1.手动清理

进入 /var/lib/docker/container 中找到较大的 .log 文件,在管理员权限下(sudo su root)使用命令 cat /dev/null > xxx.log 清空文件。 注意直接删除文件可能导致后续log无法写入

这个方法比较累人,所以推荐下面的方法

2.对日志设置自动回滚写入以及清除

通过logrotate服务实现日志定期清理和回卷

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

但如果按照之前的部署方式,需要手动在每个节点上都安装和配置对应logrotate工具。如果通过Kubernetes容器服务编排的能力,将logrotate通过Kubernetes中服务的方式部署到各个节点上,这样既可以实现只需要一次部署,部署到所有节点。并且通过容器的方式保证了logrotate配置的一致性。

方案的具体实现是在Kubernetes集群中,创建DaemonSet资源实现。DaemonSet资源会在每个Node节点上都部署一个logrotate的容器实例,并且在容器实例中设置映射主机的log日志目录,从而实现日志的定时清理和回卷。

将以下内容写入logrotate_ds.yaml文件中

apiVersion: extensions/v1beta1

kind: DaemonSet

metadata:

name: logrotate

spec:

template:

metadata:

labels:

app: logging

id: logrotate

name: logrotate

spec:

containers:

- name: logrotate-es

image: blacklabelops/logrotate

securityContext:

privileged: true

volumeMounts:

- name: containers

mountPath: /var/lib/docker/containers

- name: varlog

mountPath: /var/log/docker

- name: logs

mountPath: /logs

env:

- name: LOGS_DIRECTORIES

value: "/var/lib/docker/containers /var/log/docker"

- name: LOGROTATE_INTERVAL

value: "hourly"

- name: LOGROTATE_OLDDIR

value: "/logs"

volumes:

- hostPath:

path: /var/lib/docker/containers

name: containers

- hostPath:

path: /var/log/docker

name: varlog

- hostPath:

path: /var/log/containers/

name: logs

 

创建完这个文件后,可以直接在Kubernetes中进行部署。

运行这个命令
kubectl create -f logrotate_ds.yaml

后显示

daemonset "logrotate" created

则成功

在示例的yaml文件中,logrotate服务将按照定时(1小时)的对日志进行回卷,回卷超过5个副本后则会对日志进行清理。如果有需要,可以修改相应的参数,设置不同的回卷规则和清理规则。详细的参数说明可以参考:https://github.com/blacklabelops/logrotate 

 

3最后一种,不建议对stdout大量写入日志

 

 

 

CentOS6.x 安装 Docker

Docker 官方要求要 CentOS7.0 及以上系统版本,但是有时候不能为了安装Docker就把稳定运行的服务器升级系统版本,还是需要在已有的 CentOS6.x 的系统上进行安装。

比如之前Memcached爆出的UDP11211的bug时,直接在原系统中升级Memcached版,很麻烦,需要各种编译,安装Docker是很快速方便的解决方案,但是看到CentOS6.x,瞎了。。同时安装Docker以后升级Memcached版本也是方便加愉快的事情,^_^

SO,研究了下怎么在CentOS6.x下安装Docker

参考https://www.liquidweb.com/kb/how-to-install-docker-on-centos-6/

1.安装EPEL仓库

rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

2.更新

yum update -y

3.安装

yum -y install docker-io

4.安装完后启动

service docker start

5.设置开机启动

chkconfig docker on

6.使用docker

docker pull xxxx

 

以上你就可以在CentOS6.x中使用Docker了

 

 

创建Docker镜像并提交至DockerHub

创建Docker镜像(Commit方式实现打包)

Commit方式打包镜像是一种方式,还可使用Dockerfile 自动编译生成

使用命令 docker ps查看当前运行的Docker容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b02555261b2a ccr.ccs.tencentyun.com/nginx:2 "docker-php-entrypoin" 6 minutes ago Up 6 minutes k8s_nginx.74ee725_nginx-1995117297-oawi1_default_7dbcfe76-61f3-11e7-b1ab-5254009c3093_59ad5c81

使用docker commit b02555261b2a lifeng198931/nginx-php:1.0 创建镜像   b02555261b2a 为CONTAINER ID

创建成功返回
sha256:6a3e4eb482d4ecf8bdd7fdcd015e06c81c7795f97ba8ed040bba63e42115fb2e

使用docker images查看打包好的镜像
REPOSITORY                   TAG IMAGE ID CREATED SIZE
lifeng198931/nginx-php 1.0 6a3e4eb482d4 5 seconds ago 552.8 MB

提交镜像

提交镜像至DockerHub需要有Docker-Hub账号,注册地址:https://hub.docker.com/

执行登录命令:docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: lifeng198931
Password:
Login Succeeded

输入命令docker tag 6a3e4eb482d4 lifeng198931/nginx-php:1.0    (PS:6a3e4eb482d4 为IMAGE ID)

最后执行PUSH操作docker push lifeng198931/nginx-php:1.0

稍等即Push成功

The push refers to a repository [docker.io/lifeng198931/nginx-php]
268b8c9b1604: Pushed
17486fcba291: Pushed
8ff73332a9c1: Pushing [===========================> ] 155.3 MB/280 MB
aa204764cc4c: Pushed
57f2e59a32ca: Pushed
e62d186aa9be: Pushed
284ace007aa5: Pushed
c218504836c2: Pushed
8a4b1177628d: Pushed
e5997bcc7786: Pushed
a976f44b8bbe: Pushed
4e3fe34ea5e3: Pushed
361b51002dab: Pushed
4195f36f22b0: Pushed
9c9c7359c814: Pushed
3378f970b72b: Pushed
6fc3d03cebe5: Pushed
d8d476202fd7: Pushed
26512ae4e602: Pushed
860dad618727: Pushing [=============================================> ] 140.8 MB/155.7 MB
ba7c41d37d48: Pushed
ce85b98da8c7: Pushed
8b67277fe14c: Pushed
777815bf4018: Pushed
772310149819: Pushed
f523e6e77276: Pushed
5fac08f9b8ad: Pushed
3c9c7a962414: Pushed
9b0b7ab4f5b2: Pushed
2acb0f8e8be6: Pushed
5accac14015f: Pushed

1.0: digest: sha256:5043476a7e803221c6a303bcfe989488b558365f618789c14ec8109d833b19d2 size: 6780

最后显示这个即PUSH成功

最后上https://hub.docker.com/r/lifeng198931/nginx-php/tags/查看