Files
zhuangang/topics/devops/k8s/interview.md
T

3.9 KiB
Raw Blame History

id, title, type, domain, stack, tags, level, related, week
id title type domain stack tags level related week
devops.k8s.interview Kubernetes 基础面试题 interview devops
k8s
Kubernetes
探针
滚动更新
排查
面试
basic
devops.k8s.core-objects
14
16

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 延迟,通过自定义指标扩容;同时检查是否被上游模型的限流卡住(扩容也没用)。

追问:扩容太慢怎么办?→ 提高最小副本、缩短启动时间(镜像体积、预热)、根据可预期的高峰提前扩容。