运维的活儿变了吗
早些年做应用运维,最怕两件事:一是新环境部署,二是版本升级。生产环境跟测试环境差一点,配置对不上,依赖缺一漏二,一套流程走下来,大半天就耗进去了。上线窗口定在深夜,运维人员抱着笔记本蹲在机房里改配置、重启服务,这种画面在很多老牌企业里并不陌生。
容器化部署出现之后,运维的工作方式确实变了。镜像把应用连同运行环境一起打包,开发环境什么样,生产环境就什么样。以前那些“在我机器上是好的”之类的扯皮话,至少从技术层面被堵住了大半。运维不再需要逐台服务器手工调整环境,只需要把镜像拉下来、跑起来,剩下的交给编排系统去调度。
但要说容器化让运维变轻松了,倒也不尽然。工具变了,问题也跟着变了。
效率提升体现在哪儿
容器化对运维效率的改善,最直观的是部署速度。镜像构建完成之后,推到私有仓库,再到生产环境拉取、启动,整个过程以分钟计。相比传统模式下拷贝安装包、装依赖、改配置的流程,快得不只是一点半点。遇到紧急故障需要快速扩容,容器秒级启动的优势更加明显,原来加一台机器可能要折腾半天,现在只需调整副本数量。
回滚也简单了。传统部署的回滚往往意味着重新走一遍部署流程,甚至要从备份里恢复旧版本的文件和配置,步骤繁琐且容易出错。容器化之后,回滚就是切换镜像标签的事,旧版本的镜像还留在仓库里,随时可以拉回来。
资源利用率是另一个容易被感知的变化。一台物理服务器上跑多个容器,比跑多个虚拟机要节省不少开销。对于服务器数量多、但单台负载不高的企业来说,这个优势会直接反映在硬件采购成本和机房电费上。
还有一点常被忽略——环境一致性带来的沟通成本下降。开发和运维之间因为环境差异产生的扯皮少了,两个团队的关系也能缓和不少。
新问题跟着来了
容器化不是银弹。很多团队把应用塞进容器之后才发现,运维的活儿并没有消失,只是换了形态。
镜像管理就是一个新负担。版本多了之后,仓库里的镜像越积越多,哪些该留、哪些该清,如果没有明确的策略,仓库很快就会变成垃圾场。镜像本身的安全扫描、基础镜像的更新维护,这些工作都得有人做。
编排系统的运维本身就是一门学问。集群节点的状态监控、网络插件的配置、存储卷的管理,每一样都需要专门的知识储备。小团队如果没有这方面的积累,光是把集群搭稳就得花不少力气。
还有一个容易被低估的问题:容器内的应用日志和监控。容器是临时性的,说没就没,日志如果只写在容器内部,容器一销毁,日志也跟着没了。这迫使运维团队必须尽早建立集中式的日志收集和监控体系。很多容器化项目在初期推进顺利,到了排障阶段才发现,日志散落在各个节点上,查一个问题要翻好几个地方,反而比传统部署更费劲。
落地节奏比技术选型更重要
容器化部署对运维效率的提升是实打实的,但前提是团队得跟得上。见过一些企业,容器平台搭得很漂亮,Kubernetes集群也建起来了,但一线运维人员对这套东西并不熟悉,出了问题还是习惯性地登录进容器里手工操作,等于把传统运维的习惯原封不动搬了进来,效率自然提不上去。
比较务实的做法是分步走。先把那些无状态、更新频繁的应用容器化,跑顺了再逐步扩大范围。数据库这类有状态的服务,不必急于容器化,强扭的瓜不甜,硬塞进容器反而增加运维复杂度。与此同时,配套的镜像仓库规范、日志收集方案、监控告警体系,最好在容器化推广的早期就同步搭起来,等规模大了再补,代价要高得多。
容器化改变的是运维的工作方式,而不是运维存在的意义。工具越来越自动化,需要人做判断的地方反而更关键了。