容器核心技术面试:Docker原理、Kubernetes核心概念、Pod生命周期、调度策略

本章聚焦容器平台面试最高频的四个技术轴心。掌握回答框架和生命周期状态图,能让你在面试中快速展现系统思维。

一、核心技术知识结构

技术领域核心面试点常见追问
Docker原理镜像分层、联合文件系统、容器运行时隔离(Namespace/Cgroups)docker build 缓存策略、rootless 容器
K8s核心概念API Server、etcd、Controller Manager、Scheduler 职责Pod与Container关系、静态Pod
Pod生命周期Pending→Running→Succeeded/Failed,Init容器、探针(Liveness/Readiness/Startup)抢占、优雅终止、Pod删除流程
调度策略Predicates(硬约束)、Priorities(软评分)、亲和性/反亲和性自定义调度器、调度器扩展(Extender)
回答框架 概念定义 核心原理 关键组件 常见问题 快速一句话定义 隔离/资源限制机制 列举3个核心组件 典型场景+解决方案 对比类比(如VM) 设计原理/工作流 面试加分:每个层面补充“为什么这样设计”或“与旧方案的差异” Pending ContainerCreating Running Failed Succeeded CrashLoopBackOff 启动探针 → 就绪探针 → 存活探针 Init容器执行完才进入Pending后的“初始化”

二、面试问答卡片

面试问题:请简述Docker镜像分层的工作原理,以及如何优化构建缓存?
面试官考察点:是否理解联合文件系统(OverlayFS)、层复用机制;能否说出实际构建优化策略。
回答框架:定义层 → 只读层与可写层 → 缓存命中条件 → 构建优化实践。
示例回答:Docker镜像采用分层存储,每层是只读文件系统。构建时若某层指令和上下文未变,则复用缓存。优化技巧:将变化少的依赖安装放在前面,多使用.dockerignore避免不必要的缓存失效。
避坑提醒:不要只说“分层”而说不清是写时复制;避免遗漏--cache-from多阶段构建的高级用法。
面试问题:Pod 从创建到 Running 经历了哪些阶段?Init 容器和探针如何影响生命周期?
面试官考察点:对 Pod 状态机细节的掌握程度;能否清晰描述 Init 容器阻塞顺序及探针工作时机。
回答框架:Pending → 创建 Init 容器并等待完成 → 创建主容器 → 运行启动探针、就绪探针 → 标记 Running。失败时 CrashLoopBackOff。
示例回答:Pod 先处于 Pending,调度后开始拉镜像,Init 容器顺序执行完毕。主容器启动后执行 startupProbe,成功后 readinessProbe 通过才转为 Running;同时 livenessProbe 持续检查。
避坑提醒:不要混淆就绪探针与存活探针的作用;牢记 Init 容器失败会导致 Pod 重启(restartPolicy=Always 时)但要区分。
面试问题:Kubernetes 调度器给一个 Pod 选择节点时,会经过哪些步骤?
面试官考察点:Predicates + Priorities 两阶段理解;能否说出常见的过滤和打分策略。
回答框架:调度队列 → Predicates 过滤(节点资源、端口冲突、污点容忍等)→ Priorities 打分(资源余量、亲和性等)→ 选最高分节点 → 绑定。
示例回答:首先过滤出满足 Pod 资源请求、无污点等硬约束的节点;再按优先级函数(如 LeastRequestedPriority)打分,综合节点亲和性、Pod 反亲和性得出最终节点。
避坑提醒:不要忘记“污点容忍”属于过滤阶段;避免把软约束(亲和性)放到 Predicates 中讲解。
🏆 面试加分策略
回答时先给一句话总结(如“Docker 镜像层是只读的,缓存命中依赖指令和上下文”),再用项目或个人实践举例(如“我之前在 CI 中通过拆分 Dockerfile 层,构建时间缩短了 60%”)。每个问题最后回到“设计意图”——说明为什么 K8s 这样设计,体现架构思维。