第2章:SRE核心技能栈与面试考察点

SRE 面试围绕六大核心技能领域展开:网络、系统、容器、监控、自动化、故障排查。面试官通过场景题评估你对这些领域的理解深度和实操能力。下面给出通用回答框架和3个典型面试问答。

①收集现象 告警/用户反馈 ②假设验证 网络/系统/应用 ③隔离影响 范围&受损服务 ④恢复方案 回滚/扩容/切换 ⑤复盘优化 根因文档/改进 SRE 故障排查通用回答框架 面试中按“收集→假设→隔离→恢复→复盘”结构回答,展示系统性思维

面试问答卡片

📌 面试问题

请描述一次你通过排查网络问题解决服务异常的案例。

🎯 面试官考察点

  • 是否掌握基础网络排查工具(ping、traceroute、tcpdump、netstat)
  • 能否区分网络层、传输层、应用层故障
  • 是否具备系统化排查思路(从现象到根因)

📋 回答框架

  1. 背景:某前端页面加载超时,用户报障。
  2. 排查步骤:先 curl 确认服务端口可达 → 发现延迟高 → tcpdump 抓包发现 TCP 重传 → 检查网络链路(ping 网关正常,但跨AZ延迟突增)→ 定位到交换机端口丢包。
  3. 恢复:切换流量至另一可用区,通知网络团队换端口。
  4. 复盘:增加跨AZ链路监控告警。

💬 简短示例回答

“用户反馈页面加载超时,我先curl确认服务端口未响应。通过tcpdump抓包发现TCP重传率20%,再用mtr检测到跨可用区链路延迟突增至500ms。联系网络团队发现交换机端口故障,立即切换流量至备用AZ,服务恢复。后续增加链路质量自动告警。”

❓ 可能追问

  • “如果tcpdump显示大量SYN收到但未建立连接,是什么问题?”
  • “如何快速判断是网络带宽瓶颈还是应用本身慢?”
  • “你会在生产环境直接抓包吗?有什么注意事项?”
⚠️ 避坑提醒:
① 不要一上来就说“重启服务”,优先用工具排查;
② 禁止在生产环境直接抓包未脱敏流量的全包,建议用 tcpdump -c 限制包数 + -w 落盘;
③ 回答时体现“影响范围评估”和“回滚方案”更显专业。

📌 面试问题

如何通过系统指标和容器日志定位一个Pod频繁OOMKilled的问题?

🎯 面试官考察点

  • 对容器资源限制(limits/requests)的理解
  • 系统层面 OOM Killer 机制与日志查看方法
  • 是否具备分析内存泄漏的常规手段

📋 回答框架

  1. 检查Pod状态:kubectl describe pod 查看 last state 为 OOMKilled
  2. 查看资源限制:确认 limits.memory 是否过小
  3. 检查应用日志:kubectl logs --previous 查看重启前日志,找OutOfMemoryError或堆内存溢出
  4. 系统层面:dmesg | grep -i oom 查看内核OOM记录
  5. 监控分析:用 Prometheus 查 Container Memory Working Set 时间序列,看是否有持续增长趋势

💬 简短示例回答

“Pod反复OOM,先kubectl describe发现limits.memory=256Mi过小。查看前一次日志,Java进程抛出OutOfMemoryError。增加memory limits至512Mi后仍OOM,通过Prometheus内存曲线发现持续增长,判断是内存泄漏。配合Heap Dump分析定位到未关闭的HTTP连接池。”

❓ 可能追问

  • “为什么OOM后Pod会重启?哪个控制器负责?”
  • “limits和requests的区别是什么?设置不合理会有什么问题?”
  • “你如何在Kubernetes中配置内存Limit的自动扩缩?”
💡 加分点:回答时提及“先用top/ps查看主机资源是否充足,排除节点级别OOM”,体现全局视角。
⚠️ 避坑提醒:不要只查容器级指标,忽略宿主机的内核日志。另外,务必区分“OOMKilled”和“CrashLoopBackOff”的不同原因。

📌 面试问题

请你设计一个自动化故障恢复流程,当某微服务连续3次健康检查失败时自动执行什么操作?

🎯 面试官考察点

  • 对自动化运维的认知深度(自愈 vs 人工介入边界)
  • 能否设计安全可靠的容错流程(防抖、熔断、回滚)
  • 是否熟悉常见自动化工具(K8s自愈、Ansible、混沌工程)

📋 回答框架

  1. 触发条件:健康检查连续失败3次 → 触发自动流程
  2. 第一步:隔离:从负载均衡池摘除该Pod/实例
  3. 第二步:尝试自愈:K8s会自动重启Pod;若为传统部署,执行预定义脚本(如重启服务、清理临时文件)
  4. 第三步:健康验证:等待30秒后再次健康检查,若恢复则重新加入LB池
  5. 第四步:升级警报:如果第2次尝试仍失败,发送告警给on-call工程师,并保留现场日志

💬 简短示例回答

“我会设计一个三级自愈流程:1)失败3次后摘除实例并重启容器;2)重启后重新health check,成功则加回LB;3)若重启两次仍失败,则保留现场并创建工单,同时将流量转移至其他可用实例。整个流程用K8s的liveness探针+自定义Operator实现,避免无限重启。”

❓ 可能追问

  • “如果所有实例同时失败,你的自动化流程会怎样?”
  • “如何防止自动恢复导致的‘雪崩效应’?”
  • “你会将自动恢复能力与告警系统如何联动?”
⚠️ 避坑提醒:不要设计“无限自动重试”逻辑,必须有最大重试次数和人工介入阈值;回答时强调“容错与熔断”,展示对分布式系统稳定性的理解。

项目案例:电商平台微服务Kubernetes迁移故障演练

项目名称 电商核心链路K8s迁移与自愈机制建设
业务背景 原有虚拟机部署的订单、支付服务,因大促扩容慢、故障恢复需人工干预,决定迁移至Kubernetes集群,并构建自动化故障恢复能力。
规模指标
  • 微服务数量:30+(订单、支付、库存、物流等)
  • 生产集群:3个可用区,200+节点,3000+ Pod
  • 峰值QPS:10万/秒(双十一)
  • 故障恢复SLA:< 5分钟
技术栈 Kubernetes 1.24、Docker、Prometheus+Grafana、ELK、Consul、Nginx Ingress、自研Operator(基于Go)
核心难点
  1. 平滑迁移:存量连接不中断,要求双活过渡
  2. 自动扩缩容震荡:流量突发时HPA频繁扩缩,导致Pod启动风暴
  3. 故障自愈误判:健康检查过于敏感导致正常Pod被误杀
  4. 分布式链路追踪:迁移后部分请求丢失Trace
面试高频追问
  • “迁移过程中如何保证数据一致性?尤其是支付状态。” → 使用双写+对比补偿方案。
  • “HPA震荡如何解决?” → 设置冷却时间、使用PodDisruptionBudget、调整指标采集窗口。
  • “如何设计故障演练流程?” → 采用Chaos Mesh注入随机故障,验证自愈机制。
  • “自毁情况下如何保留故障现场?” → 在Operator中加入“保留LastReplicaset”策略。
可迁移回答话术 “在迁移类似大型系统时,我会优先设计灰度切流+可观测性双保险。比如先用20%流量验证K8s集群稳定性,同时强化Prometheus告警和日志中心。对于自愈机制,设置熔断阈值和人工审核窗口,避免自动化误操作。这个思路同样适用于云原生环境下的其他迁移项目。”

📚 本章小结

  • SRE 面试的核心是对 网络、系统、容器、监控、自动化、故障排查 六项技能的综合运用能力。
  • 回答故障排查类问题时,遵循 收集→假设→隔离→恢复→复盘 的通用框架,展示系统化思维。
  • 项目案例中要突出 规模指标、核心难点、你的针对性方案,并准备可迁移话术。