🎁 立即注册,最多可免费使用 30 分钟在线 AI,无需信用卡。

Kubernetes 面试问题与答案:26 个问题及命令

August 24, 2026
Kubernetes 面试问题与答案,涵盖 Pod、Deployment、Service、探针、扩缩容、存储、RBAC,以及排查 CrashLoopBackOff 和 Pending Pod。
Kubernetes 面试问题与答案:26 个问题及命令
kubernetes 面试问题
kubernetes 面试问题与答案
k8s 面试问题
kubernetes 故障排查面试

Kubernetes 面试早已不只是考概念(pod、deployment、service),而是转向运维(pod 崩溃时会发生什么、如何排查卡住的滚动发布)和设计(如何安全地运行一个应用)。面试官喜欢听具体的命令和现象,所以要多练习说出你实际会敲的命令,以及你预期看到的结果。

以下是 26 道题及参考答案,按主题分组。尽量把示例替换成你自己集群里的真实经历。

架构与对象

1. 什么是 Kubernetes?

一个开源系统,用于在一组机器组成的集群上运行和管理容器。你声明期望的状态,比如某个服务要跑三个副本,Kubernetes 就会持续工作,让实际状态与之保持一致。

2. 集群的主要组件有哪些?

控制平面包含 API server(入口)、etcd(数据存储)、scheduler(为每个 pod 挑选节点)和 controller manager(运行各种控制循环)。每个工作节点上运行 kubelet(负责运行 pod)、容器运行时和 kube-proxy(负责 service 网络)。

3. 什么是 pod?

最小的可部署单元。它包含一个或多个容器,这些容器共享网络命名空间和存储。大多数 pod 只有一个主容器,额外的容器是 sidecar 或 init 容器。

4. Deployment、ReplicaSet 和 StatefulSet 有什么区别?

ReplicaSet 负责维持一定数量的相同 pod 在运行。Deployment 管理 ReplicaSet,并提供滚动更新和回滚能力。StatefulSet 用于有状态应用:pod 拥有稳定的名称、稳定的存储,以及有序的启动和停止。

5. 什么是 DaemonSet?Job?CronJob?

DaemonSet 在每个节点上运行一个 pod,适合日志采集这类 agent。Job 运行任务直到完成。CronJob 按计划运行 Job。

6. 什么是标签、选择器和注解?

标签是对象上的键值对,选择器按标签挑选对象。Service 就是这样找到 pod 的,Deployment 也是这样找到自己的 ReplicaSet。注解同样存放键值数据,但用于工具读取的非标识性元数据。

7. 什么是命名空间?

一种把集群划分成虚拟分组的方式,通常按团队或环境划分。命名空间可以隔离名称,你还能按命名空间设置资源配额和访问规则。但它本身并不是一道强安全边界。

网络

8. Service 有哪些类型?

类型作用
ClusterIP一个稳定的内部 IP,只能在集群内部访问(默认类型)
NodePort在每个节点上开放一个端口
LoadBalancer通过云厂商创建一个外部负载均衡器
ExternalName把 service 映射到一个 DNS 名称

9. 什么是 Ingress?

一个按主机名和路径把外部 HTTP 和 HTTPS 流量路由到 service 的对象,实际工作由 ingress controller 完成。更新的 Gateway API 是它更具表达力的继任者。

10. pod 之间如何互相发现?

通过 Service 和集群 DNS。命名空间 shop 里名为 api 的 service,可以通过 api.shop.svc.cluster.local 访问,在同一命名空间内直接写 api 也行。

11. 什么是 NetworkPolicy?

一套控制哪些 pod 能互相通信的规则。默认情况下所有 pod 都能互相访问。配合 NetworkPolicy(以及能强制执行它的网络插件),你可以限制流量,比如只允许 API pod 访问数据库。

配置与存储

12. ConfigMap 和 Secret 有什么区别?

两者都存放配置,通过环境变量或文件注入。Secret 用于敏感数据,但默认只是 base64 编码,并没有加密。要开启静态加密,用 RBAC 限制访问,并考虑使用外部密钥管理服务。

13. PersistentVolume 和 PersistentVolumeClaim 是什么?

PersistentVolume 是集群中的一块存储。PersistentVolumeClaim 是 pod 对存储的请求。StorageClass 让 Kubernetes 能自动供应存储卷。普通容器文件系统里的数据在 pod 被替换后就会消失。

14. requests 和 limits 是什么?

requests 是调度器为容器预留的资源量。limits 是容器能使用的上限。超过内存 limit 会导致容器被杀掉(OOMKilled),超过 CPU limit 则会被限流。

可靠性与更新

15. 存活探针、就绪探针和启动探针分别是什么?

存活探针决定容器是否需要重启。就绪探针决定是否应该向它发送流量。启动探针则为启动较慢的应用争取时间,让其他探针延后开始。一个常见的错误是让存活探针依赖数据库,这样数据库一旦宕机,所有 Pod 都会被反复重启。

16. 滚动更新是如何工作的?

Deployment 会逐步创建新 Pod、移除旧 Pod,由 maxSurge 和 maxUnavailable 控制节奏。就绪探针决定新 Pod 何时算作就绪。如果更新出了问题,可以用 kubectl rollout undo 回退到上一个版本。

17. 自动扩缩容是如何工作的?

Horizontal Pod Autoscaler 根据 CPU 等指标调整 Pod 数量。Vertical Pod Autoscaler 调整 requests 和 limits。当 Pod 无法被调度或节点利用率过低时,cluster autoscaler 会增减节点。

18. 节点维护期间如何保证应用可用?

运行多个副本,把它们分散到不同节点或可用区,并设置 PodDisruptionBudget,让自愿驱逐时仍保留最低数量的副本在运行。用 kubectl drain 排空节点。

故障排查

19. Pod 处于 CrashLoopBackOff 状态,你怎么办?

这说明容器启动后又反复退出。运行 kubectl logs <pod> --previous 查看上次失败的原因,用 kubectl describe pod 查看事件、退出码和探针失败信息,并检查配置、缺失的 Secret 以及资源限制。

20. Pod 卡在 Pending 状态,你检查什么?

kubectl describe pod 会显示调度器无法放置它的原因:没有节点有足够的 CPU 或内存、node selector 或 taint 不匹配,或者 volume claim 未绑定。

21. Pod 被 OOMKilled,你怎么办?

它超出了内存限制。查看使用趋势,判断是存在内存泄漏还是限制设得太低,然后提高限制或修复应用。把 requests 设得接近真实用量,调度才会准确。

22. Service 无法访问,你如何排查?

  1. 检查 Pod 是否在运行且已就绪。
  2. 检查 Service 的 selector 是否匹配 Pod 标签(kubectl get endpoints)。
  3. 用临时 Pod 从集群内部测试。
  4. 检查端口、target port 以及容器监听的地址。
  5. 检查网络策略,然后检查 Ingress 和 DNS。

安全与运维

23. RBAC 是如何工作的?

Role 定义对资源的权限,binding 把它们授予用户、组或 service account。尽量使用命名空间级别的 Role,避免使用 cluster-admin,并让每个工作负载使用独立的 service account,只授予它所需的最小权限。

24. 你如何保护集群安全?

使用最小权限的 RBAC,限制 API 访问,扫描镜像,尽可能以非 root 用户运行容器并使用只读文件系统,应用网络策略,加密 Secret,保持 Kubernetes 更新,并审计活动。

25. 什么是 Helm?

Kubernetes 的包管理器。chart 是一组模板化的 manifest,release 是带有自己 values 的已安装实例。它帮助你在不同环境间复用和版本化部署。Kustomize 是另一种方式,通过打补丁修改普通 manifest。

26. 你会如何安全地把一个 Web 应用部署到 Kubernetes?

“用一个 Deployment,至少三个副本分散在不同可用区,设置 requests 和 limits,配置就绪探针和存活探针,一个 Service 和一个带 TLS 的 Ingress,配置放在 ConfigMap 和 Secret 中,再加一个 HPA 和一个 PodDisruptionBudget。通过流水线部署,使用滚动更新和便捷的回滚,并在发布过程中监控错误率和延迟。”

需要掌握的命令

任务命令
列出 Podkubectl get pods -n <namespace>
Pod 详情和事件kubectl describe pod <pod>
日志kubectl logs <pod> -c <container>(崩溃后加上 --previous)
进入 Pod 的 shellkubectl exec -it <pod> -- sh
回滚kubectl rollout undo deployment/<name>
扩缩容kubectl scale deployment/<name> --replicas=5
应用 manifestkubectl apply -f file.yaml

如何准备

用 kind 或 minikube 在本地跑一个小集群,故意制造问题:错误的镜像标签、失败的探针、设得太低的内存限制。练习读懂 describe 和 logs 的输出。准备一个你处理过的真实故障,以及事后你做了哪些改变。设计方面的练习,参见我们的系统设计指南,云相关主题参见 AWS 面试指南。

把你的排查步骤大声说出来,因为面试官在意的是你的检查顺序。带文字记录的模拟面试能看出你在哪一步漏了环节。在任何实时面试中,都要遵守雇主关于 AI 工具的规定。

使用 YesToTheOffer 练习 Kubernetes 面试答案

进行模拟技术面试,讲述你的调试步骤,并在之后回顾你的记录。30 分钟免费,无需订阅。

iOS & Android — 即将推出
查看价格