首页 / it.itcdj.com / 正文

Kubernetes多集群管理实践一线踩坑笔记

上周帮苏州一家做跨境电商的团队排障,三个运维小伙子围着屏幕骂了半小时——他们把东南亚节点的流量切错集群,大促开场十分钟丢了三百万的GMV。

搁三年前,这个团队全公司就跑一个Kubernetes集群,两百台节点塞了四十七个微服务,某次apiserver证书轮转操作失误,直接把控制面打挂了三小时,全公司业务停摆,老板在高管群里@所有人,运维总监那段时间掉的头发,凑起来能做个小拖把。

为什么你迟早要拆成多集群

很多人觉得多集群管理是大厂的专属玩具,中小团队凑合用单集群就够了。真不是。只要你业务跨了两个物理可用区,或者碰到跨境数据合规要求——比如东南亚用户的数据不能存到国内节点,单集群根本兜不住。

别等控制面挂到全公司瘫了才想着拆。多集群的核心诉求从来不是“看起来架构先进”,是真的能把故障的爆炸半径缩到最小。之前那个跨境电商团队的单集群,一次节点升级操作失误,能把整个交易链路打挂,拆成两个集群之后,哪怕一个集群的控制面全瘫,剩下的那个至少能扛住核心的下单流程,不至于连门都开不了。

跨境电商Kubernetes多集群流量调度拓扑图

别上来就抄大厂的作业

我见过太多团队,一提到多集群管理,第一反应就是上Karmada、上Cluster API,搞统一的全局控制面,做跨集群的资源调度、应用下发。结果团队拢共三个运维,连单集群的SOP都没跑顺,硬啃三个月复杂的平台,最后搞出来的东西开发根本用不明白。

就说去年碰到的一个做SaaS的团队,硬上Karmada搭了统一控制面,每个应用的多集群部署规则写了几十页注释,开发每次发版要填三页审批单,协调三个集群的资源配额,光流程走完就要两天。最后实在扛不住,又退回去用简单的Shell脚本批量发版,之前搭的平台扔在服务器上积灰。

别贪多。真的。

中小团队一开始拆成两个集群就够了,一个跑核心交易,一个跑边缘用户端,别一上来拆七八个集群,最后光集群的生命周期管理就能把人耗死。那些大厂的多集群方案,背后是几十人的平台团队在托着,你三个人的小团队,学人家的架构深度,纯粹是自讨苦吃。

真正落地时要抠的几个细节

多集群落地从来不是搭完控制面就完事,很多细节没抠到,最后迟早要踩大坑。

别图方便把所有集群的身份权限全打通。之前有个团队为了省事,把五个集群的RBAC全接到同一个OIDC身份源,没有做单独的权限边界,某次一个开发的测试账号泄露,黑客直接把五个集群的etcd数据全删了,恢复数据花了整整两天。哪怕你用同一个身份提供方,也要给每个集群单独配好权限范围,跨集群访问的凭证要做短有效期,自动轮转,别拿个永久有效的token到处用。

别追求所有资源在多集群之间实时同步。比如配置密钥、业务配置这些,同步慢个十几秒根本不影响业务,但是流量切分的规则、核心的服务配置,必须在每个集群本地留兜底。别全靠中心控制面下发规则——万一控制面跟各个集群的网络断了,每个集群至少能按照最后收到的规则正常跑,不至于全瘫。

还有监控,别一上来就搞全集群统一的Prometheus联邦。先把每个集群的本地监控做扎实,告警能直接发到对应集群的运维负责人手里,不然等统一监控平台挂了,你连哪个集群出问题都找不到。

上周跟那个跨境电商的团队复盘,他们现在把原来的单集群拆成了两个,没有上什么重型的多集群管理平台,就是用简单的GitOps流程,每个集群独立维护自己的部署清单,跨集群的流量用DNS做智能解析。上周大促,两个集群各自扛了一千两百万的GMV,一点问题没有。

技术这东西,适合自己的,永远比看起来高级的靠谱。