准备 DevOps 相关岗位面试时,我经历过一段低效的阶段:每天刷面试题、背命令,可面试官换一个业务场景来问,答案就变得支离破碎。原因其实不复杂,DevOps 知识体系太宽,工具链横跨代码管理、构建、部署、容器、监控和运维,只背零散知识点,很难应对开放性问题。这篇文章会整理一份可对照复习的 DevOps 面试指南,从核心概念、工具链全景、CI/CD 实战,到高频面试题、常见错误排查和工程落地建议,适合准备面试的初中级工程师,也适合想系统性梳理 DevOps 知识体系的开发、测试和运维同学。
1. DevOps 核心概念:先想清楚它解决什么问题
很多面试题看起来在考工具,实际在考概念。如果对 DevOps 的本质理解不到位,聊到 Kubernetes、Jenkins 时很容易绕进细节里出不来。所以先把核心概念讲清楚。
1.1 DevOps 是什么
DevOps 是 Development(开发)与 Operations(运维)的组合词,它并不是一个具体软件,而是一套组织协作模式和技术实践的结合。通俗地说,它希望打破开发、测试、运维之间的部门墙,让同一个团队从需求到上线全程负责,再配合自动化工具,把交付节奏提上去,同时把故障风险压下来。
专业一点的定义可以概括为:DevOps 是一种以自动化为基础,以持续交付为核心,以文化、流程、工具为支撑的软件交付与运营方法论。它解决传统模式下“开发能把功能做出来,但上线流程长、环境不一致、线上事故没人敢动”的典型问题。
1.2 DevOps 不是岗位名,也不是单纯的工具链
面试中经常有人问:你们团队有没有 DevOps 工程师?从招聘 JD 看,确实存在 DevOps 工程师这个岗位,但从方法论角度看,DevOps 不应该是某个人独有的职责,而是整个软件交付链条上的共同实践。
同样的道理,DevOps 也不等于 Jenkins + Docker + Kubernetes 这套工具组合。工具只是落地的抓手,如果团队没有协作规范、没有自动化意识,堆再多的工具也只能得到一个“看起来自动化、实际还是靠人肉”的流程。
理解这一点对面试很重要。面试官问“你如何理解 DevOps”时,比较好的回答结构是:
- 先用一句话说明 DevOps 的目标是缩短交付周期、提升交付质量;
- 再说明它包含文化、流程、工具三层;
- 最后举一个自己经历过的场景,例如通过流水线把发版时间从 2 小时缩短到 15 分钟。
1.3 CAMS 与 CALMS 框架
回答“DevOps 的核心理念是什么”这类问题时,CAMS 是常用的分析框架。
| 字母 | 含义 | 说明 |
|---|---|---|
| C | Culture 文化 | 鼓励协作、共享责任、减少互相甩锅 |
| A | Automation 自动化 | 构建、测试、部署、监控尽量自动化 |
| M | Measurement 度量 | 用数据衡量交付效率与系统稳定性 |
| S | Sharing 共享 | 知识、工具、责任在团队内共享 |
后来又有人加了 L(Lean,精益),扩展成 CALMS:Culture、Automation、Lean、Measurement、Sharing。在回答时,把这套框架和“如何落地”结合,会比单纯背名词更有说服力。
1.4 DevOps 与敏捷的区别
敏捷和 DevOps 经常一起出现,但二者关注重点不同。
敏捷更多聚焦开发阶段,强调小步快跑、持续迭代、快速响应需求变化,通常以 Scrum、Kanban 等框架来管理需求与交付节奏。
DevOps 则覆盖软件交付的全生命周期,从代码提交、持续集成、持续部署,到线上运行、监控告警、故障恢复。可以说敏捷解决的是“需求到代码”的效率问题,DevOps 解决的是“代码到生产环境并稳定运行”的效率问题。
面试时如果被问区别,可以给一个精简总结:敏捷关注需求交付的节奏,DevOps 关注交付与运营的连续性和稳定性。
2. DevOps 工具链全景:不同阶段用哪些工具
DevOps 的工具链非常多,但逻辑上可以按软件交付流程拆开:版本控制、持续集成、制品管理、容器化、编排、配置管理、监控告警。面试前建议按这条线梳理,而不是孤立地背每个工具的命令。
2.1 版本控制与代码托管
Git 是 DevOps 体系的基石。面试中至少需要掌握:
- 常用命令:git clone、git branch、git checkout、git merge、git rebase、git cherry-pick、git reset、git revert;
- 分支策略:Trunk-based、Git Flow、GitHub Flow,各自适用场景;
- 与 CI/CD 的配合:什么时候触发流水线,如何通过 Git Tag 驱动发布。
需要特别注意的是,git reset 和 git revert 经常被放在一起问。reset 是移动分支指针,可能修改历史;revert 是生成一个新的反向提交,保留原历史。生产环境操作时,revert 通常更安全。
2.2 CI/CD 工具:Jenkins、GitLab CI、GitHub Actions
近几年还常出现一个热词叫“Jenkins vs DevOps”,其实这是一个认知误区。Jenkins 只是实现 CI/CD 的具体工具,而 DevOps 是方法论,不能把两者放在对立面。Jenkins 解决的是流水线编排问题,DevOps 是指导你如何组织协作和交付的理念。
选型时可以参考下表:
| 工具 | 特点 | 常见使用场景 |
|---|---|---|
| Jenkins | 插件生态丰富、灵活,支持复杂流水线 | 已有大量历史任务、需要高度自定义 |
| GitLab CI | 与 GitLab 强集成,.gitlab-ci.yml 配置简单 | 代码托管和 CI/CD 都在 GitLab 内 |
| GitHub Actions | 云端托管、Marketplace 资源丰富 | 开源项目、GitHub 仓库为主 |
| Tekton | Kubernetes Native,运行在 K8s 集群内 | 云原生环境下的 CI/CD |
面试回答工具对比时,不要简单说“谁更好”,而是从团队技术栈、维护成本、云原生程度三个角度分析。例如:如果团队已经深度使用 Kubernetes,Tekton 这类云原生 CI/CD 工具可能比传统 Jenkins 更适合;如果团队历史包袱重,Jenkins 的插件生态兼容性更有优势。
2.3 容器化与编排:Docker 与 Kubernetes
容器化是 DevOps 中不可回避的一环。Docker 解决的是“本地能跑、正式环境跑不了”的环境一致性问题。Kubernetes 解决的是“容器多了之后,怎么调度、伸缩、恢复”的问题。
面试中关于 Docker 常见的有:
- Dockerfile 构建优化:合并 RUN、利用构建缓存、多阶段构建;
- 镜像分层原理;
- 容器与虚拟机的区别;
- 常见命令:docker build、docker run、docker exec、docker logs、docker ps、docker rm、docker rmi。
关于 Kubernetes 常见的有:
- 核心组件:kube-apiserver、kube-scheduler、kube-controller-manager、kubelet、kube-proxy、etcd;
- 工作负载:Deployment、StatefulSet、DaemonSet、Job、CronJob;
- 服务发现与暴露:Service、Ingress、Endpoint;
- 声明式管理思想:通过 YAML 描述期望状态,由控制器不断调整现实状态向期望状态靠拢。
2.4 配置管理与基础设施即代码
配置管理工具解决的是“服务器越来越多,怎么统一管理”的问题。常见工具包括 Ansible、Puppet、Chef、SaltStack,其中 Ansible 因为无 Agent 架构(依赖 SSH)和 YAML 语法,上手成本相对较低,在面试中更常被问到。
基础设施即代码(IaC)的另一个方向是资源编排。Terraform 用于管理云资源和基础设施,与 Ansible 的差别是:Terraform 更偏资源生命周期管理,Ansible 更偏配置与任务执行。回答这类问题时建议强调:IaC 的意义是把环境创建变成可版本化、可评审、可回滚的过程,而不是在面试现场背诵命令。
2.5 监控、日志与告警
DevOps 流程如果缺少监控反馈,就只是一个“一键发布”外壳。常用的监控技术栈:
- Prometheus:采集指标数据,配合 Alertmanager 做告警;
- Grafana:指标可视化面板;
- Loki / ELK:日志聚合和分析;
- OpenTelemetry:统一埋点与链路追踪标准。
面试中监控相关的高频点包括:四个黄金指标(延迟、流量、错误、饱和度),以及黑盒监控与白盒监控的区别。回答度量相关问题时,还可以结合 DORA 四指标:部署频率、变更前置时间、变更失败率、服务恢复时间。
3. 环境准备:一份 Devops 实验环境清单
为了避免“看过很多面试题、动手时寸步难行”,建议面试前至少在一套本地环境里跑通一条最小 CI/CD 链路。本文演示不依赖特定云厂商,以本地或测试环境为准。
3.1 工具版本与安装说明
注意:以下版本号不需要照抄,必须根据你实际环境调整。
| 工具 | 用途 | 安装方式 |
|---|---|---|
| Git | 版本控制 | 各系统包管理器直接安装 |
| Docker | 容器构建 | 安装 Docker Engine |
| Jenkins | CI/CD 流水线 | war 包 / Docker 运行 / 系统服务 |
| kubectl | 操作 Kubernetes 集群 | 二进制或包管理器 |
| Ansible | 配置管理 | pip 安装 |
| Prometheus + Grafana | 监控可视化 | Docker Compose / Helm |
建议实验环境使用一台至少 2 核 8G 的虚拟机或本地机器,如果条件有限,也可以用 Docker Desktop 自带 Kubernetes 功能做简化验证。但生产环境与本地存在差异,操作前必须以实际环境为准。
3.2 示例项目目录结构
下面的实战案例以一个简单的 Spring Boot 应用为例,你也可以用任意可构建成容器的程序替换,核心是理解流水线各阶段。项目目录如下:
devops-demo/ ├── Jenkinsfile # Jenkins 流水线定义 ├── Dockerfile # 镜像构建文件 ├── docker-compose.yml # 本地快速启动 ├── k8s/ │ ├── deployment.yaml # Kubernetes Deployment │ └── service.yaml # Kubernetes Service ├── src/ │ └── main/ │ └── java/ │ └── com/example/devops/ │ └── DemoApplication.java └── pom.xml # Maven 构建文件(可用其他语言替代)4. 核心知识拆解:一条 CI/CD 流水线要经历什么
在开始写 Jenkinsfile 之前,先理解 CI/CD 流水线里的每个阶段。面试中常问的一句话是:“你在实际项目中是怎么设计发布流程的?”如果你只回答“代码提交后 Jenkins 自动构建部署”,深度是不够的。
4.1 从代码提交到制品产出
CI 阶段目标是验证提交的代码能否通过自动化测试,并产出可部署的制品。
流程通常是:
- 开发者提交代码并推送远程仓库;
- 触发 Webhook 或定时轮询;
- 拉取代码、切换到对应分支或 Tag;
- 执行编译、单元测试、代码扫描;
- 产出 Jar/War 包或容器镜像;
- 将制品上传到制品仓库。
这个阶段的核心原则是:只要测试失败,流水线就终止,避免坏代码流向后续环境。
4.2 镜像仓库与不可变制品
传统部署方式中,常见问题是“生产环境用的包和测试环境不一致”。容器化之后,更推荐“不可变制品”思想:每个构建产物都打上唯一标签,例如myapp-1.4.2-build-118,镜像一旦构建完成就不再修改,只通过重新构建新版本来变更。
面试中可以这样说:我习惯把镜像 Tag 和构建号或 Git commit 关联,这样每个环境跑的都是可追溯的版本,出现问题时能快速定位是哪个代码版本发布的。
4.3 环境部署与发布策略
CD 阶段的关键不只是“把包放到服务器”,而是“如何让服务平滑更新”。常见发布策略:
- 滚动更新:逐步用新版本替换旧 Pod,适合大多数应用;
- 蓝绿发布:同时准备两套环境,通过切流量完成版本切换,回滚快但资源成本高;
- 金丝雀发布:先让一小部分流量进入新版本,观察指标后再逐步放量,适合风险较高的变更;
- A/B 测试:是基于数据验证的功能对比,不完全等同于发布策略。
Kubernetes 中,Deployment 默认支持滚动更新,而蓝绿、金丝雀可以结合 Service 与 Ingress 的流量权重或 Istio 这类服务网格实现。
4.4 监控与反馈闭环
CD 流程跑通后,必须把监控数据反馈给团队。面试中建议使用“四类指标”回答线上稳定性:延迟、流量、错误、饱和度。
如果被问到“你怎么判断一次发布是否成功”,不要只说“服务启动起来了”,而是从以下角度回答:
- 新的 Pod 是否通过健康检查;
- 接口错误率是否升高;
- 延迟是否出现明显抖动;
- 机器 CPU、内存、磁盘是否逼近阈值。
结合自动告警,一旦指标异常就立即触发回滚或暂停增量发布,这是生产环境发布的关键闭环。
5. 完整实战案例:从提交代码到自动部署
这个案例会实现一个最小但完整的 CI/CD 流程:代码构建成 Jar 包、Docker 构建镜像、Jenkins 流水线自动执行、Kubernetes 滚动更新。
5.1 编写 Dockerfile
在项目根目录创建Dockerfile,以多阶段构建为例:
# 文件路径:devops-demo/Dockerfile # 第一阶段:构建 FROM maven:3.8-eclipse-temurin-8 AS builder WORKDIR /build COPY . . RUN mvn clean package -DskipTests # 第二阶段:运行,基础镜像按项目 JDK 版本调整 FROM openjdk:8-jdk-slim ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY --from=builder /build/target/*.jar /app/app.jar WORKDIR /app EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]多阶段构建的好处是:最终镜像不包含 Maven 和源码,体积更小,攻击面更小。
5.2 编写 docker-compose.yml
如果本地没有 Kubernetes,可以先通过 Compose 验证镜像是否正确:
# 文件路径:devops-demo/docker-compose.yml version: '3.8' services: myapp: build: context: . dockerfile: Dockerfile image: myapp:latest ports: - "8080:8080" environment: - SPRING_PROFILES_ACTIVE=dev restart: unless-stopped启动命令:
docker-compose up -d --build访问http://localhost:8080检查服务是否启动。注意 Compose 文件版本号不一定被所有环境支持,需要按本机 Docker Compose 版本调整。
5.3 编写 Jenkinsfile
在项目根目录创建Jenkinsfile,定义流水线。下面的示例包含 Checkout、Build、Push、Deploy 四个阶段:
// 文件路径:devops-demo/Jenkinsfile pipeline { agent any environment { IMAGE_NAME = "myapp" IMAGE_TAG = "${BUILD_NUMBER}" REGISTRY_URL = "registry.example.com/devops" K8S_NAMESPACE = "dev" } stages { stage('Checkout') { steps { checkout scm } } stage('Build') { steps { sh ''' docker build -t ${IMAGE_NAME}:${IMAGE_TAG} . ''' } } stage('Push') { steps { withCredentials([usernamePassword( credentialsId: 'registry-credentials', usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS' )]) { sh ''' docker login ${REGISTRY_URL} -u ${REGISTRY_USER} -p ${REGISTRY_PASS} docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${REGISTRY_URL}/${IMAGE_NAME}:${IMAGE_TAG} docker push ${REGISTRY_URL}/${IMAGE_NAME}:${IMAGE_TAG} ''' } } } stage('Deploy') { steps { sh ''' kubectl set image deployment/myapp \ myapp=${REGISTRY_URL}/${IMAGE_NAME}:${IMAGE_TAG} \ -n ${K8S_NAMESPACE} ''' } } } post { failure { echo '流水线执行失败,请查看构建日志定位原因。' } } }需要注意:真实生产环境的镜像仓库地址、凭据、命名空间都要按团队规范调整。密码和 token 不要明文写在 Jenkinsfile 中,应通过 Jenkins Credentials 或 Secret 管理。
5.4 编写 Kubernetes 部署清单
k8s/deployment.yaml示例:
# 文件路径:devops-demo/k8s/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp namespace: dev spec: replicas: 2 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: registry.example.com/devops/myapp:latest ports: - containerPort: 8080 resources: requests: cpu: 200m memory: 512Mi limits: cpu: 500m memory: 1Gi readinessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 15 periodSeconds: 5 livenessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 30 periodSeconds: 10健康检查路径要结合应用实际接口来调整,Spring Boot 默认是/actuator/health,如果使用其他框架需要对应修改。
k8s/service.yaml示例:
# 文件路径:devops-demo/k8s/service.yaml apiVersion: v1 kind: Service metadata: name: myapp namespace: dev spec: selector: app: myapp type: ClusterIP ports: - protocol: TCP port: 8080 targetPort: 8080创建资源:
kubectl apply -f k8s/deployment.yaml kubectl apply -f k8s/service.yaml5.5 运行与验证
在本地跑通流水线后,可以用以下命令验证发布结果:
# 查看 Pod 状态 kubectl get pods -n dev # 查看部署状态 kubectl rollout status deployment/myapp -n dev # 查看最近事件 kubectl get events -n dev预期效果是:代码一旦推送到仓库,Jenkins 自动构建镜像,然后更新 Kubernetes 中的 Deployment。如果镜像拉取失败或健康检查不通过,Pod 不会进入 Ready 状态,流水线需要回到日志阶段排查。
6. 面试高频问题与回答框架
以下问题覆盖概念、工具、场景、行为四类,建议先自己回答一遍,再对照下面的框架补充。
6.1 概念类
问题:CI、CD 各是什么?持续交付与持续部署的区别是什么?
CI(持续集成)指开发者频繁将代码合并到主干,并通过自动化构建和测试尽早发现问题。CD 有两种理解:持续交付(Continuous Delivery)指代码始终处于可部署状态,发布到生产是手动触发的;持续部署(Continuous Deployment)则进一步将发布到生产自动化,合并代码后自动上线。
回答时建议补充一句:大部分公司做的是持续交付,生产发布保留审批或一键确认环节,目的是在自动化与风险控制之间取得平衡。
6.2 工具类
问题:Jenkins 和 GitLab CI 怎么选?
从三方面分析:
- 集成度:GitLab CI 与 GitLab 仓库天然集成,不需要额外部署平台;Jenkins 需要单独搭建和维护;
- 灵活性:Jenkins 插件数量多,适合复杂任务和已有历史任务的迁移;GitLab CI 更适合以 GitLab 为中心的团队;
- 运维成本:Jenkins 自身维护成本较高,GitLab CI Runner 相对轻量。
面试时加上团队背景会更具体:如果团队希望降低平台维护成本且代码已经在 GitLab,我倾向于用 GitLab CI;如果需要兼容多种构建环境、跑大量非标准任务,Jenkins 仍然有优势。
6.3 场景类
问题:线上发布后出现 500 错误,怎么处理?
这是一个高频场景题,回答时体现处理流程,而不是单点命令:
- 先确认变更范围内服务是否健康,通过监控定位错误率与延迟是否异常;
- 如果问题明显由新版本引入,优先回滚到上一个稳定版本,恢复业务;
- 保留现场信息,比如日志、线程栈、指标快照,供后续定位根因;
- 复盘变更流程,评估是测试覆盖不足、配置错误还是线上环境差异;
- 针对根因补充自动化验证和监控告警。
回滚是恢复手段,定位根因是预防手段,两者都要提。
6.4 行为类
问题:描述一次你推动团队落地 DevOps 的经历。
回答时遵循 STAR 法则:背景、任务、行动、结果。
例如:团队发布流程完全靠手工,每次上线耗时 2 小时。我先从 CI 入手,让代码提交后自动跑单元测试和静态检查;接着通过 Docker 统一环境,解决“本地可以、服务器不行”的问题;再引入流水线,把构建和部署脚本化。过程中遇到的最大阻力是部分同事不愿改变习惯,我的做法是先把重复劳动最多、最容易出错的排查步骤自动化,让大家看到节省的时间。
这类问题的重点不在于展示你用了多复杂的工具,而在于你如何推动协作和流程改进。
7. 常见问题与排查思路
面试官不会只看你懂多少理论,也会喜欢问“你实际遇到这个报错时怎么解决”。下面是一个通用问题表。
| 问题现象 | 常见原因 | 排查步骤 | 解决思路 |
|---|---|---|---|
| Jenkins Pipeline 中途失败 | Agent 内存不足、脚本步骤报错、凭据失效 | 查看阶段日志;确认是哪个 stage 失败;检查环境变量 | 按阶段定位问题;补全凭据;优化构建资源 |
| docker build 很慢 | 网络拉取慢、未利用缓存、依赖过大 | 确认基础镜像来源;观察缓存命中情况 | 配合镜像加速源;合理安排 Dockerfile 指令顺序;使用多阶段构建 |
| 镜像推送失败 | 仓库地址错误、认证失败、镜像命名不规范 | 检查 docker login 状态;核对仓库路径 | 统一命名规范;使用 Jenkins 凭据,不写死明文 |
| Kubernetes Pod 启动失败或一直重启 | 镜像拉取失败、探针不通过、资源不足 | kubectl describe pod 查看事件;查看容器日志 | 先解决镜像拉取;调探针参数;检查资源 requests/limits |
| kubectl 连接不上集群 | kubeconfig 配置错误、API Server 不可达 | 检查 kubectl config current-context;核对网络 | 重新配置 kubeconfig;确认 API Server 地址 |
排查问题的通用顺序是:看日志、看事件、看监控。不要一上来就改配置,先确认现象发生在哪个环节,再缩小范围。
8. 最佳实践与工程建议
工作几年后会发现,很多线上事故不是某个命令不会写,而是工程规范缺失。下面几条建议可以作为面试中“你怎么做发布管理”的扩展回答素材。
8.1 分支与版本规范
推荐主干开发(Trunk-based Development)加短生命周期特性分支。发布时通过 Git Tag 或构建号关联版本,便于追溯。每次构建产物使用不可变标签,例如1.4.2.118,不要一直用latest,否则环境之间很难保证一致。
8.2 配置与密钥隔离
不要把数据库密码、云账号密钥写进代码仓库。常见的做法是:
- 使用环境变量注入;
- 使用 Kubernetes Secret;
- 使用 Vault 等密钥管理工具;
- 在 Jenkins 中使用 Credentials Binding 注入敏感参数。
8.3 安全扫描与质量门禁
CI 阶段加入代码扫描和依赖漏洞扫描,即使不能完全消除安全风险,也能提前暴露问题。镜像构建完成后,还可以通过 Trivy、Clair 等工具扫描镜像漏洞。质量门禁的目标是让“坏制品”无法流向下游,但门禁规则需要根据团队实际迭代,避免过于严格导致流水线频繁阻塞。
8.4 监控与告警完善
发布成功不等于业务正常。建议至少覆盖以下指标:
- 接口延迟、QPS;
- 错误率;
- CPU、内存、磁盘使用率;
- Pod 重启次数与 Ready 状态。
告警规则不要只设置“服务挂掉”这一层,还要关注趋势变化。例如错误率在 5 分钟内持续超过阈值,即便服务还没不可用,也应该进入告警池。
8.5 回滚与灰度发布
任何发布流程都必须有回滚预案。Kubernetes 场景下,kubectl rollout undo可以快速回滚到上一个版本,但如果数据库表结构已经变更,仅回滚应用可能不够,需要提前设计兼容性方案。
涉及核心业务时,优先采用灰度发布:先让 5% 或 10% 的流量进入新版本,观察监控数据稳定后再逐步放量。这种方式能显著降低变更风险。
9. 学习路线与动手实践建议
如果你是从零开始准备 DevOps 方向,建议按三个阶段推进。
第一阶段:打好基础。
- 掌握 Linux 常用命令、文件权限、进程管理和网络排查工具;
- 掌握 Git 常用操作和分支模型;
- 熟悉一门脚本语言,至少能写 Shell 脚本完成简单的日志分析和自动部署。
这个阶段不要求用很复杂的工具,但要做到能在一台干净服务器上把一个 Web 应用跑起来。
第二阶段:打通 CI/CD。
- 手写一个 Dockerfile 并构建镜像;
- 部署一套 Jenkins 或使用 GitLab CI,把一个简单项目从代码提交到自动部署跑通;
- 尝试在流水线中加入测试、制品管理、回滚步骤。
建议从最简单的 Hello World 接口开始,不要一上来就搭微服务和 Kubernetes,先把“构建-推送-部署”闭环跑通,理解每个阶段的作用。
第三阶段:进入云原生与稳定性。
- 学习 Kubernetes 核心资源和工作负载;
- 用 Prometheus + Grafana 采集指标并配置告警;
- 了解 Terraform 等 IaC 工具;
- 结合 DORA 指标,思考如何度量团队交付效率。
面试准备上,可以每天抽时间在一个小项目里反复做“改代码、触发流水线、看构建、看部署、看监控”的循环。只有亲手遇到过镜像拉不下来、探针配置错误、流水线凭据过期这些问题,面试时讲到排查思路才不是背答案。
DevOps 是一个需要长期沉淀的方向,核心不是学会某一个工具,而是理解如何让软件更快、更稳定地交付到用户手里。希望这份指南能帮你把零散的知识点串成体系,在面试和工程实践中都能用得上。