容器基础与K8s原理面试核心

本章聚焦容器生命周期、Pod调度机制、etcd及API Server等核心组件的高频面试题。以下先通过一张回答框架图建立整体排查逻辑,再逐一拆解典型问答。

故障定位入口 Pod生命周期 Pending/Error/CrashLoopBackOff Pod调度 资源不足/污点/亲和性 etcd 读写超时/数据一致性 API Server 认证/限流/资源版本冲突 kubelet 节点NotReady/容器运行时 回答框架:先定位异常组件 → 排查自身状态 → 检查依赖 → 查看日志 → 给出恢复方案

△ 面试回答时可按此路径分步阐述排查思路,避免跳过关键环节

🎯 面试问题

Pod 从创建到 Running 经历了哪些阶段?如果一直处于 Pending 该如何排查?

📌 面试官考察点

  • 对 Pod 生命周期(Pending → Running → Succeeded/Failed)的掌握
  • 调度流程理解:Scheduler 如何分配 Node
  • 实际排查能力:kubectl describe、events、资源限制检查

📐 回答框架

分两层:① 正常流程(创建→调度→拉镜像→启动容器);② Pending 定位(kubectl describe pod 看 events → 检查资源/污点/PVC/PodNetwork → 确认 Node 是否可调度)。

✏️ 简短示例回答

Pod 先进入 Pending,Scheduler 根据资源要求和亲和性选择 Node,分配成功后转为 Running。若一直 Pending,用 kubectl describe 发现 "FailedScheduling" 事件,原因是节点 CPU 不足,增加节点或调整资源限即可。

🔍 可能追问

  • 如果 Pod 是 DaemonSet 控制的,调度逻辑有何不同?
  • 如何区分资源不足与节点污点导致的 Pending?
⚠️ 避坑提醒: 别直接说“看日志”,要具体说明看 events 还是 kubelet 日志;避免只讲正常流程而忽略排查步骤。

🎯 面试问题

kube-scheduler 的调度策略有哪些?假设一个 Pod 调度失败,如何分析并恢复?

📌 面试官考察点

  • 调度流程:预选(Predicates)→ 优选(Priorities)
  • 常见调度策略:NodeSelector、NodeAffinity、Taint/Toleration
  • 排查工具:kubectl describe pod、调度器日志、scheduler_framework 插件

📐 回答框架

先说明预选/优选两步,举例常见插件。遇到调度失败时:kubectl describe pod 找 FailedScheduling → 查看节点资源、污点、PodSelector → 调整资源请求或删除污点。

✏️ 简短示例回答

Scheduler 通过 Predicates 过滤不满足条件的节点,再通过 Priorities 打分。若调度失败,我曾在生产中发现 Pod 请求 4 核但节点只剩 2 核,通过降低资源 limits 或扩缩节点解决。

🔍 可能追问

  • 如何实现自定义调度器?
  • 如果集群中有多个调度器,Pod 如何选择?
⚠️ 避坑提醒: 不要只背概念,要能现场演示排查命令。另外注意区分资源请求(requests)和限制(limits)对调度的影响。

🎯 面试问题

etcd 在 Kubernetes 中扮演什么角色?如果 etcd 集群出现写超时,你会如何排查?

📌 面试官考察点

  • etcd 作为 K8s 唯一的元数据存储
  • raft 共识机制、读写性能瓶颈
  • 故障排查:集群健康状态、磁盘 IO、网络延迟、慢请求分析

📐 回答框架

先说明 etcd 存储所有资源对象。写超时排查:检查 etcd 节点健康(etcdctl endpoint health)→ 查看磁盘 IO(fio)→ 网络延迟(ping/tcpdump)→ leader 选举频率→ 慢请求(--metrics)。

✏️ 简短示例回答

曾遇到 etcd 写超时导致 Pod 创建缓慢。先用 etcdctl endpoint status 发现 leader 频繁切换,进一步用 iostat 确认磁盘延迟 > 50ms,替换为 SSD 后恢复。

🔍 可能追问

  • etcd 的存储配额(quota-backend-bytes)满了会怎样?如何处理?
  • 如何对 etcd 进行备份和恢复?
⚠️ 避坑提醒: 别忽略网络层面,etcd 的写超时经常由跨 AZ 延迟导致。同时注意不要直接在生产环境 etcdctl compact,先评估是否影响读取。

📊 Pod 生命周期关键状态速查表

状态 含义 常见原因 排查命令
Pending 等待调度或容器启动前 资源不足、挂载卷未绑定、镜像拉取失败 kubectl describe pod
Running 至少一个容器正在运行 正常状态 kubectl logs
CrashLoopBackOff 容器反复崩溃重启 应用错误、配置异常、探活失败 kubectl logs --previous
Error 容器启动或运行时错误 OOM、文件系统损坏、权限不足 kubectl describe 查看 Reason
💡 面试提示: 故障治理面试侧重“可操作性”,建议将每个状态的排查命令和日志关键词记熟,面试中先给出关键命令再展开原理,体现实战经验。