第4章 Kubernetes集群高可用架构设计
高可用设计决策矩阵
| 维度 | 关键组件 | 典型技术选型 | 常见陷阱 |
|---|---|---|---|
| 控制面 | API Server / etcd / Controller Manager | 3~5节点 etcd集群 + HAProxy + kube-vip | etcd成员数偶数导致选主失败 |
| 数据面 | Pod / Service / Ingress | PodAntiAffinity + PDB + ClusterAutoScaler | PDB未设置 minAvailable 导致滚动更新阻塞 |
| 灾难恢复 | etcd快照 / Velero / 跨集群迁移 | 每小时快照 + 异地对象存储 | 未定期演练恢复流程 |
| 可观测性 | Prometheus / Grafana / Alertmanager | 混合云统一告警 + 故障自愈 Pipeline | 告警规则过于粗粒度导致“告警风暴” |
📌 面试问题 1
问题:请设计一个生产级 Kubernetes 集群的高可用架构,集群规模约 2000 节点,横跨 3 个可用区。
面试官考察点:是否理解控制面与数据面解耦、etcd 容错模型、跨 AZ 流量成本。
回答框架:按五步法:①场景:2000 节点,管理面压力大,需拆分 etcd 与 kube-apiserver 层;②控制面:每 AZ 部署 1 个 Master 节点,共 3 节点 etcd 集群(奇数),使用 VIP+keepalived 实现 API Server 高可用;③数据面:PodAntiAffinity 跨 AZ 部署,设置 PDB 保证最小可用数,HPA 基于自定义指标;④灾难恢复:etcd 快照每 5 分钟存储到跨区域 S3;⑤可观测性:Prometheus + 大屏 + 故障自愈脚本。
可能追问:etcd 集群网络延迟过大怎么办?Master 节点故障时 kubelet 如何感知?
📌 面试问题 2
问题:假设 etcd 集群出现频繁 Leader 切换,你会如何排查与解决?
面试官考察点:对 etcd 内部机制(Raft、磁盘IO、网络)的掌握,以及排错方法论。
回答框架:①检查 etcd 指标(disk fsync duration、network latency);②检查磁盘 IO 压力(是否与其他高 IO 应用共享磁盘);③检查网络抖动(多 AZ 延迟);④调整参数(heartbeat-interval、election-timeout);⑤升级硬件或拆分 etcd 集群。
可能追问:etcd 的数据库大小超过 2GB 会产生什么问题?如何 compaction?
📌 面试问题 3
问题:如何设计跨可用区的 Pod 调度策略,以保证业务在 AZ 故障时仍能维持服务?
面试官考察点:对 Pod 调度策略(反亲和、拓扑分布约束)、PDB、以及优雅降级的理解。
回答框架:①使用 topologySpreadConstraints 实现 zone 级别均匀分布;②设置 PodAntiAffinity 避免同一应用集中;③为每个 Deployment 设置 PDB,minAvailable 设为 50% 或略低;④配合 Cluster Autoscaler 跨 zone 扩容;⑤使用 region 级别 Service Mesh 实现流量切换。
可能追问:如果两个 AZ 同时故障,怎么保证数据不丢失?只读业务如何降级?