3.9 KiB
id, title, type, domain, stack, tags, level, related, week
| id | title | type | domain | stack | tags | level | related | week | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| devops.k8s.interview | Kubernetes 基础面试题 | interview | devops |
|
|
basic |
|
|
Kubernetes 基础面试题
基础
【基础】Pod、Deployment、Service 是什么关系?
参考答案:Pod 运行容器;Deployment 管理一组相同的 Pod(副本数、滚动更新、回滚),通过 ReplicaSet 实现;Service 通过标签选择器找到这些 Pod,提供稳定的访问地址和负载均衡。
追问:Pod 的 IP 能直接用吗?→ 不建议,Pod 重建后 IP 会变,应通过 Service 名访问。
【基础】readinessProbe 和 livenessProbe 的区别?
参考答案:就绪探针失败时 Pod 从 Service 端点中移除但不重启,用于“暂时不能处理请求”;存活探针失败时重启容器,用于“进程卡死”。慢启动应用再加 startupProbe。
追问:存活探针为什么不能检查数据库?→ 数据库故障时所有 Pod 会被同时重启,问题不能解决反而扩大。
【基础】ConfigMap 和 Secret 的区别?
参考答案:都用于注入配置;Secret 用于敏感信息,有单独的权限控制,可以配置静态加密,但其 YAML 中的数据只是 base64 编码,不能提交到仓库。
追问:生产环境密钥怎么管理?→ 使用外部密钥管理系统同步到集群,或平台提供的加密方案;做好轮换和访问审计。
进阶
【进阶】滚动更新如何做到不中断服务?
参考答案:maxUnavailable: 0 保证可用数量;就绪探针确保新 Pod 准备好才接流量;旧 Pod 优雅退出:先摘除端点(preStop 等待),应用处理 SIGTERM 完成进行中的请求,宽限期足够长。
追问:发布后发现问题怎么办?→ kubectl rollout undo 回滚到上个版本;更好的做法是灰度发布(金丝雀)观察指标后再全量。
【进阶】Pod 一直 CrashLoopBackOff,怎么排查?
参考答案:kubectl describe pod 看事件和退出码;kubectl logs --previous 看崩溃前日志;常见原因:配置或密钥缺失、启动命令错误、依赖连不上、存活探针过早失败、OOMKilled(退出码 137)。
追问:镜像拉取失败显示什么状态?→ ErrImagePull / ImagePullBackOff,检查镜像名、标签和拉取凭证。
【进阶】requests 和 limits 有什么区别?
参考答案:requests 是调度依据(保证分配的资源),limits 是上限:超过内存上限会被 OOMKill,超过 CPU 上限会被限流。两者关系决定 QoS 等级。
追问:CPU 一定要设 limits 吗?→ 有争议:设置后可能出现限流导致延迟抖动;很多团队只设 CPU requests 和内存 limits,按团队规范执行。
场景题
【场景题】AI 服务每次发布,用户的流式回答都会中断,怎么解决?
参考答案:优雅退出:就绪探针在退出时立即失败、停止接新请求、等待流结束;preStop 留出摘除时间;宽限期大于最长回答时间;maxUnavailable: 0;Ingress 关闭缓冲。前端也可以实现断线提示和重试。详见 Agent 上 K8s 场景。
追问:怎么验证改好了?→ 在测试环境持续发起长回答请求的同时执行滚动更新,统计中断数为 0。
【场景题】HPA 配置了 CPU 70% 扩容,但高峰期 AI 服务很慢却没有扩容,为什么?
参考答案:AI 服务大部分时间在等待模型响应(I/O),CPU 不高;应该用反映负载的指标:进行中请求数、队列长度、首 token 延迟,通过自定义指标扩容;同时检查是否被上游模型的限流卡住(扩容也没用)。
追问:扩容太慢怎么办?→ 提高最小副本、缩短启动时间(镜像体积、预热)、根据可预期的高峰提前扩容。