超过一百个 Docker 容器:我们的月度健康检查例程
容器蔓延是如何发生的
生产中一百个以上的容器不是一夜之间积累的。每个新服务都添加了 2-5 个容器,几年下来,数量就累积到了这个级别。挑战不是运行很多容器——Docker 在这方面很擅长——而是随着时间推移保持对所有容器的可见性。
月度检查清单
月度运行状况检查涵盖四个方面:
资源使用趋势:哪些容器的内存或 CPU 使用量逐月增长?渐进式泄漏在周级别上不明显,但在月级别的对比中会变得明显。
图像更新状态:哪些容器运行的是已经有安全补丁可用的旧镜像?这需要检查每个基础镜像的当前版本,而不仅仅是运行 docker pull。
卷使用情况:哪些卷在增长,增长速度是多少?日志卷的无限增长是生产中最常见的磁盘耗尽原因之一。
孤立资源:哪些容器、卷或网络已经与其预期的 compose 栈脱离?容器停止但卷没有清理的情况比预期的更常见。
自动化 vs 手动检查
有些检查可以完全自动化(资源使用告警、镜像更新通知)。有些检查需要判断(一个容器的内存增长是否超出正常范围取决于上下文)。
月度检查将两者结合:自动化收集数据,人工检查异常情况。纯自动化方法往往会错过需要上下文理解才能识别为异常的渐进性漂移。
当发现问题时
月度检查会发现问题,但解决策略因问题类型而异。内存泄漏需要应用层调查。镜像更新需要测试窗口。孤立卷需要在删除之前进行谨慎的审计。