我现在正在尝试使用Kubernetes和Docker在10台物理机上配置WordPress,Spark和Storm等服务
但是在多次启动和终止Docker容器之后,即使我通过Kubernetes删除或Docker kill命令杀死所有容器,使用的内存也会增加。
我注意到有很多容器状态已退出,在我删除所有已退出的容器后,它释放了大量的回忆。
我想出了一个解决方案,它正在将每个Docker主机上的已删除容器计划写入cron表。
但这是否合适?如果没有,我怎么能释放回忆?
答案 0 :(得分:4)
不建议使用外部容器垃圾收集脚本。 Kubernetes依靠已退出的容器作为墓碑重建pod状态和/或提供日志。即使您不关心容器日志,如果在kubernetes检查它们并正确记录状态之前删除已退出的容器,可能会导致状态不准确并重新启动决策。这种依赖可能会被消除in the future。
目前,实现更积极的容器垃圾收集的最佳方法是调整参数,详见guide。
仅供参考,还有一些未解决的问题可以改善垃圾收集行为。 #13287就是一个例子。
如果确实想要自己清理容器,则可以安全地删除与已删除容器关联的容器。删除属于同一个pod /容器的多个已退出容器,同时保留最近几个已退出的容器,风险也相对较低。
答案 1 :(得分:1)
如果没有要保存的中间状态(docker commit),这是合适的。
另一个类似的解决方案是使用--rm
选项运行泊坞窗:如果它退出,容器将自动删除。
但是,如果您必须在容器无法启动时调试错误,则需要在该特定情况下使用运行而不使用 --rm
。