Kubernetes 跨集群 Pod 可用性保护
出处:
mp.weixin.qq.com
作者:
字节跳动技术团队
多集群部署微服务带来了可扩展性和容灾性等优势,但也引入了全局层面的脆弱性——中心控制平面的任何问题都会级联影响所有被管理集群,造成灾难性后果。其中最严重的场景之一是由于Pod删除导致的服务容量丢失。这在Kubernetes复杂的事件链中可能由多种原因引发,例如: 意外删除所有Deployment的owner资源类型的CRD 集群拓扑配置错误,导致用其他集群的spec覆盖当前集群 多集群滚动更新实现缺陷,同时在所有集群触发更新 联邦主集群的etcd磁盘损坏,导致Deployment对象从索引中移除 多个集群同时独立进行Pod驱逐操作,并发度不受控 虽然这些问题均可单独解决,但成因多样且在持续变化的基础设施中难以穷举。更便捷的方式是采用端到端处理:只要全局要求未满足就阻止Pod删除。因此我们开发了Podseidon项目——当跨集群的最小可用性要求不满足时,拒绝删除请求的准入webhook。