Kubernetes多集群管理实践踩坑实录

上个月帮华东区一家做美妆电商的团队复盘故障,聊到最后运维小哥攥着保温杯笑不出来——去年618前的一次误操作,他在三个集群的控制台之间来回切,把预发环境的限流配置错发到生产交易集群,直接导致核心下单链路被限到每秒20个请求,崩了17分钟,算下来损失快六位数。

没人天生想当背锅侠。

当时他们为了管三个集群(本地IDC跑核心交易,两个公有云集群扛峰值流量),前后换了四五个开源工具,听别人说多集群管理就是把所有集群拉到一个面板里统一管,兴冲冲折腾了俩月,结果故障反而比单集群的时候还多。

别一上来就搞全集群纳管

很多团队对多集群管理的第一反应,就是找个工具把所有集群的API Server地址填进去,看着面板上列着一排集群的节点数、Pod数,瞬间有种掌控全局的爽感。

爽完就出事。

你以为统一面板是把原来需要在三个不同控制台输入的命令、跳转的页面、核对的配置整合到一个入口省下来的半小时时间,搞不好是给全团队的误操作开了直达生产核心业务的绿色通道,连一道审批都不需要过。

我们给这个电商团队做梳理的时候,发现他们之前的权限设置完全是裸奔:所有进统一面板的账号,都有所有集群的管理员权限,开发同学改自己业务的Deployment,手滑选到旁边的生产集群namespace,配置直接就生效了。上次的限流配置误发,本质上就是权限边界没划清。

Kubernetes多集群跨环境权限隔离架构示意图
Kubernetes多集群跨环境权限隔离架构示意图

调整的方案说起来特别简单:核心生产集群单独留独立控制台,不进统一纳管面板,只有SRE团队三个核心成员有访问权限,所有变更必须走双人审批。剩下的测试、预发、弹性扩容的三个集群,才放到统一面板里,而且权限按业务团队的namespace拆分,开发只能在自己负责的namespace里改配置,跨集群的资源同步必须走流水线审批,不是在面板上点一下就完事。

就这么简单的调整,他们后来测了下,跨集群的误操作概率直接掉了90%。

配置同步不是点一下就完了

解决完权限的问题,下一个踩的坑就是配置同步。

很多团队用了统一面板之后,就想搞一套通用的配置模板,所有集群都用一模一样的资源配额、网络规则、探针配置,省得每个集群单独维护。

我当时看到他们写的同步脚本,后背都凉了。

脚本逻辑特别粗暴:把本地生产集群的所有ConfigMap、Deployment配置,直接定时同步到两个公有云集群,连个校验都没有。结果上次大促前同步的时候,把本地集群给节点设的CPU 1核的资源配额,直接同步到了公有云的弹性集群——那个集群平时要扛10倍的流量峰值,每个节点都是32核的大规格,被限到1核之后,所有业务Pod都因为资源不足被驱逐,一上流量直接打503。

说实话,这事儿真的没什么黑科技,就是把你原来在单集群踩过的坑,在跨集群同步的时候多挡一道而已。

Kubernetes多集群配置分层校验流程图
Kubernetes多集群配置分层校验流程图

我们给他们改的同步逻辑,加了三层硬校验:第一层是集群元数据校验,先读当前集群的云厂商、CNI插件类型、节点规格,不匹配的配置直接打回;第二层是资源配额校验,不同集群的节点池规格不一样,不能用同一个limit范围;第三层是灰度同步,先推到1%的节点上跑10分钟,看有没有异常日志、有没有Pod频繁重启,再全量推。

慢一点没关系。

崩一次的代价,比你多花俩小时写校验逻辑贵多了。

别迷信所谓的统一控制面

这两年去参加技术大会,总能听到厂商吹统一控制面的概念,好像只要搭一个中心控制面,就能管全球所有地域、所有云厂商的集群,点一下就能把配置发到世界任何一个角落的集群上。

真的,别被厂商的PPT忽悠瘸了。

去年我们碰到一个做跨境服饰的团队,用了某商业厂商的统一控制面,中心节点放在国内,管着欧洲区域的两个海外集群。结果有次跨境网络抖动,控制面和海外集群的连接断了快俩小时,本来要下发的版本更新配置直接丢了,导致欧洲站的服务版本比预期落后了两个迭代,差点被当地的合规部门开罚单。

跨地域、跨网络域的集群,本来就不应该全量挂在一个中心控制面下面。你把所有集群的连接都挂到一个中心节点,等于把所有鸡蛋放一个网兜里,网兜破了全掉地上。

我们给这个跨境团队做的调整,就是按地域拆控制面:国内的集群用一个中心控制面,欧洲的集群单独部署一个本地的轻量控制面,两个控制面之间只做状态数据的同步,不做实时的配置下发。所有跨地域的配置变更,都要走两个控制面的流水线审核,就算某一个控制面挂了,另一个区域的业务完全不受影响。

Kubernetes跨地域多集群双控制面拓扑图
Kubernetes跨地域多集群双控制面拓扑图

算过账的,多部署一个控制面的服务器成本,连一次跨地域网络故障损失的零头都不到。

前阵子碰到那个美妆电商的运维负责人,说今年618大促,三个集群扛了平时12倍的流量,没出一次跨集群的配置错误。他说现在再也不用半夜开三个浏览器窗口切控制台了,泡在茶水间啃粽子的时候,手机上的告警都没响过。

其实哪有什么一劳永逸的多集群管理方案啊。

无非是把每个可能踩坑的地方,提前用规则挡上而已。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:Kubernetes多集群管理实践踩坑实录
文章链接:https://www.itcdj.com/it/143.html