多云容器编排 Karmada-Operator 实践( 三 )

多云容器编排 Karmada-Operator 实践
文章插图
【多云容器编排 Karmada-Operator 实践】如上图所示,主要是karmada控制平面生命周期管理,对比当前社区的部署工具我们如下优化:

  1. 标准化证书管理,主要是用openssl生成证书 。其中etcd和Karmada证书单独分开维护,和k8s集群证书命名相同,方便接入我们的监控 。
  2. Karmada-apiserver支持外部负载均衡,不限于当前的k8s service提供的负载均衡 。
  3. 更灵活的升级策略,支持单独组件升级和全量升级 。
  4. 更丰富的全局变量定义 , 计划支持组件配置变更等 。
2.6 etcd集群管理
多云容器编排 Karmada-Operator 实践

文章插图
etcd集群是Karmada的元数据集群,生产中需要保证etcd集群高可用和故障恢复等 。如上图展示了etcd集群必要的生产要素 , 如自动扩缩容、升级、备份和etcd集群的故障恢复 。自研了基于ansible的plugins和library, 实现etcd集群管理能力如下:
  1. 添加member到存在的etcd集群 。
  2. etcd集群删除member 。
  3. etcd集群的备份,比如支持cephfs的数据备份 。
  4. etcd集群故障恢复 。
  5. etcd集群健康状态查询 。
这里定义了etcdBackup和etcdRestore的CR,没有合并到KarmadaDeployment里 。主要考虑到etcd集群本身操作的安全性和简化KarmadaDeployment的ansible任务 。其中etcdRestore功能,可以根据etcd集群备份数据 , 实现导入到新的etcd集群,从而恢复Karmada集群所有的业务状态 。当前主要场景如下:
  1. Karmada集群所在的机房裁撤,需要备份etcd数据,迁移到新的Karmada集群 。
  2. 期望通过Karmada-Operator管理Karmada集群,只需备份etcd数据,实现etcdRestore功能即可 。
  3. Karmada集群故障,可以通过etcd备份数据,结合etcdRestroe实现故障恢复 。
2.7 member集群管理
多云容器编排 Karmada-Operator 实践

文章插图
member集群的生命周期管理主要有注册和注销 , 上图是执行的流程 。为了处理member集群的注册和注销 , 这里会动态的生成inventory 。Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的 。
这里Karmada-Operator基于k8s的CR实现了动态inventory plugins , 主要通过解析KarmadaDeployment的members定义去动态的生成inventory 。这里添加了add-member和del-member 2个角色, add-member里集群会被注册到Karmada控制平面,del-member里的集群会被从Karmada控制平面注销,这样就可以并发的注册和注销多个member集群 。同时也可以提供ssh登录模式,方便后期扩展 。
三、Karmada-Operator的CI介绍
多云容器编排 Karmada-Operator 实践

文章插图
为了更好的提高开发人员的体验,计划提供Karmada-Operator的CI构建能力 。这里在K8s集群里部署github的self-hosted Runner和kubevirt 。
  1. 用户在github上提交PR
  2. 触发github Actions , 我们在self-hosted里定义的流程
  3. 执行语法和单元测试
  4. 通过kubevirt创建vm
  5. 在多个vm里部署1个host和2个member集群
  6. 部署Karmada和添加member集群
  7. 执行Karmada e2e和bookfinfo案例测试
计划添加的CI矩阵测试如下:
  • 语法测试:
  • ansible-lint
  • shellcheck
  • yamllint
  • syntax-check
  • pep8
  • 集群部署测试:
  • Karmadactl、charts、yaml和二进制部署和所有配置项安装测试
  • join/ unjoin member 集群
  • 升级Karmada
  • etcd集群的备份和恢复
  • 功能测试:
  • Karmada e2e测试
  • 创建bookinfo案例
  • 性能测试:
我们主要通过kubemark组件模拟了多个2000节点的member集群进行了性能测试,其中一个测试案例是集群故障转移,结论是4w个无状态pod能够在15分钟完成故障迁移,有机会可以分享我们的性能测试 。
四、总结通过社区的调研和vivo的实践 , 最终确定了Karmada-Operator方案设计 。Karmada-Operator具有高度可扩展性、可靠性、更直观地编写操作逻辑和开箱即用等特点,我们相信通过这种高度可扩展的声明式、自我修复云原生系统管理Karmada,为我们全面切换到Karmada去管理业务提供了强有力可靠保障 。

推荐阅读