Kubernetes 进阶
核心之外的工程能力:健康检查、自动扩缩、流量入口、有状态应用。
探针:健康检查
| 探针 | 检查什么 | 失败动作 |
|---|---|---|
| livenessProbe | 进程还活着吗 | 重启容器 |
| readinessProbe | 能接收流量吗 | 从 Service 摘除 |
| startupProbe | 启动完成了吗 | 延迟其他探针(慢启动应用) |
readinessProbe:
httpGet:
path: /healthz # 真实依赖检查(见系统设计健康检查篇)
port: 8000
initialDelaySeconds: 5
periodSeconds: 10要点:readiness 和 liveness 分开(启动慢 ≠ 死掉);探针要反映真实能力(连得上 DB)。
HPA:水平扩缩
HPA: 指标驱动副本数
- HPA(HorizontalPodAutoscaler)按指标自动调副本数
- 常见指标:CPU 利用率、QPS(自定义指标)、队列长度
- 无状态应用才能自由扩缩(状态外置,见系统设计水平扩展篇)
- 缩容要稳定窗口(防抖动)
Ingress:七层入口
- Ingress:集群入口路由(域名 → 服务),替代一堆 NodePort
- 基于 Nginx/Envoy 等 Ingress Controller 实现
- 能力:域名路由、TLS 终止、路径重写、限流(对应 L7 负载均衡,见系统设计篇)
存储:PV/PVC
- 容器文件系统是临时的(Pod 重建即丢)
- PV(持久卷):存储资源(云盘/NFS);PVC:使用声明
- 无状态应用别用存储(扩容麻烦);有状态应用(数据库)用 StatefulSet
StatefulSet
| 维度 | Deployment | StatefulSet |
|---|---|---|
| 身份 | Pod 随机名 | 稳定网络标识(固定序号) |
| 存储 | 共享/临时 | 每个 Pod 独立 PVC |
| 顺序 | 并行 | 有序启停 |
| 适用 | 无状态 | 数据库、有状态服务 |
StatefulSet 让数据库上 K8s 成为可能(但生产数据库仍倾向托管服务,运维复杂度高)。
面试追问
- 三种探针? liveness(活没活)、readiness(能接流量没)、startup(启动完没)。职责分离
- readiness 失败会怎样? 从 Service 摘除,不重启。liveness 失败才重启
- HPA 怎么扩缩? 指标对比期望值,自动调副本。无状态才能自由扩缩
- Ingress 是什么? 七层入口:域名路由、TLS、限流。基于 Nginx/Envoy
- StatefulSet 和 Deployment? 稳定身份 + 独立存储 + 有序启停。有状态应用用