Kubernetes 经典问题
Redis 有三大缓存问题
(先对齐认知)
- 缓存穿透
- 缓存击穿
- 缓存雪崩
👉 本质:高并发 + 依赖关系 + 瞬时放大效应
Kubernetes 有哪些“典型系统性问题”?
Kubernetes 的问题不在“功能不全”,而在 规模化 + 自动化 + 分布式带来的放大效应。
- 集群一切操作变慢
- kubectl 卡顿
- Pod 创建延迟巨大
- HPA / Controller 失效
- kube-apiserver 是唯一入口
- watch/list 太多
- 控制器、Operator、CRD 过多
- 高频 List 而不是 Watch
一个组件异常 -> 触发大量重试 -> API Server 被打爆
- 大规模集群(>1000 Node)
- CRD/Operator 滥用
- 自研控制器写得不规范
- 启用 APIServer 缓存
- 合理拆分集群
- 优化控制器 Watch 行为
- 限制 QPS / Burst
👉 缓存雪崩(流量集中打到后端)
- Node 还有资源,但 Pod Pending
- 资源碎片严重
- HPA 扩容失败
- requests / limits 配置不合理
- Binpack 导致碎片
- 节点异构(CPU / NUMA / GPU)
resources:
requests:
cpu: "4"
memory: "8Gi"
👉 实际只用 0.5C
- 资源利用率低
- 扩容成本暴涨
- 精准 requests
- VPA / 推荐工具
- Pod 拆分
- 合理 Node Pool
👉 缓存击穿(热点 key 资源被锁死)
- Pod 互相 ping 不通
- Service 正常,访问失败
- Node 间通信异常
- NetworkPolicy 生效异常
- CNI 复杂(iptables / ipvs / eBPF)
- Overlay 网络
- NAT 多层
- 多组件协同(kube-proxy + CNI)
- 问题不稳定
- 重启可能“好了”
- 难复现
- 网络可观测性
- 统一 CNI
- 使用 eBPF(Calico eBPF / Cilium)
👉 缓存穿透(请求路径不可控)
- 集群整体异常
- 所有操作失败
- etcd 是唯一状态源
- IOPS / 磁盘 / 延迟敏感
- 磁盘满直接写失败
- SSD
- 定期 compaction
- 监控 db size
- 多副本
Deployment rolling update = 业务无感
- readiness 配置错误
- 连接被中断
- 负载突增
- 正确探针
- preStop
- maxUnavailable 控制
- 配置错误 -> 全集群传播
- Operator bug -> 大规模事故
Kubernetes 是一个 错误放大器
- 灰度
- 命名空间隔离
- Admission 校验
- GitOps
- 指标多但不完整
- 日志分散
- Trace 困难
👉 没有可观测性 = 盲飞
- RBAC 难理解
- Namespace 不是安全边界
- 网络、存储隔离不天然
📌 常见误区:
- “学会 kubectl = 会 Kubernetes”
- “Pod 跑起来就算稳定”
- “加副本就能抗流量”
Redis 的问题是 高并发缓存失效的瞬时冲击,
Kubernetes 的问题是 自动化、规模化下的系统性放大效应:
控制面瓶颈、资源失真、网络复杂性、状态中心(etcd)风险。