首页 > 数据库 > 数据库开发技术 > 云原生技术15-你的K8s集群真的高可用吗?5个必做的容灾检查,从单点故障到“永不宕机“的架构进化,三Master + 负载均衡 + etcd集群:生产级K8s部署指南
1、
2、
Controller Manager & Scheduler:选主机制
5、
6、
7、
8、
9、
你是否遇到过这样的噩梦场景?
💡 效率技巧:生产环境的高可用不是可选项,而是必选项。就像你不能指望一台服务器永远不死机,也不能指望单Master的K8s能扛住生产流量。
本文将给出经过验证的K8s高可用架构方案,让你的集群真正做到"永不宕机"。
先来看一张完整的架构图,理解各个组件是如何协同工作的:
| 组件 | 数量 | 作用 | 高可用机制 |
|---|---|---|---|
| Master节点 | 3+ | 控制平面 | 多副本+负载均衡 |
| etcd | 3或5 | 数据存储 | Raft共识算法 |
| Worker节点 | 3+ | 工作负载 | 多可用区部署 |
| 负载均衡器 | 2+ | 流量入口 | Keepalived VIP漂移 |
⚠️ 避坑警告:很多新手以为只要Master有3个节点就高可用了,结果etcd只部署了1个。记住:etcd是K8s的心脏,心脏停了,大脑(Master)再聪明也没用。
etcd存储了K8s的所有状态数据:Pod位置、Service配置、Secret、ConfigMap……可以说,etcd挂了,整个集群就失忆了。
etcd使用Raft算法保证数据一致性。核心规则:
💡 效率技巧:etcd集群成员数量必须是奇数(3、5、7…)。偶数节点在故障时更容易出现"脑裂",而且不会提高容错能力。
⚠️ 避坑警告:etcd快照备份必须定期进行,并存储在集群外部(如对象存储)。我见过太多人把备份放在etcd节点本地,结果节点挂了,备份也没了。
API Server是K8s的"前台接待",所有操作(kubectl、控制器、调度器)都要通过它。实现高可用的关键是:多副本+负载均衡。
这两个组件不能同时运行多个活跃副本,否则会出现冲突。K8s通过Lease机制实现选主:
💡 效率技巧:故障切换时间可以控制在30秒以内。Keepalived的VRRP协议默认1秒宣告一次,3次未收到宣告就认为Master挂了,VIP漂移到备机。
⚠️ 避坑警告:不要把所有Worker节点放在同一个可用区!我见过某云厂商可用区故障,导致用户整个K8s集群瘫痪的案例。至少跨2个可用区部署,最好是3个。
💡 效率技巧:集群联邦不是银弹,它增加了架构复杂度。如果你的业务不需要跨地域部署,单集群+多可用区就够了。不要为了技术而技术。
| 层级 | 工具 | 备份内容 | 频率 |
|---|---|---|---|
| 集群状态 | etcd快照 | 所有K8s资源 | 每小时 |
| 应用数据 | Velero | PV数据、应用配置 | 每天 |
| 底层存储 | 云厂商快照 | 磁盘快照 | 每天 |
⚠️ 避坑警告:备份不是目的,恢复才是。定期做恢复演练!我见过太多人备份了几年,真正需要恢复时才发现备份文件损坏或无法使用。
关注此系列获取后续更新,后台回复**‘k8sha’**获取本文完整配置脚本和架构图。
你的K8s集群做过故障演练吗?如果现在就拔掉一台Master节点的网线,你的业务能撑多久?欢迎在评论区分享你的容灾方案。
K8s高可用不是简单的"多部署几台机器",而是一个系统工程:
| 层级 | 关键措施 | 目标 |
|---|---|---|
| etcd层 | 3/5节点Raft集群+定期快照 | 数据零丢失 |
| Master层 | 多副本+负载均衡+Leader选举 | 99.99%可用性 |
| Worker层 | 多可用区+Pod反亲和性 | 故障自动恢复 |
| 应用层 | 健康检查+优雅退出+重试机制 | 用户体验无损 |
| 备份层 | etcd快照+Velero+云快照 | 可恢复性 |
记住:高可用是设计出来的,不是运维出来的。在架构设计阶段就考虑容错,比故障发生后再救火要有效得多。
标签:Kubernetes高可用 etcd集群 Master高可用 负载均衡 集群联邦 容灾备份
参考文档:
原文作者:每日干货分享;如有侵权,请联系管理员删除。