Platform Infrastructure

Kubernetes 面试学习

架构主链路 · 调度资源 · Scheduler 内部机制 · Workload Controller · 网络存储 · 安全多租户 · 排障稳定性 · AI Infra GPU/DRA · 扩展与工程化

k8sschedulerworkloadnetworkingstorageoperatorcrdgitopshelmkustomizegpudrainterview
当前模块
学习进度0 / 11
Module Switcher
Kubernetes 面试学习
架构与调度3
Scheduler 插件与扩展1
工作负载与基础设施2
安全与运维2
AI Infra 与扩展3
内容模块

架构与 Pod 主链路

基础★☆☆⏱ 15 min

一句话结论

Kubernetes 是声明式控制系统:API Server 接收期望状态,Controller/Scheduler/kubelet 协同把 Pod 跑起来。

复习定位

维度内容
所属模块Kubernetes 核心
章节类型系统类
解决问题围绕控制面、调度资源模型、Workload Controller、网络存储、安全多租户、排障和 AI Infra GPU/DRA 建立平台面试答案。
面试抓手按 API Server、etcd、scheduler、kubelet、container runtime 链路讲。

Kubernetes 架构图

Kubernetes 官方组件架构图

Kubernetes 官方文档组件图:控制面通过 API Server 协调集群状态,节点侧由 kubelet、kube-proxy 和容器运行时执行工作负载。

Kubernetes 集群控制面与多节点结构图

同一架构的另一视角:CLUSTER 内 Control Plane(cloud-controller-manager / kube-api-server / etcd / scheduler / controller-manager)与多个 Node(kubelet + kube-proxy + CRI 内的 Pod)的归属关系,cloud-controller-manager 单独对接 Cloud Provider API。

一个 Pod 从提交到运行的完整链路

阶段核心组件发生什么面试关键词
提交请求kubectl / client-go → API Server用户提交 Pod、Deployment、Job 等资源对象REST API、OpenAPI、版本转换
认证鉴权API Server检查调用者是谁、有没有权限、是否满足准入策略Authentication、Authorization、Admission
持久化API Server → etcd合法对象被写入 etcd,成为集群期望状态声明式 API、resourceVersion、watch
控制器处理Controller ManagerDeployment 创建 ReplicaSet,ReplicaSet 创建 PodReconcile、OwnerReference、Finalizer
调度决策kube-scheduler监听未绑定 Pod,经过 Filter / Score / Reserve / Bind 选择节点Scheduling Framework、requests、亲和性、污点容忍
节点执行kubelet目标节点 kubelet watch 到 Pod,准备 volume、网络、容器Pod Worker、PLEG、CNI、CSI、CRI
运行容器containerd / CRI-O拉镜像、创建 sandbox、启动容器并持续上报状态Pause 容器、Pod IP、探针、状态回写

回答结构:Pod 是怎么跑起来的?

可以按“四段式”回答,主线是:所有控制面和节点组件都围绕 API Server 协作,etcd 只负责保存状态,真正执行发生在目标节点的 kubelet 上。

  1. 入口:用户通过 kubectlclient-go 把 YAML 提交到 API Server。API Server 负责认证、鉴权、准入控制、对象校验和默认值填充;合法对象会通过 API Server 持久化到 etcd。这里要强调:通常只有 API Server 直接读写 etcd,其他组件通过 API Server watch 和更新对象。
  2. 控制:如果提交的是 Deployment,Deployment Controller 会 watch API Server 中的对象变化,创建或维护 ReplicaSet;ReplicaSet Controller 再根据期望副本数创建、删除或修复 Pod。这个阶段体现的是 Kubernetes 的声明式 reconcile:用户写期望状态,controller 持续把实际状态逼近期望状态。
  3. 调度:scheduler watch 到未调度、未绑定节点的 Pod 后,经过 Filter、Score、Reserve、Permit、Bind 等流程选择合适 Node。调度器不会直接通知 kubelet,而是把绑定结果写回 API Server,例如设置 Pod 的 spec.nodeName 或创建 Binding。后续 kubelet 是通过 watch API Server 才知道这个 Pod 归自己执行。
  4. 执行:目标节点上的 kubelet watch 到绑定到本节点的 Pod 后,进入 Pod 生命周期执行流程:先准备 volume(CSI)、创建 Pod sandbox,再由网络插件(CNI)配置 Pod 网络,随后通过 CRI 调用 containerd / CRI-O 拉镜像、创建并启动业务容器。容器启动后,kubelet 继续执行探针、重启策略、资源状态采集,并把 Pod phase、container status、Node status 等状态回写到 API Server。
一句话总结:用户提交期望状态到 API Server,controller 负责创建和维护 Pod,scheduler 负责选 Node 并写回绑定结果,kubelet 在目标节点通过 CSI/CNI/CRI 把 Pod 真正跑起来,并持续向 API Server 上报状态。

追问时可以展开:etcd 一致性与 watch、Informer 缓存机制、scheduler 插件链路、绑定与抢占、kubelet Pod Worker、CSI/CNI/CRI 边界、探针和容器运行时。

控制面与数据面组件速记

组件职责常见追问
API Server所有资源操作入口,负责认证、鉴权、准入、聚合 API、watch为什么它是唯一直接访问 etcd 的组件?
etcd保存集群期望状态和关键元数据备份恢复、watch、resourceVersion、压缩与碎片整理
Scheduler为未绑定 Pod 选择节点Filter / Score / Reserve / Permit / Bind 的区别
Controller Manager运行 Deployment、ReplicaSet、Node、Job 等控制循环什么是 reconcile?如何处理最终一致性?
kubelet节点代理,负责 Pod 生命周期和状态上报kubelet 如何调用 CRI / CNI / CSI?
kube-proxy / eBPF datapath实现 Service 转发或服务负载均衡iptables、IPVS、eBPF 的差异
Container Runtime真正创建和管理容器CRI、containerd、pause 容器、镜像拉取

控制面与数据面组件高频追问

组件面试官问法回答抓手
API Server为什么它是唯一直接访问 etcd 的组件?统一认证鉴权、准入、版本转换、乐观并发和 watch 分发;其他组件通过 API Server 解耦。
etcdresourceVersion 和 watch 有什么关系?resourceVersion 是对象版本和 watch 起点;watch 太旧会遇到 compacted,需要重新 list。
SchedulerFilter / Score / Reserve / Permit / Bind 怎么区分?Filter 判断能不能放,Score 判断放哪里更好,Reserve 本地预留,Permit 等待或拒绝,Bind 写回 API Server。
Controller Manager什么是 reconcile?比较期望状态和实际状态,持续创建、更新、删除对象,让系统最终一致。
kubeletkubelet 如何调用 CRI / CNI / CSI?CRI 管容器运行时,CNI 配 Pod 网络,CSI / volume manager 挂载存储;kubelet 编排本节点执行。
containerdcontainerd、runc、shim、pause 容器分别是什么?containerd 是高层 runtime,runc 创建 OCI 容器,shim 托管容器进程,pause 持有 Pod 共享 namespace。

Container Runtime / containerd 面试速查

containerd 相关问题通常不是问“会不会用 Docker”,而是问清 kubelet → CRI → containerd → shim → runc 这条节点侧执行链路,以及 Pod sandbox / pause 容器为什么存在。

问题一句话答案排障关键词
CRI 是什么?Kubernetes 定义的容器运行时接口,kubelet 通过 CRI gRPC 调用运行时。crictl、runtime endpoint
containerd 和 runc 区别?containerd 管镜像、快照、容器生命周期;runc 是 OCI low-level runtime,真正创建 Linux 容器。OCI bundle、snapshotter
pause 容器是什么?Pod sandbox 的基础容器,先启动并持有 Pod 的 network / IPC 等共享 namespace。Pod IP、sandbox
containerd-shim 做什么?托管容器进程,转发 stdio / exit status,让 containerd 重启后容器仍可继续运行。shim 进程、僵尸进程
镜像怎么拉?kubelet 通过 CRI 调 PullImage,containerd 解析 manifest、拉 layer、校验 digest、写入 content store。ImagePullBackOff、registry、Secret
CNI 谁调用?kubelet 创建 Pod sandbox 时通过 CRI 触发 runtime 侧配置网络;containerd CRI plugin 会调用 CNI 插件。ContainerCreating、CNI config
Docker 镜像还能跑吗?能。移除 dockershim 不等于不能跑 Docker 构建的镜像;镜像遵循 OCI/Docker image spec。dockershim removed、OCI

架构与 Pod 主链路高频问答

本模块的问答按“概念 → 作用 → 链路/排查 → 面试口径”组织,避免只背一段结论。

Q: API Server 为什么通常是唯一直接访问 etcd 的组件?

因为 API Server 是 Kubernetes 的统一状态入口。它集中处理认证、鉴权、准入、默认值、版本转换、对象校验、乐观并发和 watch 分发。如果 controller、scheduler、kubelet 都直接读写 etcd,权限、版本兼容、并发控制和审计都会失控。

面试口径:etcd 是状态存储,不是组件协作总线;组件协作通过 API Server 和 watch 完成。
Q: Controller Manager 的 reconcile 到底是什么意思?

reconcile 是控制器把实际状态拉回期望状态的循环。以 Deployment 为例,用户声明 replicas=3,Deployment Controller 确保 ReplicaSet 存在,ReplicaSet Controller 确保有 3 个 Pod。Pod 被删、节点故障、状态变化时,controller 会再次对比 spec 和 status,并执行修正动作。

面试口径:reconcile = watch 变化 + 对比期望/实际 + 幂等修正,目标是最终一致,不是同步阻塞执行。
Q: kubelet 如何调用 CRI / CNI / CSI?

kubelet watch 到绑定到本节点的 Pod 后,进入 SyncPod。它先通过 volume manager / CSI 准备卷,再通过 CRI 调用 containerd 创建 Pod sandbox。创建 sandbox 时 runtime 侧会调用 CNI 配置网络,随后 kubelet 继续通过 CRI 拉镜像、创建并启动业务容器。

kubelet
  → CSI / volume manager 准备 volume
  → CRI RunPodSandbox
  → containerd CRI plugin 调 CNI 配网络
  → CRI PullImage / CreateContainer / StartContainer
  → containerd-shim / runc 创建容器进程
面试口径:kubelet 是节点编排者;CRI 管容器,CNI 管网络,CSI 管存储。
Q: containerd、runc、containerd-shim 分别负责什么?

containerd 是高层容器运行时,负责镜像拉取、content store、snapshot、容器生命周期和 CRI 服务。runc 是 OCI low-level runtime,负责根据 OCI spec 真正创建 Linux 容器。containerd-shim 位于 containerd 和容器进程之间,托管容器进程、收集退出状态和 stdio,让 containerd daemon 重启时容器不必一起退出。

面试口径:containerd 管生命周期和镜像,runc 负责创建容器,shim 负责把容器进程和 containerd 解耦。
Q: pause 容器 / Pod sandbox 是什么?为什么需要它?

Pod 不是单个容器,而是一组共享网络等 namespace 的容器。pause 容器是 Pod sandbox 的基础容器,它先启动,持有 Pod 的 network namespace、Pod IP 和部分共享 namespace。业务容器启动时加入这个 sandbox。这样业务容器重启时,Pod 的网络身份可以保持稳定。

面试口径:pause 容器是 Pod 的 namespace 锚点;它让 Pod 里的多个容器共享同一个网络身份。
Q: ImagePullBackOff 和 ErrImagePull 怎么排查?

先看 Pod Events 里的具体错误:镜像名/tag 是否存在、registry 是否可达、imagePullSecret 是否正确、节点 DNS/代理是否正常、证书是否可信。再到节点侧用 crictl pull 或查看 containerd 日志确认 runtime 能否拉取。

kubectl describe pod <pod>
kubectl get secret -n <ns>
crictl pull <image>
journalctl -u containerd
面试口径:ImagePullBackOff 是 kubelet 拉镜像失败后的退避状态;根因通常在镜像名、权限、网络、证书或 registry。
Q: ContainerCreating 卡住通常看哪里?

ContainerCreating 表示已经调度到节点,但节点侧执行还没完成。排查顺序是:Pod Events → kubelet 日志 → containerd 日志 → CNI 日志 / 配置 → CSI mount → 镜像拉取。常见原因包括 CNI 分配 IP 失败、CSI 挂载超时、sandbox 创建失败、镜像拉取慢、节点磁盘压力。

面试口径:Pending 偏调度侧,ContainerCreating 偏节点执行侧;重点看 kubelet、runtime、CNI、CSI。
Q: Kubernetes 移除 dockershim 后,Docker 镜像还能跑吗?

能。dockershim 移除的是 kubelet 直接对接 Docker Engine 的内置适配层,不是移除 Docker 镜像格式。只要镜像符合 OCI / Docker image spec,containerd 和 CRI-O 都可以拉取和运行。变化在节点运行时链路:kubelet 通过 CRI 直接对接 containerd,而不是 kubelet → dockershim → Docker Engine。

面试口径:dockershim removed 不等于 Docker image 不能用;镜像格式兼容,运行时链路变了。
Q: 为什么说 Kubernetes 是声明式系统?

回答思路:先说概念和作用,再按链路或排查维度展开,最后给一句面试总结。

1. 概念

声明式系统的核心是用户提交“期望状态”,例如 Deployment 期望 3 个副本,而不是一步步命令系统创建哪几个容器。

2. 作用

声明式 API 让系统可以容错和自愈:Pod 被删、节点故障、实际副本数不匹配时,controller 会重新 reconcile。

3. 实现方式

API Server 保存 spec,controller 通过 Informer watch 对象变化,比较期望状态和实际状态,再创建、更新或删除相关对象。

4. 面试边界

etcd 保存状态,API Server 提供读写入口,controller 负责逼近期望状态;不要把 Kubernetes 理解成一次性脚本执行器。

面试口径:Kubernetes 的声明式体现在“用户写 spec,controller 持续 reconcile,最终让实际状态逼近期望状态”。
Q: API Server、Controller、Scheduler、kubelet 都在 watch 什么?

回答思路:先说概念和作用,再按链路或排查维度展开,最后给一句面试总结。

1. API Server 的位置

API Server 不只是被 watch 的对象入口,也是认证、鉴权、准入、版本转换和 watch 分发中心,其他组件基本都围绕它协作。

2. Controller watch 什么

Controller watch 自己关心的资源,例如 Deployment、ReplicaSet、Pod、Node,并根据 spec/status 差异执行 reconcile。

3. Scheduler watch 什么

Scheduler 主要 watch 未绑定节点的 Pod,以及 Node、PVC、ResourceClaim 等会影响调度结果的对象。

4. kubelet watch 什么

kubelet watch 绑定到本节点的 Pod,然后在节点侧准备 volume、网络和容器,并持续回写 Pod/Node 状态。

面试口径:watch 机制让组件通过 API Server 解耦协作,Controller 管期望状态,Scheduler 管放置决策,kubelet 管节点执行。

关联模块

  • GPU 硬件与资源共享:提供 SM、HBM、NVLink、MIG/MPS、利用率诊断等底层直觉。
  • LLM 推理系统:提供 Prefill/Decode、KV Cache、Serving Engine 和推理优化语境。
  • Kubernetes 核心:提供调度、资源模型、控制器和扩展机制。
  • 分布式训练 / 调度与集群:提供多卡通信、队列、公平性、拓扑和容错背景。