【问题标题】:Docker cleaning up Kubernetes Pod logs too quicklyDocker 清理 Kubernetes Pod 日志过快
【发布时间】:2020-01-27 10:46:06
【问题描述】:

我正在运行多个CronJobs 来自动执行我的家庭服务器上的任务。当 Job 运行且其 Pod 完成时,我可以使用 kubectl logs <podName> 查看日志,但是在一定时间后(少于 5 分钟但超过 30 秒)Pod 仍然存在于 Kubernetes 中,但我得到:

unable to retrieve container logs for docker://<containerID>

我自己没有启用任何日志轮换,所以我假设 Docker 会在容器完成后清理日志。如何配置 Docker 以保留这些容器日志,以便在作业完成后较长时间(例如 1 天)后查看作业日志。

  • 集群供应商:kubeadm 1.17.0
  • Kubernetes 版本:1.17.0
  • Docker 版本:18.06.3-ce
  • uname -r: 4.19.86-coreos

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    您可以尝试在 Kubelet 中设置 minimum-container-ttl-duration 标志。这是完成的容器在被垃圾收集之前的最小年龄。

    您还可以在作业规范中指定 TTL

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi-with-ttl
    spec:
      ttlSecondsAfterFinished: 100
    

    作业 pi-with-ttl 将有资格在完成 100 秒后自动删除。

    【讨论】:

    • 不幸的是,minimum-container-ttl-duration 已被弃用,ttlSecondsAfterFinished 是 alpha 版(除非它消失,否则真的不想使用它,也希望该设置在集群范围内而不是选择加入)- minimum-container-ttl-duration 的推荐替换是使用 eviction-hard 但这将使磁盘使用率默认达到 85%,我想尽可能多地清理,但将死的 pod 单独放置一天(使用 @987654327 可能@正如你提到的),但现在不知道该怎么做
    【解决方案2】:

    使用 docker prune 进行简单的 CronJob

    docker system prune -f -a --filter "until=168h"
    docker volume prune -f
    

    【讨论】:

    • 您能否更详细地解释一下它与您最初的问题有何关系?它解决了你的问题吗?
    猜你喜欢
    • 2018-07-27
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2018-07-29
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多