1 - ModuleController 架构设计

介绍

ModuleController 是一个 K8S 控制器,该控制器参考 K8S 架构,定义并且实现了 ModuleDeployment、ModuleReplicaSet、Module 等核心模型与调和能力,从而实现了 Serverless 模块的秒级运维调度,以及与基座的联动运维能力。

基本架构

ModuleController 目前包含 ModuleDeployment Opertor、ModuleReplicaSet Operator、Module Operator 三个组件。和 K8S 原生 Deployment 类似,用户创建 ModuleDeployment 会调和出 ModuleReplicaSet,ModuleReplicaSet 会进一步调和出 Module,最终 Module Operator 会调用 Pod 里的 Arklet SDK 去安装或卸载模块。此外 ModuleController 还会为 ModuleDeployment 自动生成 K8S Service,企业可以监听该 Service 的 IP 变化实现与自身流量控制系统的集成,从而实现模块粒度的切流和挂流。

功能清单和 RoadMap

  • 08.15:0.2 版本上线(包括非对等模块发布、卸载、扩缩容、副本保持、基座运维联动)
  • 08.25:0.3 版本上线(包括回滚链路、各项参数校验、单测达到 80/60、CI 自动化、开发者指南)
  • 09.31:0.5 版本上线(1:1 先扩后缩、模块回滚、两种调度策略、状态回流、1+ 端到端集成测试)
  • 10.30:0.6 版本上线(支持以 K8S Service 方式联动企业四七层流量控制、总计 10+ 端到端集成测试)
  • 11.30:1.0 版本上线(支持对等发布运维、各项修复打磨、总计 20+ 端到端集成测试)
  • 12.30:1.1 版本上线(支持模块和基座自动弹性伸缩、对等与非对等发布运维能力完善)

2 - CRD 模型设计

CRD 模型对比

K8S 原生 CRDModuleController CRD关系和区别
PodModulePod:K8S 中创建和管理的、最小的可部署的计算单元。     Module:Serverless 创建和管理的、最小的可部署的计算单元。
PodSpecModuleSpecPodSpec:对 Pod 的描述。包含容器、调度、卷等。     ModuleSpec:对 Module 的描述,包含模块、服务、调度(亲和性)。
PodTemplateModuleTemplatePodTemplate:定义 Pod 的生成副本,包含 PodSpec。     ModuleTemplate:定义 Module 的生成副本,包含 ModuleGroupSpec。
DeploymentModuleDeploymentDeployment:定义 Pod 的期望状态和副本数量。     ModuleDeployment:定义 Module 的期望状态和副本数量。
ReplicaSetModuleReplicaSetReplicaSet:管理 Pod 的运行副本。    
ModuleReplicaSet:管理 Module 的运行副本。

ModuleDeployment CRD 模型

image

Module CRD 模型

image

ModuleTemplate CRD 模型

image

ModuleReplicaSet CRD 模型

image


3 - 核心代码结构

image.png

image.png


核心代码逻辑在 moduledeployment_controller.go、modulereplicaset_controller.go、module_controller.go、controller_utils.go,里面有详细注释。



4 - 模块生命周期

模块生命周期

4象限描述了模块的生命周期: Prepare、Upgrading、Completed、Available

image

模块状态机

image


5 - 核心流程时序图

模块首发

image

模块二发

image

模块下线

image

对等基座扩容

image

对等基座缩容

image