1.日志架构简介
容器化应用的日志记录常用方式就是写入标准输出和标准错误流。集群日志级日志的存储和生命周期与节点、Pod
或容器的生命周期是相互独立的,而节点级日志与 Pod
的生命周期一致,默认情况下如果容器重启,kubelet
会保留被终止的容器日志。 如果 Pod
在工作节点被驱逐,该 Pod 中所有的容器及其日志都会被驱逐。
2.节点级日志
2.1 架构及相关配置
image.png容器化的应用写入标准输出流 stdout
和标准错误流 stderr
的任何数据,都会被容器引擎捕获并被重定向到某个位置。
问题:如何理解标准输出流
stdout
和标准错误流stderr
的日志?
答:stdout
和stderr
默认是输出到屏幕,其中文件描述符 0 表示stdin
、1 表示stdout
、2 表示stderr
,两者支持重定向。
ls logA.txt 1 > logB.txt
:首先清空文件 logB.txt,执行命令 ls logA.txt 的正常打印信息,写入 logB.txt;ls logC.txt 2 >> logD.txt
:执行命令 ls logC.txt 的错误打印信息追加到 logD.txt
下面是以 Docker 容器引擎为例,将stdout
和 stderr
输出流重定向到某个日志驱动(Logging Driver) ,其中 Docker 配置文件 /etc/docker/daemon.json
的内容如下所示 。
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"labels": "production_status",
"env": "os,customer"
}
}
默认情况下,Docker 使用的日志驱动是 json-file。JSON 格式用其来源 stdout
或 stderr
及其时间戳来注释每一行。每个日志文件只包含一个容器的信息。
{"log":"Log line is here\n","stream":"stdout","time":"2019-01-01T11:11:11.111111111Z"}
kubelet
组件是负责管理日志目录和日志轮换。kubelet
管理 CRI 容器运行时,例如 Docker、containerd 和 CRI-O。后者将容器日志写入到指定的位置。kubelet 配置文件中的参数 containerLogMaxSize 和 containerLogMaxFiles 可以用来配置每个日志文件的最大长度和每个容器可以生成的日志文件个数上限。kubelet
组件有 2 种配置方式,配置文件 kubelet-configuration.yaml
和 kubelet 指令
#查看 kubelet 参数详情
$ps -ef |grep kubelet
root 97784 1 5 Feb24 ? 14:26:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 --network-plugin=cni --pod-infra-container-image=192.168.0.60:5000/pause:3.2
#设置 kubelet 参数
#方式 1:kubelet 配置文件 kubelet-configuration.yaml
$kubelet --config=/.../kubelet-configuration.yaml
#方式 2:kubelet 指令
$kubelet --containerLogMaxSize=5Mi --containerLogMaxFiles=5
# 重新启动 kubelet 以使更改生效
$systemctl daemon-reload
$systemctl restart kubelet
kubelet-configuration.yaml
的内容:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: "0.0.0.0",
port: 10250,
serializeImagePulls: false,
evictionHard:
memory.available: "200Mi"
containerLogMaxSize: "5Mi"
containerLogMaxFiles: 5
2.2 获取应用日志
$kubectl get pod |grep flink
deployment-flink-jobmanager-9d68c8cd5-8xxj1 1/1 Running 0 6d22h
deployment-flink-taskmanager-94df9488f-s5j93 1/1 Running 0 6d22h
deployment-flink-taskmanager-94df9488f-xk8rd 1/1 Running 0 6d22h
$kubectl logs deployment-flink-jobmanager-9d68c8cd5-8xxj1
chown: changing ownership of '/opt/test/flink/conf/flink-conf.yaml': Read-only file system
chown: changing ownership of '/opt/test/flink/conf/log4j.properties': Read-only file system
...
网友评论