Kubernetes 面试不应只背定义。更好的回答方式是:先说明对象或机制的职责,再描述请求链路、关键配置和排查方法,最后补充生产实践。下面整理 20 个高频问题及回答要点。
## 1. Pod 为什么是最小调度单元?
Pod 为一组容器提供共享的网络命名空间、存储卷和生命周期。调度器选择的是 Pod 所在节点,而不是单独调度其中每个容器。紧密协作的 sidecar 可以与主容器放在同一个 Pod,但不相关服务应拆开独立扩缩容。
## 2. Deployment、StatefulSet、DaemonSet 有什么区别?
Deployment 适合无状态副本和滚动更新;StatefulSet 提供稳定名称、顺序和持久卷关联;DaemonSet 保证目标节点上运行一个 Pod,常用于日志、监控和网络代理。选择依据是身份、存储和调度需求,而不是“哪个更高级”。
## 3. 创建 Deployment 后发生了什么?
请求经 API Server 认证、授权和准入后写入 etcd。Deployment Controller 创建 ReplicaSet,ReplicaSet 创建 Pod;Scheduler 为未绑定 Pod 选择节点;目标节点 kubelet 通过 CRI 拉取镜像并启动容器,CNI 配置网络,CSI 处理存储。
## 4. Scheduler 怎样选择节点?
先过滤不满足资源、污点、亲和性、端口和卷约束的节点,再对可行节点评分并绑定。Pending Pod 应从 Events 入手,检查资源请求、nodeSelector、污点容忍、PVC 和拓扑限制。
## 5. requests 和 limits 的区别?
requests 参与调度和资源保证,limits 限制容器可使用的上限。CPU 超限通常被节流,内存超限可能 OOMKilled。只配置 limits、requests 不合理或全部不配置,都可能造成调度和稳定性问题。
## 6. readiness、liveness、startup probe 分别做什么?
readiness 决定 Pod 是否接收 Service 流量;liveness 判断是否需要重启容器;startup 为慢启动应用提供保护,成功后其他探针才接管。探针不应依赖过多外部系统,否则故障可能被放大。
## 7. Service 如何把流量送到 Pod?
Service 通过 selector 选中 Pod,控制器生成 EndpointSlice,数据面组件把 ClusterIP 或节点端口流量转发到后端。排障依次检查 Pod Ready、标签、selector、EndpointSlice、端口和网络策略。
## 8. ClusterIP、NodePort、LoadBalancer 的区别?
ClusterIP 仅集群内访问;NodePort 在每个节点开放端口;LoadBalancer 依赖云或外部负载均衡实现。Ingress 则在七层按域名或路径路由,前提是集群已安装 Ingress Controller。
## 9. Kubernetes DNS 怎样工作?
CoreDNS 监听集群内 DNS 请求,为 Service 等对象提供名称解析。Pod 通常可通过 service.namespace.svc.cluster.local 访问服务。排查要检查 Pod 的 resolv.conf、CoreDNS Pod、Service、日志和 NetworkPolicy 对 53 端口的影响。
## 10. NetworkPolicy 为什么创建后没有效果?
常见原因是 CNI 不支持策略、标签或命名空间选择错误、方向写错、未放行 DNS,或者只限制了 ingress 却期待 egress 也被限制。必须用客户端 Pod 做正反向验证。
## 11. PV、PVC、StorageClass 的关系?
PVC 描述应用的存储需求,PV 表示可用存储资源,StorageClass 定义动态供应方式。PVC Pending 时检查 storageClassName、容量、accessModes、provisioner、拓扑和相关 Events。
## 12. ConfigMap 和 Secret 有什么不同?
两者都可向 Pod 提供配置;Secret 用于敏感数据,但 base64 不是加密。生产环境应限制 RBAC、开启 etcd 静态加密、避免写入镜像与日志,并建立外部凭证轮换机制。
## 13. RBAC 的 Role 与 ClusterRole 有何不同?
Role 作用于单个命名空间;ClusterRole 可描述集群级资源,也可被不同命名空间的 RoleBinding 引用。应优先最小权限和 RoleBinding,避免通配符及不必要的 cluster-admin。
## 14. Pod 一直 CrashLoopBackOff 怎么排查?
先看 describe 和 Events,再看当前日志与 --previous 日志;检查启动命令、环境变量、挂载、探针、权限、依赖和 OOM。CrashLoopBackOff 是重启退避状态,不是根因。
## 15. ImagePullBackOff 怎么排查?
检查镜像名和标签、仓库可达性、凭证、imagePullSecrets、节点 DNS、代理和证书。私有仓库问题要在实际节点网络环境验证。
## 16. 节点 NotReady 怎么排查?
查看 Node Conditions 和 Events,检查 kubelet、容器运行时、磁盘、内存、网络插件、证书和到 API Server 的连接。生产中先评估 drain 与业务影响,再决定修复或重建节点。
## 17. 滚动更新如何保证可用性?
Deployment 通过 maxUnavailable 和 maxSurge 控制更新节奏,readiness 决定新 Pod 是否进入流量。还应设置合理的终止宽限期、preStop、PodDisruptionBudget,并确保应用能优雅关闭。
## 18. etcd 为什么重要,怎样备份?
etcd 保存 Kubernetes 的关键状态。备份需要使用匹配版本的 etcdctl、正确证书和端点创建快照,并执行 snapshot status 验证。真正可靠的备份还必须在隔离环境做恢复演练。
## 19. 如何保护一个普通业务 Pod?
使用非 root、禁止提权、只读根文件系统、drop ALL capabilities、RuntimeDefault seccomp、资源限制、专用 ServiceAccount、NetworkPolicy 和固定镜像摘要;再通过 Pod Security 或策略引擎阻止不合规配置。
## 20. 线上故障应该怎样回答?
先说明影响范围和近期变更,再按应用、Service/DNS、网络、存储、节点、控制面逐层定位。操作前保存证据,优先可回滚措施,修复后验证用户路径,并输出根因、时间线和预防项。
## 回答技巧
面试官通常更看重判断顺序。回答时可以采用“现象—证据—假设—验证—修复—复盘”的结构。遇到不确定的版本细节,说明会查官方文档确认,比给出错误的绝对答案更专业。
## 参考资料
- https://kubernetes.io/docs/concepts/
- https://kubernetes.io/docs/tasks/debug/