← 返回全部分类DevOps面试题(7道)
DevOps · 中等"你会如何设计CI/CD流水线?"
我设计五个阶段的流水线。构建:编译代码、运行lint、生成制品。测试:每次提交跑单元测试,PR跑集成测试,合并到main跑E2E。安全:用Snyk做SAST扫描、依赖漏洞检查和密钥检测。部署:通过staging和金丝雀环境逐步推进到生产。监控:部署后自动健康检查,错误率飙升自动回滚。我使用基于主干的开发和短期特性分支。部署采用蓝绿或金丝雀取决于风险级别。在上一个岗位,这个流水线将部署频率从每周提升到每天多次,同时减少了60%的生产事故。
💡 提示:强调快速反馈——开发者应在几分钟内知道代码是否有问题。;安全扫描应自动化且不可跳过。;将回滚作为流水线的一等公民能力。
DevOps · 中等"Docker和Kubernetes有什么区别?"
Docker和Kubernetes解决不同但互补的问题。Docker将应用打包成容器——包含代码、运行时和依赖的轻量可移植单元。Kubernetes在规模上编排这些容器——处理部署、扩缩容、网络、自愈和负载均衡。简单部署可以只用Docker,但大规模需要编排。我们用Docker做本地开发和CI构建,用Kubernetes做生产环境,需要自动扩缩、滚动更新和自愈。我们的K8s集群管理200+个pod,实现零停机部署。
💡 提示:澄清它们是互补的而非竞争技术。;提到替代方案:Docker Swarm、ECS、Nomad——展示广度。;讨论实际权衡:Kubernetes增加了复杂性。
DevOps · 中等"你怎么为生产系统做监控和告警?"
我围绕三个支柱构建监控:指标(CPU、内存、延迟百分位、错误率)、结构化日志用于调试、分布式链路追踪理解跨服务请求流。告警遵循两条规则:每个告警必须可操作,触发时必须有人需要做些什么。我使用基于SLO的告警——当错误预算消耗过快时告警,而非基于单个指标。这大幅减少噪音。在上一个岗位,我将200+告警(大部分被忽略)精简到30个高信号告警。值班响应时间从45分钟降到5分钟以内。
💡 提示:强调减少告警疲劳——告警太多和太少一样糟糕。;提到SLO和错误预算展示现代方法。;讨论运维手册——每个告警应链接到解决指南。
DevOps · 中等"什么是基础设施即代码?你如何使用它?"
基础设施即代码是通过声明式配置文件而非手动操作来定义基础设施。这带来版本控制、同行评审、可重现性和自动化。我主要使用Terraform,远程状态存在S3,DynamoDB做锁。代码组织成可复用模块——VPC模块、ECS服务模块、数据库模块——各有自己的测试。所有变更通过PR评审和plan输出后才apply。我还用Terragrunt管理多环境减少重复。我将整个AWS基础设施从手动操作迁移到Terraform——跨3个环境150+资源。环境搭建时间从2天降到15分钟,消除了配置漂移。
💡 提示:提到状态管理——这是Terraform最棘手的部分。;讨论漂移检测和修复。;展示你用与应用代码同等的质量标准对待基础设施代码。
DevOps · 中等"描述你的故障响应流程。"
我的故障响应分四个阶段。检测:自动告警捕获错误率、延迟或可用性异常。分诊:值班工程师5分钟内评估严重程度并开启专用事故频道。止损:优先恢复服务——回滚、特性开关、流量切换——再做根因调查。解决:稳定后用正确分析调查根因。每次SEV1/2后48小时内做无责复盘:时间线、贡献因素、行动项。一次API依赖凌晨2点宕机,我8分钟内通过启用熔断器优雅降级,15分钟内向利益方通报状态,早上前完全解决。复盘后我们增加了三个新的降级机制。
💡 提示:强调"先止损后调试"——恢复服务是首要任务。;提到无责复盘——学习文化很重要。;展示你在事故期间主动沟通。
DevOps · 中等讲讲Pod生命周期。为什么既要readiness又要liveness?
Pod走Pending(待调度+拉镜像)→Running(容器起来)→Succeeded或Failed。init容器先跑完——适合迁移和拉配置。两种探针解决不同问题都重要。liveness回答"进程卡了吗"——失败K8s kill容器。只给真死锁用;激进的liveness就是crash loop production的方式。readiness回答"该给这个pod发流量吗"——失败把pod从Service endpoint集合摘掉但不kill。这是warmup、依赖故障、临时降级时要的。启动慢的应用(JVM、ML模型)加startup probe,否则liveness在应用起来前就开火。优雅退出:SIGTERM→preStop hook→排流量→退出。应用比负载均衡器察觉得还快就丢请求——preStop sleep是常见修法。
💡 提示:readiness该查依赖(DB、缓存)。liveness不该——上游闪一下会把健康pod也干掉。;terminationGracePeriodSeconds+preStop sleep能覆盖大部分"滚动发版丢请求"问题。;即答侠每种探针配了失败模式——面试官爱听"这我被坑过"。
DevOps · 中等对比发版策略。支付服务你选哪个?
支付服务我叠金丝雀+feature flag在滚动上面。基础滚动发二进制,按阶段金丝雀(1%→10%→50%→100%),错误率/时延超guardrail自动回滚。feature flag给单个新行为独立开关,出问题不用重发版就能关。蓝绿对支付"秒回滚"听着好,但有状态变更(schema、长事务)它也没有更优解——还要付双倍基础设施只为"以防万一"难正当化。支付的真保护是:(1)每次写幂等、(2)每次发版小爆炸半径、(3)自动回滚触发器、(4)runbook级回滚流程。策略是一根杠杆;卫生是三根。
💡 提示:guardrail告警自动回滚 > 人工介入——告警响起来时已经在丢钱。;进程内feature flag(LaunchDarkly、growthbook)的默认要安全——取不到flag不能把系统搞挂。;即答侠有四策略对照表——答得结构化不绕。