内存问题,如何管理 Exited Docker 容器?
A memory issue, how to manage the Exited Docker Containers?
我现在正在尝试使用 Kubernetes 和 Docker 在 10 台物理机器上配置 WordPress、Spark 和 Storm 等服务
但是在多次启动和终止 Docker 容器后,即使我通过 Kubernetes 删除或 Docker kill 命令杀死所有容器,使用的内存也会增加。
我注意到有很多状态为 Exited 的 Container,在我删除所有 Exited Container 后,它释放了很多内存。
我想出了一个解决方案,即在每个 Docker 主机上将删除退出的容器计划写入 cron table。
但这合适吗?如果没有,我该如何释放记忆?
如果您没有要保存的中间状态(docker 提交),这是合适的。
另一个类似的解决方案是 docker 运行 加上 --rm
选项:如果它退出,容器将被自动删除。
但是如果你必须在容器启动失败时调试错误,你需要 docker 运行 without --rm
在这种特殊情况下。
不建议使用外部容器垃圾回收脚本。 Kubernetes 依赖退出的容器作为墓碑来重建 pod 状态 and/or 服务日志。即使您不关心容器日志,如果您在 kubernetes 检查它们并正确记录状态之前删除退出的容器,也可能导致不准确的状态和重启决策。这种依赖可能会被消除 in the future.
目前,实现更积极的容器垃圾收集的最佳方法是通过调整参数,详见 guide。
仅供参考,还有改进垃圾收集行为的未解决问题。 #13287 是一个例子。
如果您真的 想自己清理容器,删除与已删除 pods 关联的容器是安全的。删除属于同一 pod/container 的多个已退出容器,同时保留最近几个已退出容器的风险也相对较低。
我现在正在尝试使用 Kubernetes 和 Docker 在 10 台物理机器上配置 WordPress、Spark 和 Storm 等服务
但是在多次启动和终止 Docker 容器后,即使我通过 Kubernetes 删除或 Docker kill 命令杀死所有容器,使用的内存也会增加。
我注意到有很多状态为 Exited 的 Container,在我删除所有 Exited Container 后,它释放了很多内存。
我想出了一个解决方案,即在每个 Docker 主机上将删除退出的容器计划写入 cron table。
但这合适吗?如果没有,我该如何释放记忆?
如果您没有要保存的中间状态(docker 提交),这是合适的。
另一个类似的解决方案是 docker 运行 加上 --rm
选项:如果它退出,容器将被自动删除。
但是如果你必须在容器启动失败时调试错误,你需要 docker 运行 without --rm
在这种特殊情况下。
不建议使用外部容器垃圾回收脚本。 Kubernetes 依赖退出的容器作为墓碑来重建 pod 状态 and/or 服务日志。即使您不关心容器日志,如果您在 kubernetes 检查它们并正确记录状态之前删除退出的容器,也可能导致不准确的状态和重启决策。这种依赖可能会被消除 in the future.
目前,实现更积极的容器垃圾收集的最佳方法是通过调整参数,详见 guide。
仅供参考,还有改进垃圾收集行为的未解决问题。 #13287 是一个例子。
如果您真的 想自己清理容器,删除与已删除 pods 关联的容器是安全的。删除属于同一 pod/container 的多个已退出容器,同时保留最近几个已退出容器的风险也相对较低。