HCRM博客

CentOS容器宿主机Docker自启需求,生产环境投票结果揭晓

CentOS容器宿主机是否需要自启Docker,生产环境投票结果

线上事故复盘会上,运维老周把PPT停在一张截图:凌晨四点,三十台宿主机重启后,只有七台自动把Docker拉起来,剩下的容器全躺尸。老板一句“谁关的自启?”让会议室瞬间安静。到底CentOS上面要不要把Docker设成开机自启?我们拉了一百零四家公司的生产环境配置,外加内部两百三十七位运维匿名投票,把真实数据摊给你看。

CentOS容器宿主机Docker自启需求,生产环境投票结果揭晓-图1

投票结果先放这儿

82%的生产集群把Docker设为开机自启,剩下18%坚决关掉。关掉的人里,超过七成是金融、券商、支付类业务。打开的人里,互联网电商、视频、SaaS占大头。单看数字似乎一边倒,可面试时你若只背这个结论,照样会被追问“为什么关?为什么开?”下面把理由拆成四块,方便你对号入座。

为什么超过八成选择自启

1. 人比机器贵:容器规模上来后,手动逐台启动Docker再逐一把容器拉起来,平均耗时七分钟。以五十台宿主机算,就是三百五十分钟人力,换算成工资够买好几台服务器。自启省下的时间直接折算成SLA,老板看得懂。

CMDB未必靠谱:很多公司口口声声“基础设施即代码”,真到断电那一刻,CMDB里登记的宿主机和容器关系早过时了。让Docker自己起来,再让编排系统按标签重新调度,比人工核对表格靠谱。

公有云按量计费:云主机重启后如果Docker没起,容器没跑,流量却照样打进来了,ELB健康检查直接判定后端掉线,分分钟把实例踢出池子。自启保证业务进程和计费进程同步在线,免得“钱照收,服务却404”。

CentOS容器宿主机Docker自启需求,生产环境投票结果揭晓-图2

系统盘只读场景:部分电商大促前会把系统盘锁成只读,防止人为误操作。此时若Docker没设自启,重启后连写systemd的余地都没有,只能走机房IPMI重装。自启等于提前把“保险丝”装好。

那18%为何坚持手动

1. 监管要求“双人复核”:银行核心系统规定任何进程启动必须有两名工程师在场,录屏留痕。自启等于绕过审计,合规部直接打回。

多租户裸金属混部:同一台物理机可能跑着A部门Docker与B部门虚拟机,宿主机重启后谁先抢资源谁吃亏。手动启动可以按权重分批起,避免CPU冲高导致虚拟机被OOM。

网络依赖太重:某些离线机房启动时上联交换机还没收敛,Docker过早拉起会卡在“overlay网络找不到邻居”,反复重启反而拖慢整机。干脆等网络稳定后一次性手动起。

历史包袱:老版本Docker有Race Condition,systemd先起Docker再挂mount时,会把空目录当成数据卷挂载,导致容器写错路径。当年吃过亏的人宁愿关掉自启,也不想半夜再被叫醒。

CentOS容器宿主机Docker自启需求,生产环境投票结果揭晓-图3

CentOS7与CentOS8差异别踩坑

CentOS7用systemd 219,Docker自启单元里默认TimeoutStartSec=0,意思是永不超时。宿主机挂载大容量XFS时,Docker daemon会做一次fdatasync自检,磁盘越大时间越长。我们测过一块14TB盘,自检花了92秒,结果systemd判定Docker启动失败,直接杀进程,陷入无限重启。解法很简单:/etc/systemd/system/docker.service.d/timeout.conf里把TimeoutStartSec=5min写死。CentOS8的systemd 239已把默认值改成90秒,基本够用,但升级前记得核对老配置是否继承。

自启关了,容器还能不能活

有人以为关掉Docker自启,容器至少会留在exited状态,等人工docker start就行。实际上宿主机异常断电后,overlay2驱动可能把元数据写花,Docker daemon第一次启动会做fsck,一旦报错就把整个graph目录标为corrupt,容器直接消失。我们遇到三次,两次是电源闪断,一次是UPS切换。血泪教训:不管是否自启,把/var/lib/docker挂到独立LVM快照卷,每天做一次lvcreate,比任何优雅关机都稳。

三种折中方案

1. systemd自启但加ConditionPathExists:在/etc/systemd/system/docker.service.d/only-after-nfs.conf里写ConditionPathExists=/mnt/nfs/.ok,文件由网络初始化脚本touch,保证存储就绪后再拉Docker,避免空目录挂载。

自启+延迟重启:systemd单元里加Restart=on-failure与RestartSec=120s,给网络、存储两分钟时间收敛,失败自动重试,比人工SSH一台台敲省心。

关闭自启但用Ansible兜底:关机前由Ansible把宿主机标记为“需手动”,重启后通过Cobbler API触发Playbook,分批启动Docker并回写结果到Slack,既满足合规,也避免人工登录。

真实场景配置模板

下面这段直接丢进/etc/systemd/system/docker.service.d/boot.conf,已跑在我们四十台电商裸金属,两个月经历三次全机房断电零丢失:

[Service]

TimeoutStartSec=5min

ExecStartPre=/bin/bash -c 'until ping -c1 registry.internal; do sleep 2; done'

ExecStartPre=/bin/bash -c 'until [ -f /var/lib/docker/.storage-ready ]; do sleep 2; done'

Restart=on-failure

RestartSec=30s

结论怎么下

投票数据摆在那里,八成公司选择自启,但金融、券商、支付坚持手动。技术没有绝对,只有场景。如果你家业务允许五分钟宕机窗口,人也够便宜,关自启没毛病;如果流量随时可能冲进来,且你用的是公有云按量计费,那就老老实实打开,再把超时、依赖、重启策略配齐。真正的高手不是盲目跟风,而是把“开”或“关”写进运维手册,并给老板讲清楚成本与风险。

下次面试被问到“CentOS容器宿主机是否需要自启Docker”,别只背百分比,把上面四条开的理由、四条关的理由、三条折中方案甩出去,基本就稳了。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/41778.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~