2020年,机器上线需要在八个服务间反复横跳,而且全程手动操作。伴随滴滴业务规模上云,弹性云新增大量物理机,上线操作至少有百次,这时暴露了一个问题:如果按这个速度上线机器,需要大量人力投入到上机器中。因此,弹性云急需一个平台来管理宿主的上下线。
从无到有
DevOps,标准先行
在 DevOps 实践中,标准化是非常重要的一环。弹性云的所有机器都是围绕服务树管理的。由于之前是由人工管理,弹性云机器在服务树上的挂载情况非常混乱。因此,为了机器管理更标准,弹性云首先定义了服务树节点标准和规范,将宿主机生命周期与服务树节点进行关联。具体而言:
机器上线:机器由 backup 节点挂载到 kube-node-init 节点初始化,然后挂载到线上 kube-node 节点进行报警关联;
机器维修:线上机器挂载到 maintain 节点进行维修,维修完成挂载 kube-node-init 节点进行上线;
机器下线:容器漂移后,线上机器挂载到 pre-offline.backup 节点进行关机退换。
流程拆解,需求分析
标准定义好后,就是对平台需求进行分析,我们首先将宿主机上线、下线和维修的流程进行拆解,如下图所示:
通过分析拆解后的流程,我们得出机器管理平台至少需要具备以下功能:
整个流程耗时较长且为流式任务,所以任务需要异步执行。
平台依赖许多第三方服务,需要支持跳过、重试、暂停等功能,以灵活应对下游异常场景。
各流程之间有重复的步骤,步骤需要能被自由组合,以提升程序的灵活性。
按照 double-check 原则,任务需要以工单形式展现。
架构设计,代码开发
在软件开发中,程序分层是一种常见的软件架构模式,它可以使软件系统更模块化、可扩展和易于维护。需求明确后就可以进入开发流程,从平台的产品形态来看,平台将来的使用流程是:用户创建工单,审批通过后用户执行工单,程序感知到执行动作,执行任务,程序实时反馈任务进度,任务异常时通知用户,用户介入处理,任务执行完成后,工单结束。因此,