| 阅读 | 共 3722 字,阅读约
一、业务场景和现状分析
1. 目前房角石所处的角色
2. 完整的部署流程
目前真正到客户现场实施私有化的产品有:
- bimface:在没有房角石之前,就有一套自己的部署方案。房角石出来后,也没有真正用起来。
- geps:没有房角石之前,手工部署过。房角石出来后,使用房角石部署过好几家。
- 施工:房角石做出来后,才开始到用户现场做私有化部署
执行的操作 | 公有云部署 | 私有化部署期望提供该功能的客户 | 施工私有化部署 | bimface私有化部署 | 没有房角石时geps的实现 |
---|---|---|---|---|---|
k8s集群安装 | 买实例 | 施工3+8、geps | 使用房角石 | (没有用到) | 手工部署 |
jdk安装 | 手动部署一次 | bimface、施工筑联 | shell脚本 | (没有用到) | |
mysql安装 | 买实例 | 施工3+8、bimface | 使用房角石 | shell脚本 | (没有用到、安装在容器中) |
存储安装(对象存储minio、块存储nfs) | 手动操作 | 施工3+8、bimface | 使用阿里云oss | shell脚本部署minio | 手动部署nfs |
mysql数据初始化 | 运维mysql审核平台 or 手动操作 | 施工3+8 | shell脚本 or 手工 | 1. 第一个版本:shell脚本 2. 后续版本:代码自动实现 | 1. 第一个版本手动初始化2. 后续版本:代码自动实现 |
对象存储初始化:创建bucket | 手动操作 | 施工部分产品、Bimface | shell脚本 or 手工 | shell脚本 | |
对象存储初始化:往bucket插入初始数据 | 手动操作 | 施工部分产品 | 服务部署成功后,调用api实现 | ||
mongodb初始化 | 手动操作 | 施工部分产品 | |||
apollo初始化 | 手动操作 | 施工部分产品 | 手动修改 | ||
zookeeper初始化 | 手动操作 | 施工部分产品 | |||
nginx初始化 | 手动操作 | 施工部分产品 | 手动修改 | 手动修改 | |
服务配置文件初始化 | 手动操作 | 施工、bimface | 手动修改 | ||
部署服务 | jenkins or 手动 | 所有产品 | shell脚本 | shell脚本 | 手工部署 |
部署后的数据初始化 | 手动操作 | 施工、bimface | 服务部署成功后,调用api实现 |
3. 应用的部署方式
部署方式 | 期望提供功能的客户 | 施工实施私有化的实现 | 没有房角石时bimface的实现 | 没有房角石时geps的实现 | 分析 |
---|---|---|---|---|---|
k8s-yaml | 施工3+8、geps | 手动部署 | 不需要 | 手动部署 | k8s作为云原生时代的操作系统,业务迁入k8s必然是将来的趋势 |
k8s-helm | AECore | ||||
jar | AECore、Bimface、建设方、电子政务 | shell脚本启动 | 公司大部分产品还没有容器化,jar包部署会是常态 | ||
war | Bimface老版本 | shell脚本启动 | 技术栈比较老的产品,这种产品应该比较少 | ||
docker | 筑联平台(新的可能已经改造成k8s-yaml) | 筑联还未私有化 | docker本身不具备编排能力,而服务一般不会简单就一个镜像,预计单独通过docker动服务应该比较少 | ||
docker-compose | 房角石 | 对于一些并没有完全改造为k8s,docker-compose具备编排能力,能满足大部分想往容器化改造、且不是单体应用的产品。这种客户应该也不少 | |||
python | AECore | ||||
nodejs | AECore | ||||
shell | bimface |
二、房角石的定位
1. 房角石目前持续提供的能力
- 私有云、中间件部署
2. 房角石的职责边界包括上述哪些内容?
- 负责数据初始化吗?还是借鉴bimface和geps方案,业务自己做改造,通过代码自动实现?
- 应用部署是只提供执行命令的通道?还是针对大部分部署方式提供通用操作?
3. 业务线面临什么问题 vs 谁能解决这些问题
面临的问题 | 现有工具如何解决 | 房角石应不应该解决 |
---|---|---|
将上述流程串联起来的流水线 | jenkins等 | 比jenkins优势在哪?集中式管理、数字化运营 |
诸多私有化客户的管理:项目、主机、服务版本、部署脚本等 | 无 | 应该 |
版本不断迭代带来的数据(sql、nginx、业务配置)变更问题 | 脚本化 | 不应该。作为通用系统,不应该帮业务去写脚本,应该实现通用功能 |
版本不断迭代带来的服务部署问题 | jenkins | 比jenkins优势在哪 |
数据回滚(sql、nginx、业务配置等) | ||
服务回滚 | ||
灰度发布 |
三、常见部署工具 vs 能解决哪步业务问题
1. 工具对比
工具名称 | 核心功能 | 概述 | 特点 | 能解决上述哪一步 | 不支持上述哪些步骤 | 语言 | 其他说明 |
---|---|---|---|---|---|---|---|
Jenkins | 流水线 | 1. 一款由Java编写的开源的[持续集成(ci、cd)工具2. 用于自动化各种任务,包括构建、测试和部署软件 | 1. 丰富的插件生态 2. 支持SCM(git、svn等)3. 支持手动触发和自动触发 | 串联流水线 | java | 使用最广泛,腾讯coding平台ci基于此开发 | |
阿里云效 | devops平台 | 云原生时代新DevOps平台,支持公共云、专有云和混合云多种部署形态 | 1. 从代码到部署的整个生命周期2. 丰富的任务模板,几乎囊括所有常见的ci、cd步骤3. 漂亮的可视化界面 | 1. 串联流水线2. 所有应用部署 | 1. 数据初始化 | 付费产品 | |
腾讯蓝鲸 | 云平台 | 包括一整套全家桶:BK-CI(ci\cd)、BK-BCS(微服务编排平台)、BK-BCS-SAAS(容器平台)、BK-PAAS(应用开发平台)、BK-SOPS(运维平台) | 1. Cmdb配置管理平台-golang 2. paas平台-python,vue 3. ci平台-kotlin,lua,go,java4. Bcs-saas云容器管理平台:python,go5. ops运维平台:python 6. bcs容器管理平台:go | ||||
腾讯coding平台 | devops平台 | 基于jenkins做ci基于spinnaker做cd | |||||
Tekton | 流水线 | 是一个功能强大且灵活的开源框架,用于创建CI / CD系统,允许开发人员跨云提供商和本地系统构建,测试和部署 | |||||
Spinnaker | 流水线 | 是一个开源的持续交付平台,使开发人员能够拥有从提交到交付的应用程序代码 | 专注于多云平台的CD | 腾讯coding平台的持续部署功能基于这个组件做的二次开发 | |||
Jenkinsx | 流水线 | ||||||
Drone | 一个容器原生的持续交付平台 | ||||||
ArgoCD | k8s应用部署 | 声明式、gitops持续集成工具。中文文档 | 可在 Git 存储库更改时自动同步和部署应用程序。应用程序定义,配置和环境应该是声明性的,并且受版本控制。应用程序部署和生命周期管理应是自动化的,可审核的且易于理解的。1. 自动部署k8s应用到指定环境2. 支持多种k8s部署方式:yaml、helm、kustomize等 3. 支持多集群部署4. 支持服务回滚、健康检查 5. 支持监控 | 1. 不支持jar、docker等其他部署方式 2. 不处理数据和配置初始化 | go,k8s的crd | ||
skaffold | gitops | Easy and Repeatable Kubernetes Development | Skaffold 是一款命令行工具,旨在促进Kubernetes 应用的持续开发。你可以在本地迭代应用源码,然后将其部署到本地或者远程Kubernetes 集群中。Skaffold 会处理构建、上传和应用部署方面的工作流。它通用可以在自动化环境中使用,例如CI/CD 流水线,以实施同样的工作流,并作为将应用迁移到生产环境时的工具 |
||||
flux | gitops | The GitOps Kubernetes operator | 是一个通过git管理和同步Kubernetes部署状态的支持GitOps的工具,用于完成Docker镜像库与Kubernetes运行时的CD(持续交付)阶段工作的自动化 | ||||
rancher | k8s应用部署 | ||||||
openpitrix | k8s应用部署 | 多云环境应用管理平台 | 企业可能有各种类型的应用需要管理,包括传统的应用,像数据库、Tomcat、Hadoop,还有基于微服务架构的应用、以及近来发展迅猛的 Serverless 应用等。企业需要一个可以管理不同类型应用程序的一站式管理平台。基于 OpenPitrix 可以将任何应用以任何规模部署到任何基础设施上面,对开发者来说就是 Build once and run anywhere。 | Go | 房角石很多功能是对标openpitrix去设计的,但是只学到了皮毛 | ||
walle | 通用应用部署 | Devops开源项目代码部署平台 | 1. 支持多项目、多环境一键部署上线,一键快速回滚2. 上线单申请、审核、部署、实时操作日志3. 支持多个hook点,可以在部署前后插入自定义逻辑 | 1. 串联流水线 | python,fabric | github上关注度挺高的,但是2020年好像就没再维护了,好多issue上的bug无人问津 | |
公司神州发版平台 | 非k8s应用部署 | 公司运维维护的一个部署系统 |
2. 工具特性总结
- 所有工具都不提供数据初始化等有业务特性的操作
- 工具主要聚焦于两类
- 流水线流程把控
- 服务细粒度部署:初次部署、增量部署、回滚、持续部署等
3. 各个平台的定位
4. 蓝鲸全家桶介绍
项目名称 | 项目代号 | 对标产品 | 简介 | 特性 |
---|---|---|---|---|
持续集成平台 | Bk-ci | jenkins | 是一个免费并开源的 CI 服务,可助你自动化构建-测试-发布工作流,持续、快速、高质量地交付你的产品。它是企业 IT 管理体系的核心,通过提供配置管理服务,以数据和模型相结合映射应用间的关系,保证数据的准确和一致性; | 工程编译 静态代码检查 运行测试用例,及时发现 BUG 部署与发布。提供了流水线、代码库、凭证管理、环境管理、研发商店 5 大核心服务 |
配置平台 | CMDB | 阿里云 | 构建其它流程的基石,而在蓝鲸智云体系里,配置平台就扮演着基石的角色,为应用提供了各种运维场景的配置数据服务。 | 自定义配置模型(CI)管理 Web 可视化的业务拓扑 全面的 API 服务 自动发现和主机快照 支持跨云管理 动态查询分组 对外开源 |
容器管理平台 | rancher | 同华为云的ccs容器管理控制台 | 集群创建、集群管理、容器编排配置模板、容器视图、容器操作、镜像管理、网络管理 | |
作业平台 | Job | 基于蓝鲸智云管控平台 Agent 管道之上,提供基础操作的原子平台;具备上万台并发处理能力,除了支持脚本执行、文件拉取 / 分发、定时任务等一系列基础运维场景以外,还支持通过流程调度能力将零碎的单个任务组装成一个自动化作业流程;而每个任务都可做为一个原子节点,提供给上层或周边系统/平台使用,实现跨系统调度自动化。 | 执行脚本,分发文件 |