Docker: Logging Driver Research

 20th August 2020 at 2:19pm

在 TSF 公有云上做了次实验,使用的是 TKE 初始化的计算节点。

修改配置

改动前:

[root@VM_0_8_centos ~]# ps aux | grep dockerd
root      2153  2.0  0.7 587840 62104 ?        Ssl  Mar11 450:45 /usr/bin/dockerd --log-driver=json-file --ip-masq=false --log-level=warn --storage-opt=overlay2.override_kernel_check=true --registry-mirror=https://mirror.ccs.tencentyun.com --log-opt=max-file=10 --log-opt=max-size=100m --live-restore=true --iptables=false --bip=169.254.32.1/28 --storage-driver=overlay2

[root@VM_0_8_centos ~]# cat /etc/docker/dockerd 
IP_MASQ="--ip-masq=false"
LOG_LEVEL="--log-level=warn"
STORAGE_OPT="--storage-opt=overlay2.override_kernel_check=true"
LOG_DRIVER="--log-driver=json-file"
LOG_OPT="--log-opt=max-file=10 --log-opt=max-size=100m "
LIVE_RESTORE="--live-restore=true"
IPTABLES="--iptables=false"
BIP="--bip=169.254.32.1/28"
STORAGE_DRIVER="--storage-driver=overlay2"
REGISTRY_MIRROR="--registry-mirror=https://mirror.ccs.tencentyun.com"

该机器上无 /etc/docker/daemon.json 文件存在;~/.docker/config.json 中仅有 Auth 信息,无影响 logging 的配置。

改动 /etc/docker/dockerd,将 LOG_DRIVER 配置为 journald

[root@VM_0_8_centos ~]# cat /etc/docker/dockerd 
IP_MASQ="--ip-masq=false"
LOG_LEVEL="--log-level=warn"
STORAGE_OPT="--storage-opt=overlay2.override_kernel_check=true"
# LOG_DRIVER="--log-driver=json-file"
LOG_DRIVER="--log-driver=journald"
# LOG_OPT="--log-opt=max-file=10 --log-opt=max-size=100m "
LIVE_RESTORE="--live-restore=true"
IPTABLES="--iptables=false"
BIP="--bip=169.254.32.1/28"
STORAGE_DRIVER="--storage-driver=overlay2"
REGISTRY_MIRROR="--registry-mirror=https://mirror.ccs.tencentyun.com"

重启 Docker Daemon:systemctl restart dockerd,可以观察到启动的 dockerd 已经使用 journald 作为 log driver:

root     12450  6.2  0.5 684452 42704 ?        Ssl  10:58   0:00 /usr/bin/dockerd --log-driver=journald --ip-masq=false --log-level=warn --storage-opt=overlay2.override_kernel_check=true --registry-mirror=https://mirror.ccs.tencentyun.com --live-restore=true --iptables=false --bip=169.254.32.1/28 --storage-driver=overlay2

观察容器信息

docker inspect 一个在改动前运行的容器:

docker inspect 303eff6f0c83
# 观察到 LogConfig 仍然是之前的 json-file:
"LogConfig": {
    "Type": "json-file",
    "Config": {
        "max-file": "10",
        "max-size": "100m"
    }
}

在 K8S 上重新部署这个容器后:

docker inspect 36b4fc3bd0e9
# 观察到 LogConfig 变成 journald 了。。
"LogConfig": {
    "Type": "journald",
    "Config": {}
}

此时 /var/log/pods 下不再有此 pod 的日志;kubectl logs 也会报失败。