本文永久链接: https://www.xtplayer.cn/rke2/how-to-set-container-log-rotation-with-rke2/

在基于 docker runtime 的 k8s 集群中,可以通过在 /etc/docker/daemon.json 配置文件中添加如下配置实现容器标准输出日志大小的限制。

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

而在 rke2-k8s 环境中,已使用 containerd runtime 替换了 docker runtime,容器的日志已由 kubelet 负责管理。此功能自 k8s 1.10 开始支持,参考 PR https://github.com/kubernetes/kubernetes/pull/59898

在 rke2-k8s 环境中,默认已经启用了容器日志限制和轮换。在 https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/ 文档中,搜索 container-log-max-filescontainer-log-max-size 可以查看到默认值。

如果需要自定义单个日志文件 limit 大小以及日志文件数量,可以在 rke2 配置文件中通过添加 kubelet-arg 参数去覆盖默认的 kubelet 参数。

  • 手动安装的 rke2 集群

​ 在 RKE2 配置文件 /etc/rancher/rke2/config.yaml 中添加两个 kubelet 选项,然后执行 systemctl restart rke2-server 或者 rke2-agent。

kubelet-arg:                               
- "container-log-max-files=10"
- "container-log-max-size=20Mi"
  • rancher ui 安装的自定义 rke2 集群

    编辑自定义 rke2 集群,在高级选项中添加 container-log-max-files=10 和 container-log-max-size=20Mi。

    也可以通过标签选择的方式,为特定节点设置不同的参数值。比如如下配置,具有标签 node=a 的节点将使用一种参数配置,而其他所有节点将使用另一种参数配置。

参考文档:

https://support.scc.suse.com/s/kb/How-to-set-container-log-rotation-with-RKE2?language=en_US

https://support.scc.suse.com/s/kb/360051441431?language=en_US

https://kubernetes.io/docs/concepts/cluster-administration/logging/