**不要**说“Pod 里只能跑一个容器”或“容器越多越好”。强调“强关联”才放一个 Pod,否则会增加调度复杂性。
---
## 问答卡片 2:Deployment & Service
### 面试问题
**“Deployment 滚动更新时,如何确保 Service 流量不中断?请说明 Deployment 的 maxSurge / maxUnavailable 参数设计和 Service 就绪探针的关系。”**
### 考察点
- 是否理解 **Deployment 滚动更新 + Service 负载均衡** 的协作机制
- 就绪探针(readinessProbe)的作用
- maxSurge / maxUnavailable 对流量中断的影响
### 回答框架
1. **核心**:Deployment 用 **ReplicaSet** 控制新旧 Pod 数量,Service 只将流量转发给 **Ready** 的 Pod。
2. **关键参数**:`maxSurge`(可超过期望数的 Pod 数)和 `maxUnavailable`(最大不可用数)。
3. **就绪探针**:新 Pod 必须通过 readinessProbe 才会加入 Service Endpoint。
4. **不断流保证**:保证 `maxUnavailable` = 0 或 `maxSurge` > 0,且每一步都保留足够 Ready Pod。
### 简短示例回答
> “设置 `maxSurge: 25%`、`maxUnavailable: 25%`,加上 readinessProbe 检测 `/healthz`。滚动更新时先启动新 Pod,待其就绪后再停止旧 Pod,Service 自动切换,流量不中断。”
### 可能追问
- “如果 readinessProbe 返回失败,Deployment 会怎么办?”
- “Deployment 回滚时,Service 需要做什么?”
- “Headless Service 什么时候用?”
### 避坑提醒
**不要**只背参数,要说出**实际经验**:比如 readinessProbe 超时设置太短会导致频繁踢出 Pod,引发抖动。推荐超时 3s、周期 5s。
---
## 问答卡片 3:Ingress & ConfigMap
### 面试问题
**“Ingress 和 Service 有什么区别?当配置下发到 Pod 后,ConfigMap 如何实现热更新?热更新有哪些限制?”**
### 考察点
- Ingress 是 **七层** 路由,Service 是 **四层** 流量分发
- ConfigMap 热更新机制(挂载 vs 环境变量)
- 热更新的局限性和风险
### 回答框架
1. **Ingress vs Service**:Service 提供集群内或 NodePort 的 L4 转发;Ingress 是 L7 入口控制器,基于域名/path 路由到不同 Service。
2. **ConfigMap 热更新**:
- 通过 **Volume 挂载**:更新 ConfigMap 后,Pod 内文件自动同步(有延时~10s)。
- 通过 **环境变量**:**不支持热更新**,需要重建 Pod。
3. **限制**:应用本身需要监控文件变化或支持 reload;同步延迟导致短暂不一致。
### 简短示例回答
> “Ingress 是七层反向代理,比如 NGINX Ingress Controller 根据 `Host: api.example.com` 路由到内部 Service。ConfigMap 挂载为卷时,更新后 Pod 内符号链接更新,但应用需要自行监听文件变化,如 Nginx 可配合 `reload`。环境变量方式无法热更新,必须 rollout restart。”
### 可能追问
- “ConfigMap 的同步延迟来源是什么(kubelet 缓存周期)?”
- “Ingress 的 annotation 可以配置哪些高级功能(限流、重写路径)?”
- “ConfigMap 和 Secret 的区别是什么?”
### 避坑提醒
**不要**以为所有应用都能自动感知 ConfigMap 变化。常见陷阱:Java 应用读取环境变量一次后不会刷新,必须重建 Pod。挂载方式也要确认应用是否监听文件变化。
---
## 本章小结
| 核心资源 | 一句话本质 | 面试高频考点 |
|---------|-----------|-------------|
| **Pod** | 共享网络/存储的容器组 | Sidecar 模式、pause 容器、生命周期 |
| **Deployment** | 声明式管理 Pod 副本与滚动更新 | maxSurge/maxUnavailable、回滚策略 |
| **Service** | 稳定的四层访问入口 | 标签选择器、ClusterIP/NodePort/LB |
| **Ingress** | 七层域名/路径路由 | 与 Service 关系、Controller 选型 |
| **ConfigMap** | 注入配置到 Pod | 热更新机制(挂载 vs 环境变量) |
> **准备方向**:
> - 动手写一个 YAML,能解释每个字段含义。
> - 准备 2-3 个真实踩坑经历(如 ConfigMap 热更新不生效、滚动更新时 readinessProbe 超时)。
> - 对比不同云厂商 Ingress Controller(ALB Ingress vs NGINX Ingress vs Istio Gateway)。