做了快十年运维,这些年被问得最多的一句话是:你们运维工程师到底怎么评估?尤其是最近圈子里的讨论话题——Kubernetes 怎么调用 containerd、生产环境怎么从零搭一套系统、运维工程师面试题怎么出、运维工程师到底需要学什么——全都指向同一个问题:我们缺的不是技能清单,而是一套能衡量真实能力的评估框架。今天我就拿这些年踩过坑、面过人和带团队的真实经历,把这件看似虚头巴脑的事,拆成可落地、可打分、可复盘的实操指南。
1. 运维工程师能力评估,先从这四个能力层级说起
1.1 基础层:工具熟练度不等于能扛事
评估运维工程师,最容易犯的错就是把“会用工具”当“能力强”。会敲kubectl get pods、会看top、会重启服务,这只能算基础层。这个层级的人能完成固定操作,但一旦系统表现不符合预期,立刻就抓瞎。比如节点 NotReady 了,他可能只知道 reboot,但说不清是 kubelet 挂了、磁盘满了、还是容器运行时通信断了。
基础层的评估重点不是“会不会用”,而是“知不知道自己在用什么”。我在面试时经常问一个看似简单的问题:kubectl get pods这条命令,从你敲下回车到你看到 Pod 列表,中间发生了什么?能回答出 apiserver、etcd、kubelet、kube-proxy 之间大概关系的,基本就不是纯背命令的。基础层的核心判断标准很简单:给他一台全新的服务器,他能不能在半天内装好系统、配好网络、部署一个单机服务,并且把关键日志和监控打通。
1.2 提高层:故障定位与恢复能力
到了提高层,评估的就不是操作了,而是排查链路。运维工程师最有价值的时刻,永远在故障现场。这里有一个黄金评判标准:故障发生时,他是靠猜、靠重启、靠百度,还是靠现象收集、日志分析、链路追踪一步步缩小范围。
我遇到过一位候选人,他说自己处理过很多线上故障,但深挖下去,全是“重启大法”。评估提高层,一定要让他讲一个真实故障案例,按这个顺序追问:你怎么发现问题的?你怎么确认影响范围的?你的第一反应是止损还是排查根因?止损之后你做了什么?最后根因是什么?怎么避免再次发生?问完之后基本能看出他是“做事的人”还是“背锅的人”。这个层级还要求掌握监控告警规则设计、日志平台使用、基础排查工具链(strace、tcpdump、perf 这类),不是每样都精,但遇到问题知道该拿出哪把刀。
1.3 项目层:架构设计与容量规划能力
项目层评估的是从 0 到 1 的构建能力,对应热搜里“如何在生产环境从零搭建一个系统并做好后续维护”。这个层级的工程师,应该能回答这些问题:这套系统未来三年的流量大概多大?需要多少台机器?网络怎么规划?存储用本地盘还是共享存储?数据库要不要做读写分离?缓存怎么设计?日志和监控用哪套方案?
评估项目层,要看他有没有“算账”的习惯。很多运维做架构设计,纯粹凭感觉:QPS 2000,那就来 10 台机器吧,问他为什么是 10,他说多了浪费少了不够。真正的项目层评估,要看他能不能把容量估算过程写出来:单机并发能力、请求平均耗时、峰值倍数、冗余策略,每一项都应该有计算依据。项目层还要求具备成本意识——不是堆机器堆配置,而是知道哪一层需要冗余、哪一层可以省。
1.4 战略层:业务理解与技术决策能力
最高一层是战略层。这个层级的运维工程师,已经不只是管服务器,而是参与业务架构决策。他知道公司的核心链路是什么,知道哪个服务挂了会少赚钱,知道技术选型要考虑团队维护能力和长期演进。
评估战略层的有效方式,是给一个开放性问题。比如:我们公司有个核心服务,目前放在云上裸机,单可用区部署,最近流量涨了三倍,你会怎么做架构调整?战略层的候选人会先问业务情况再给方案,比如流量峰值是什么时候、是否允许短暂不可用、预算限制是多少。而只停留在项目层的候选人,上来就说用 K8s、上多集群、搞服务网格,方案很好但他的决策里没有业务上下文。战略层评估的关注点,是候选人能不能在技术方案和业务目标之间做取舍,而不是追求所谓的“最佳实践”。
2. 硬技能试金石:Kubernetes 调用 containerd 的完整链路
2.1 从 kubelet 到 containerd,中间到底发生了什么
最近圈子里很多人都在聊 Kubernetes 和 containerd 的关系,这其实很适合作为运维硬技能评估的切入点。因为它链条长、环节多,每一环都能挖出不同深度的问题,而且答得好不好,直接反映一个运维对容器生态的理解程度。
完整链条是这样的:你用kubectl命令提交一个 Pod 请求,这个请求打到 apiserver,apiserver 做认证鉴权后把资源对象写入 etcd。kubelet 通过 watch 机制感知到自己节点上需要运行哪些 Pod,于是调用 CRI(Container Runtime Interface)客户端,通过 gRPC 接口,连接 containerd 暴露的 Unix Socket——默认路径是/run/containerd/containerd.sock。containerd 内置的 CRI Plugin 接收到创建 Pod 的请求后,先创建沙箱(Sandbox),也就是我们常说的 pause 容器,这个容器负责持有 Pod 级的网络命名空间和 PID 命名空间。接着 containerd 为每个业务容器启动一个 containerd-shim 进程,shim 再调用 runc 去和 Linux 内核打交道,最终通过 clone 等系统调用创建出容器进程。
整个链路里最值得深挖的是 containerd-shim 的作用。很多人以为 containerd 直接管理容器,其实 containerd 是个管理守护进程,它不会长期持有每个容器的生命周期。真正替容器活下去的,是 shim。shim 负责转发信号、收集容器退出状态、把标准输出转发给 containerd 做日志处理。如果没有 shim,runc 启动完容器后一旦退出,容器进程就成了孤儿,信号和日志的传递链路都会断裂。能把这个讲清楚的人,说明他真的理解容器进程模型,而不是只会照着文档敲命令。
2.2 面试和实操评估怎么考这条链路
考这条链路,我一般分几个层次。初级问题:Kubelet 和 containerd 之间通过什么协议通信?答案 CRI,gRPC,Socket 路径。中级问题:Pod 创建时,pause 容器和业务容器是什么关系?为什么需要 pause?答案里要包含网络命名空间、PID 命名空间共享。高级问题:如果 containerd 的containerd.sock文件不见了,节点上会产生什么现象?如何排查恢复?这个问题能同时考出对 kubelet 重启机制、containerd 重装流程、节点排空策略的理解。
实操评估则更直接。我会故意制造一个故障场景,比如在一台测试节点上停掉 containerd 服务,观察 kubelet 的反应,或者在生产环境模拟镜像拉取失败,让候选人顺着kubelet日志、containerd日志、crictl pull、ctr命令这条线去排查。重点看他会不会用crictl ps、crictl logs、crictl inspect这套 CRI 原生命令,而不是只会docker命令。现在很多新晋运维只知道docker ps,换了 containerd 环境之后,用crictl都生疏,这就是典型的工具依赖症,能力评估里要重点暴露。
2.3 评估结果怎么量化打分
一条调用链的知识点很多,我建议把它做成一张评分表,每个环节单独打分。环节包括:kubectl 与 apiserver 的交互、etcd 的作用、kubelet 的 watch 机制、CRI 接口与 Socket 细节、containerd 内置 CRI Plugin 的设计、Sandbox 与 pause 容器的作用、shim 进程的职责、runc 与内核交互原理、镜像拉取与存储驱动的过程。每个环节按 0 到 5 打分,0 表示完全不知道,5 表示能独立讲解并能排查对应问题。总分超过 35 分算合格,45 分以上算优秀。
这个评分表还有个好处:它能直接画出候选人的技术地图。有人在镜像层很强,但对 CRI 接口很弱;有人在 Pod 生命周期上很清楚,但对 runc 和内核交互一头雾水。打分之后,你可以一眼看出这个人的能力短板,后续培养和定级就有了依据,比笼统说一句“K8s 还不错”靠谱得多。
3. 生产环境从零搭建系统,怎么评估动手和规划能力
3.1 从空机房到上线,先看规划再看执行
“如何在生产环境从零搭建一个系统并做好后续维护”这个热搜词,点出了运维岗位最核心的实战场景。我评估这块能力时,从来不问“你会不会装 K8s”,而是给一个虚拟场景:给你 10 台物理服务器(或云主机)、一套微服务应用、一周时间,你要怎么把这套系统搭上线,并且保证后续半年可维护?
候选人一般会分成两类。第一类上手就装,装系统、装 Docker、装 K8s,干得热火朝天,但问到“这些服务要暴露哪些端口”“有没有考虑跨可用区冗余”“监控和日志方案是什么”就沉默了。第二类会先反问一堆问题:这是什么业务?预估流量多大?数据库量级多少?有没有第三方依赖?验收标准是什么?这类人通常才是真正从零搭过系统的人。为什么?因为从零搭建的难点不在执行命令,而在前期规划。你不了解业务,就没办法确定机器规格;不了解流量,就没办法设计网络和存储;不了解数据量,就没办法选数据库和备份方案。
所以评估的第一步,是看候选人能不能输出一份需求清单。至少要包含:业务类型与核心链路、预估 QPS 与数据规模、可用性目标(SLO)、网络分区与安全组规划、中间件选型与版本、日志与监控方案、备份与恢复策略。能在一小时内理出这份清单的人,后面才有继续聊的必要。
3.2 分阶段推进,每个阶段都有考察点
生产环境从零搭建,我会把它拆成六个阶段来评估。第一个阶段是基础环境初始化,考察操作系统选型、内核参数调优、磁盘分区方案、时间同步、软件源配置。这里有一个隐藏知识点:很多人装完系统直接干活,根本不关 swap,不调整文件描述符上限,不做系统安全加固,到后面跑高并发时才发现问题。这个阶段的评估标准,是候选人能不能解释每个初始化步骤的理由。
第二个阶段是容器运行时与集群部署。考察 K8s 集群的初始化方式(kubeadm、二进制、还是容器化)、证书管理、高可用方案、etcd 部署形态。我特别看重候选人是否理解 etcd 的高可用设计。很多人把三节点 etcd 往那一放就以为高可用了,完全没考虑硬件故障域、网络延迟、快照备份策略。第三个阶段是网络与存储方案。CNI 选型(Calico、Cilium 等)、Service 暴露方式、Ingress 控制器、持久化存储方案(本地存储、NFS、云盘、还是 CSI)。这里考的是权衡能力,没有绝对正确的答案,只有适不适合当前场景。
第四个阶段是安全与权限。RBAC 设计、Secret 管理、镜像扫描、Pod 安全策略、网络策略。很多候选人做到这步就卡住了,说明他之前搭的环境只是“能用”,不是“安全”。第五个阶段是可观测性建设。Prometheus + Grafana 监控、Loki 或 ELK 日志、链路追踪。这里要重点考察告警规则设计,比如 Pod 重启告警、节点磁盘告警、证书过期告警,阈值怎么定、避免告警风暴的策略是什么。第六个阶段是备份、容灾与持续运维。etcd 备份、数据库备份、应用配置备份、恢复演练、版本升级方案、故障应急预案。
3.3 分阶段评估打分表
为了让评估结果更客观,我通常用一张六阶段评分表,每阶段聚焦几个核心考察点。你可以直接把下表作为团队内部或者面试考核的模板。
| 阶段 | 核心考察点 | 合格标准 | 优秀标准 |
|---|---|---|---|
| 基础环境初始化 | 系统选型、内核参数、分区、安全加固 | 能独立完成并说明理由 | 能根据业务场景针对性调优 |
| 集群部署 | K8s 初始化、证书管理、etcd 高可用 | 能按文档完成部署 | 能讲清 etcd 故障域与备份策略 |
| 网络与存储 | CNI 选型、Ingress、持久化存储 | 能配置好默认方案 | 能对比多种方案并给出选型依据 |
| 安全与权限 | RBAC、Secret、镜像安全、网络策略 | 能配置基础 RBAC | 能设计最小权限模型并落地 |
| 可观测性 | 监控、日志、告警 | 监控能出数据 | 告警规则合理,能避免告警风暴 |
| 运维保障 | 备份、容灾、升级、应急预案 | 有备份方案 | 做过恢复演练,能讲清 RTO/RPO |
使用这张表时要注意:六个阶段并不是平均分配权重,我一般建议集群部署和可观测性各占 20%,网络存储和安全各占 15%,基础环境和运维保障各占 15%。但这个比例可以根据岗位方向调整,如果是 SRE 岗位,可观测性和运维保障权重可以拉高。
4. 软技能与后续维护,真正拉开差距的部分
4.1 故障处理能力的评估,一个复盘模板就够了
生产系统的后续维护,本质上就是持续面对故障的过程。我评估运维工程师的软技能时,最喜欢让他完整复盘一次真实故障,然后用下面的模板去套。这个模板分五块:故障发现(怎么察觉异常)、故障影响面(影响了多少用户、多少业务、持续多久)、止损动作(第一时间做了什么,花了多久)、根因分析(真正的原因是什么,用了哪些手段定位)、改进措施(后续做了哪些变更和演练,避免复发)。
我来具体说说每块怎么追问。故障发现这块,看他依赖人工盯屏还是自动化告警。可靠的运维工程师一定有一套完善的告警体系,能把“用户先发现问题”变成“系统自己报警”。止损动作这块,看他有没有“快速回滚”的意识和预案。很多候选人复盘时只会说“我们重启了一下服务”,但问他是怎么决定重启的、重启前保留了哪些现场信息,他就答不上来。根因分析这块,重点看他有没有用证据链定位问题,还是靠猜。改进措施这块,最关键的判断标准是:有没有形成书面的变更记录和操作手册,并且推动团队执行了演练。
我见过不少候选人,在面试时能把自己的故障案例讲得天花乱坠,但细问关键细节就露馅。比如他说“当时 CPU 飙到 100%,我立刻扩容了三台机器”,追问“你怎么判断是 CPU 计算密集导致的,而不是锁竞争或者 JVM GC 导致的现象?”他就开始含糊。真正经历过故障的人,对细节的记忆是极其清晰的,因为那是他焦虑了几个小时甚至通宵换来的经验,不可能忘。
4.2 监控告警与容量规划,怎么把“看不见的功夫”变成评估项
监控告警和容量规划,是生产环境后续维护里最容易被低估的部分。我评估这两项能力的办法很简单:让候选人看一张真实的监控面板图,问他两个问题——你觉得这套监控有什么不足?如果业务量突然翻倍,哪些指标会先发生变化?
监控不足的问题,可以考察他对可观测性的完整理解。很多人只会配 CPU、内存、磁盘、网络这几项基础指标,完全遗漏了应用层指标(请求延迟、错误率、队列积压)、中间件指标(连接数、慢查询、GC 次数)、证书过期、数据备份成功与否这类业务关键状态。容量规划这块,重点考察他的“预判能力”。真正优秀的运维,会为每个核心服务建立历史流量基线,并且知道在流量增长到何种水位时启动扩容流程。他会关注容量水位超过 70% 就要预警,超过 85% 就要提上日程,而不是等收到磁盘告警才去扩。
评估软技能还有一个很多人忽略的方向:文档能力与知识传承。我评估文档能力时,会直接说:“假设你要休两周假,你手上的核心系统能不能在你离开期间被其他同事运维?你的交接文档里会写什么?”能写出清晰的架构图、部署步骤、常见故障处置手册、应急联系人列表的人,才是可靠的后端力量。那些把所有知识都放在自己脑袋里、随问随答但从不沉淀的人,短期看能力强,长期看是团队风险。
5. 运营实践:面试题分层设计与人才筛选
5.1 从初级到高级,题目梯度怎么设计
运维工程师面试题的设计,不该是随机抽背题库,而应该按照能力层级分层设计。初级岗位(1-3 年)重点考察基础操作和系统理解。题库方向包括:Linux 系统启动流程、进程与线程区别、如何排查 CPU 飙升和内存溢出、TCP 三次握手与四次挥手、kill -9和kill -15的区别、为什么不能随便重启数据库。这些题目本身不难,但能考察候选人是否真的理解操作系统原理,而不是只背命令。
中级岗位(3-5 年)要加上容器与编排。题库方向包括:Pod 生命周期、Deployment 滚动更新策略、Service 与 Endpoint 的关系、如何排查 ImagePullBackOff、Kubernetes 调度器的工作流程、etcd 的选举机制、Ingress 和 LoadBalancer 的区别。这里的目标是确认候选人能否独立维护一套 K8s 集群。高级岗位(5 年以上)则要转向架构设计与故障复盘。题目方向包括:大规模集群的容量规划与性能优化、多集群管理与联邦方案、基于业务场景的存储选型、核心链路的高可用设计、故障复盘的方法论。高级岗位的面试题,尽量不设标准答案,重点听他的分析路径。
5.2 用行为面试法追问,识别真实的候选人与潜在风险
技术题能筛出“会不会”,行为面试才能筛出“合不合、稳不稳”。我用得最顺手的追问方法是 STAR 法,也就是 Situation(背景)、Task(任务)、Action(行动)、Result(结果)。比如候选人说他主导过系统迁移,我会问四个问题:当时是什么背景,为什么迁移?你的具体任务和目标是什么?你个人做了什么,包括方案选型、风险控制、切换过程?最后结果如何,有没有数据可以佐证?
这里最忌讳候选人用“我们”代替“我”。一问就是“我们团队怎么怎么样”,说明他很可能只是旁观者而不是核心执行者。我会直接打断:这件事里你个人的具体决策是什么?你自己动手做了什么?这样追问两三轮,一个人是真实做过还是了解皮毛,基本就清楚了。
行为面试还要特别注意候选人的风险意识。比如他描述一次变更操作时,我会问:变更前你做了什么准备?有没有灰度方案?如果失败了怎么回滚?回滚到哪个版本?我在面试中见过不少人,讲部署很利索,但一提回滚就支支吾吾。运维这个岗位,出问题不可怕,可怕的是出问题后没有预案、没有回滚路径。候选人身上有没有“事故思维”,会在很大程度上决定他能不能扛住生产环境的高压。
5.3 现场实操环节怎么设计才有效
如果条件允许,我强烈建议面试时增加 30 分钟的实操环节。实操题的设计原则是:贴近真实生产场景,但只要求在测试环境完成。我给中级岗位出过的实操题大概长这样:在三台节点上,用 kubeadm 初始化一个 K8s 集群,部署一个 Nginx 服务,配置 Ingress 后让它通过域名访问,最后接入 Prometheus 监控 Nginx 指标。
这题看着简单,但考察点非常密集。首先是心态,候选人面对陌生的测试环境,会不会紧张到连基本命令都忘记。其次是排查能力,环境里如果有端口冲突、镜像拉取失败、Ingress 控制器没起来等坑,看他是停止等待还是主动排查。最后是习惯,比如会不会给节点打标签、会不会用 namespace 隔离资源、会不会写简单的资源清单而不是全用命令行操作。实操环节的价值在于,它能还原候选人真实的工作状态,比任何面试题都更有说服力。
6. 评估体系里的常见误区,以及我给团队用的评估清单
6.1 五个踩过的坑,写出来给同行避避雷
第一个坑:把评估当成考试,只看知识点覆盖度。我曾经用过一份很全的题库,覆盖网络、系统、数据库、容器、CI/CD,结果录进来一个“题库王者”,上线第一天连生产环境登录凭据存放位置都不知道。知识覆盖面再全,也代表不了实际操作能力。现在我的评估原则是,宁可少考一个知识点,也要把一个真实场景挖到底。
第二个坑:只考 K8s,不考底层基础。这几年 K8s 太热了,很多人面试准备时全在看 K8s,但 Linux 基础一片空白。我遇到过不少人,kubectl用得很溜,但你问他某个进程的 fd 数量怎么看、CPU 上下文切换高怎么排查,他答不出来。K8s 只是运维体系的一层,底层操作系统、网络、存储的原理不过关,K8s 用得再熟,遇到问题也只会跟着工作流 API 走。
第三个坑:拿“最佳实践”当标准答案,忽略了场景差异。运维最讲究因地制宜,没有一套方案能适配所有业务。评估时如果预设标准答案,就会漏掉那些真正理解场景的人。比如某个候选人说他在小公司用二进制方式部署了单节点 etcd,方案不够“最佳实践”,但他能清晰解释为什么他的场景下这样更合适——这样的人,评估应该给高分,而不是因为他没用 kubeadm 就扣分。
第四个坑:忽略运维的“项目复盘能力”。系统不是搭完就结束了,运维的核心价值在后续维护。持续维护的能力怎么评估?看复盘记录。我面试时经常要求候选人展示一份他自己写的故障复盘报告,能拿出高质量文档的人,说明他真的在思考问题,而不只是救火。
第五个坑:只评估技术,不评估沟通协作。运维处在开发和业务的中间位置,经常要推动别人配合。我遇到过技术很不错的候选人,但沟通方式非常强势,难以合作。评估时加一个协作场景题:比如应用发布后线上出了问题,开发坚持说不是他代码的问题,你会怎么处理?这个问题的回答,能看出候选人是会硬扛、甩锅,还是能带着数据去冷静沟通。
6.2 我给团队用的日常评估清单
除了招聘面试,在职团队的定期评估同样重要。我给大家分享一份我实际在用的日常评估清单,每季度做一次,每项按 1-5 分打分。第一项:故障处理(包含发现及时性、止损效率、根因分析质量、复盘报告质量)。第二项:自动化程度(脚本和工具的复用性、是否有自动化监控和告警、CI/CD 流程是否完善)。第三项:容量管理(是否掌握核心服务的容量水位、调容量是否趁早)。第四项:文档与知识沉淀(操作手册、架构文档、变更记录是否完整)。第五项:沟通协作(跨团队推动问题解决的能力、对业务需求的理解程度)。
我用这份清单的主要目的,不是打分排名,而是识别团队能力缺口。如果大部分人自动化程度得分低,下次团队建设就搞自动化工具培训;如果文档得分普遍低,就强制执行“无文档不发布”的规则。每个季度打分之后,我会和员工单独聊一次,把打分结果结合具体案例呈现出来,比如“这季度你处理了三次生产事故,两次都有复盘文档,但自动化脚本只新增了一个,下季度希望你在自动化上多投入一点”。这样评估才能真正帮助团队成长,而不是变成 HR 报表里的冷冰冰的数字。
6.3 关于“具身智能应用运维”这个新方向的几点思考
最近“具身智能应用运维工程师”这个词开始出现在热词榜上,也有人问我要不要在新人培养里加入相关技能。我的看法是:先别急着追热点,但一定要关注技术演进。具身智能设备(比如机器人、自动驾驶硬件、工业自动化设备)的运维,本质上还是设备管理、数据链路管理、算法模型分发、远程监控与升级这几个模块的组合,底层能力依然是 Linux、网络、容器、 DevOps 体系,只是把“服务”从云端扩展到了边缘和终端。
如果要往这个方向演进,需要额外补充的知识包括边缘计算基础、模型版本管理与 A/B 测试、移动网络弱网环境下的传输优化、端侧设备 OTA 升级体系、多设备状态统一监控。但这些都是建立在传统运维能力之上的增量。我会在团队能力矩阵里为这个方向留一个可扩展的模块,如果团队有人基础扎实,可以让他去研究并作为内部分享。对个人而言,我的建议是:把当前的核心技能练到 80 分以上,再考虑明年趋势,不要本末倒置。技术栈可以更新,但底层的问题排查能力、架构设计思维、复盘总结习惯,永远是运维工程师最值钱的底色。