kubelet 报错如下:docker does not support reopening container log files

一、背景

kubelet 报错如下:docker does not support reopening container log files

k8s v1.28.2

centos7

bash 复制代码
Aug 27 12:52:11 jwdy02 kubelet[72445]: E0827 12:52:11.209556   72445 
container_log_manager.go:268] "Failed to rotate log for container" err="failed to rotate log 
\"/var/log/pods/kuboard_prometheus-adapter-7c86d7c8dc-vj97g_1db0604d-e46f-4ba2-9b42-ba1d76394b2a/prometheus-adapter/7.log\": failed to reopen container log 
\"7e1f76f473b796bf2f3ff8c799fadf07cb2ce9945aed683b85cfdf56f00d760b\": rpc error: code = Unknown desc = docker does not support reopening container log files" 
path="/var/log/pods/kuboard_prometheus-adapter-7c86d7c8dc-vj97g_1db0604d-e46f-4ba2-9b42-ba1d76394b2a/prometheus-adapter/7.log" 
containerID="7e1f76f473b796bf2f3ff8c799fadf07cb2ce9945aed683b85cfdf56f00d760b"

二、报错解析

bash 复制代码
failed to reopen container log files
container_log_manager.go:268 Failed to rotate log for container

K8s v1.28 + docker(我这边用的不是containerd),kubelet 日志轮转逻辑对docker runtime不支持reopen日志文件。

  • 现象:journalctl -u kubelet -f 持续刷这个Error;Pod本身可以正常运行;只是容器日志无法被kubelet做内部轮转 ,/var/log/pods/下日志文件不会切割,日志会持续膨胀。
  • 可能原因:
    1. docker runtime接口不支持ReopenContainerLog这个rpc调用;
    2. k8s>=1.24 默认开启kubelet内置日志轮转 containerLogMaxSize / containerLogMaxFiles,该功能仅完整支持containerd,docker runtime无法实现reopen,于是抛出这个错误。

注意:这不是容器业务报错,是kubelet日志管理模块和docker的兼容性bug。CentOS7 + docker + k8s1.24出现。

三、解决方案

(临时规避,不改runtime,生产常用)

关闭 kubelet 内置容器日志轮转,交给docker驱动本身做日志轮转。

  1. 修改kubelet配置 /var/lib/kubelet/config.yaml
yaml 复制代码
# 关闭kubelet的容器日志轮转
containerLogMaxSize: "0Mi" //单个容器日志文件的最大大小
containerLogMaxFiles: 2 //最多保留 2 个日志文件

查看修改结果:

yaml 复制代码
# 校验添加结果
[root@jwdy02 ~]# grep containerLogMax /var/lib/kubelet/config.yaml
containerLogMaxSize: "0Mi"
containerLogMaxFiles: 2
  1. 重启kubelet
bash 复制代码
systemctl daemon-reload
systemctl restart kubelet

设置为0代表禁用kubelet侧日志轮转,不再调用reopen接口,该Error就不会再打印。

日志切割交由docker daemon的log‑driver配置接管。

  1. 配置docker日志轮转(必须配置,否则容器日志无限增长)
    编辑 /etc/docker/daemon.json,增加log‑opts配置:
json 复制代码
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}

重启docker生效:

bash 复制代码
systemctl daemon-reload
systemctl restart docker

⚠️ 注意:已经运行的Pod不会自动继承docker新日志配置,需要重建Pod才生效。

四、验证

修改完,观察kubelet日志:

bash 复制代码
journalctl -u kubelet -f

不再出现 docker does not support reopening container log files 这条错误。

五、额外说明

  • 该报错不会直接让Pod崩溃,业务可以跑,但如果不做日志限制,会耗尽磁盘,一定要配置docker json‑file轮转。
  • 不要忽略,生产环境会导致节点磁盘被容器日志打满。

END

相关推荐
罗小爬EX4 小时前
Helm 从概念到实战:以一个普通 Web 应用为例
云原生·helm
java_logo5 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
xbzb6 小时前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
打工仔折腾 AI10 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
分布式存储与RustFS13 小时前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
xbzb14 小时前
自建镜像仓库:registry 一条命令 + harbor 部署、授权、跨库同步与卸载
docker·harbor·镜像·仓库·同步·registry
分布式存储与RustFS15 小时前
工作流脚本和依赖 JAR 散在各节点本地盘:用 DolphinScheduler 资源中心接到 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Eyfcom15 小时前
〖物流云原生实战 01〗K8s Operator 在物流定时任务中的实践:从“裸 CronJob”到“声明式任务编排”
云原生·物流管理系统·物流云原生实战
阿里云云原生1 天前
阿里云智能体白皮书开源进展
云原生
阿里云云原生1 天前
万联智策基于 AgentCore 构建数字员工团队,800+智能体规模化落地
云原生