68 lines
3.9 KiB
Markdown
68 lines
3.9 KiB
Markdown
---
|
||
id: devops.k8s.interview
|
||
title: Kubernetes 基础面试题
|
||
type: interview
|
||
domain: devops
|
||
stack: [k8s]
|
||
tags: [Kubernetes, 探针, 滚动更新, 排查, 面试]
|
||
level: basic
|
||
related: [devops.k8s.core-objects]
|
||
week: [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 场景](scenarios/agent-rollout.md)。
|
||
|
||
**追问**:怎么验证改好了?→ 在测试环境持续发起长回答请求的同时执行滚动更新,统计中断数为 0。
|
||
|
||
### 【场景题】HPA 配置了 CPU 70% 扩容,但高峰期 AI 服务很慢却没有扩容,为什么?
|
||
|
||
**参考答案**:AI 服务大部分时间在等待模型响应(I/O),CPU 不高;应该用反映负载的指标:进行中请求数、队列长度、首 token 延迟,通过自定义指标扩容;同时检查是否被上游模型的限流卡住(扩容也没用)。
|
||
|
||
**追问**:扩容太慢怎么办?→ 提高最小副本、缩短启动时间(镜像体积、预热)、根据可预期的高峰提前扩容。
|