乐趣区

关于paas:京东MPaaS平台之Android组件化系统私有化部署改造实践

零碎上云是科技企业及传统企业降本增效、协同办公等无效的助力形式。本文将京东 M -PaaS 平台下的 Aura 平台(Android 组件平台)在 T -PaaS 环境进行私有化部署革新的历程记录下来,分享给大家。

京东 M -PaaS 平台是企业级挪动研发平台,联合“京东系”APP 研发的教训积攒与最佳实际,为挪动开发提供一站式解决方案。Aura 是 M -PaaS 平台下 Android 方向的组件化、模块化解决方案,提供高效解耦、并行开发、独立调试、疾速构建、灵便集成等能力。

T-PaaS 平台是京东进行私有化部署的根底环境,旨在模仿各种 PaaS 利用更容易的在各种客户环境中进行商业化输入。 其接入标准齐全遵循云原生规范,保障 PaaS 服务能容易与生态利用、客户业务协同配合,以云原生的容器及 operator 的形式实现应用逻辑,并以 Helm 规范的形式打包,在 Kubernetes 之上对立部署和治理。

需要剖析及计划选定

1/ 需要剖析

需要:将现有外部的平台零碎 Aura 在 T -PaaS 平台上进行部署。

剖析:T-PaaS 平台是以 Kubernetes 进行容器的编排部署和治理 Docker 容器的,Aura 私有化部署须要解决以下问题:

  • 编译各组件 Docker 镜像
  • 基于 Kubernetes 撰写 K8s 编排文件
  • 在 T -PaaS 平台上进行部署

2/ 计划抉择

1) 现有计划

根底技术组定义出一套规范的接入形式,简化了 Docker 及 K8s 的相干内容学习。基于规范计划,可实现前后端的疾速的私有化部署,节俭研发同学在运维方面的学习老本。规范接入计划解决了以下几个重要的问题:

  • 基于规范模版主动生成 Dockerfile
  • 参数配置化
  • 编译镜像自动化

2)计划抉择

基于现有计划只可能满足前后端的镜像生成及相干性能部署,对于简单 CI/CD 流程或基于简单根底环境容器,无奈生成 Dockerfile。然而 Aura 平台的零碎架构较简单,现有计划无奈满足私有化计划革新。基于现有计划进行定制化革新,在工夫老本和人力老本上都有较大的投入,基于以上起因,京东 Android 组件化零碎私有化部署须要另辟蹊径,升高革新的门槛,晋升开发效率。

具体革新实现计划

Aura 平台的零碎架构基于 Kubernetes 革新计划如下:

1/ 镜像划分

Aura 平台的零碎架构:

依照以上架构分为三个镜像:

  • Aura2Web:蕴含前端,后端
  • Aura2JenkinsMaster:任务调度器
  • Aura2JenkinsSlave:CI 构建节点

因为 Aura2Web、Aura2JenkinsSlave 应用到的根底环境较为简单,依赖第三方软件较多,决定基于 Centos7.2 编写自定义 DockerFile,进行镜像输入。

2/DockerFile 编写概述

基于 Centos7.2 编写 DockerFile,总结了相干开发 Docker 的教训。编写 DockerFile 须要留神的以下内容:

  • 抉择最精简的根底镜像
  • 缩小镜像的层数
  • 清理镜像构建的两头产物
  • 留神优化网络申请
  • 尽量去用构建缓存

基于 Centos7.2 装置以下相干软件:JDK,nginx,Python,Maven,Git,Tomcat,JQ 等。业务源码到二进制包再到镜像:镜像是为了运行咱们本人的服务,所以须要把平台包放到镜像中,这个须要制订一个规定,不便记录从源码到镜像这一过程,并且可追溯。

定制规定如下:

前端:

  • 前端应用的是 Vue,须要进行编译构建,将构建后的产物放到镜像中;
  • 首先在源码中打 Tag,Push 到服务器,由 WebHook 钩子触发继续集成,编译出前端;
  • 将前端的产物打成 zip 包,放到京东的云存储上,记下链接地址备用。

后端:

后端须要进行混同加密,加密后的产物同理打成 zip 包,而后将其放到京东的云存储上,记下链接地址备用。

3/ 对立配置化革新

镜像中的代码应用到的配置文件较多,譬如 Aura2Web 镜像就达到 6 个之多。所以统一化治理配置文件显得尤为重要,通过钻研发现,confd 软件非常适合此场景,助力配置化高效率革新,具体用法如下:

Confd 简介:

Confd 是一个轻量级的配置管理工具。通过查问 Etcd 或其它后端,联合配置模板引擎,能够放弃本地配置最新,同时具备定期探测机制,配置变更主动 reload。其后端反对的数据类型有:Etcd、consul、vault、environmentvariables、redis、zookeeper、dynamodb、stackengine、rancher。不过个别应用 Confd 和 Etcd 的配合应用比拟多。

Aura 零碎用不着后端配合,只须要应用它的模板渲染,进行对立配置管理即可。

Confdg 应用步骤如下:

第一步:confdg 下载

下载 confd 的二进制文件,下载地址为:https://github.com/kelseyhigh…

第二步:将 confd 放到镜像中,间接在 dockerfile 中加上如下语句

1 RUN set -ex 
2 && wget http://$storage_domain/our-tools/confd 
3 && mv ./confd /usr/bin 
4 && chmod a+x /usr/bin/confd

第三步:创立 confd 配置文件和模板文件

如图所示,依据您的须要,可创立多个配置和模板,但它们要一一对应起来。

举例:frontend_domain.toml

1
2 [template]
3 src = "frontend_domain.template"
4 dest = "/opt/servers/nginx/conf/domains/frontend_domain"
5 keys = [
6 "/aura/frontend/domain_inner",
7 "/aura/frontend/domain_outer",
8 ]

Frontend_domain.template

1 server
2 {
3 listen 80;
4 server_name {{getv "/aura/frontend/domain_inner"}} {{getv "/aura/frontend/domain_outer"}};
5 ...
6 }

第四步:在 dockerfile 中将配置文件和 template 文件 copy 到镜像中

1COPY render /etc/confd

第五步:在 entery 的 shell 脚本中执行生成实在的配置文件

1 /usr/bin/confd-onetime -backend file –file ${config_file_path

4/ 波及到的中间件配置

1)数据库

参考 T -PaaS 的文档,将须要配置的 Host 等在本机配好,登录 phpmyadmin.tpaas.local(用户名明码从文档中取得)。建设新数据库,并自定义数据库名称,假如这里取名为:auradb。下载之前建好的 Aura 的初始化 sq,导入 sql。记录以下信息,后续放入 configMap。

  • 网址和端口号
  • 数据库名
  • 用户名明码

2)GitLab

参考中间件信息的网址,找到 GitLab 网址,登录网站,应用中间件信息上提供的用户名明码或新建一个账号,这里示例新建一个账号:aura,明码为:xxxxx,记录下来,后续放入 configMap。

3)Maven 私服 (NexusRepository OSS)

参考中间件信息的网址,找到地址和用户名明码,登录。

建以下两个仓库,(创立时参数 deployment policy 抉择容许上传)

  • libs-releases-local
  • libs-snapshots-local

开明匿名拜访权限,如已开明则疏忽,建用户并记录其账号和明码,后续放入 configMap。

4)云存储 (minio)

  • 参考中间件信息的网址,找到地址和用户名明码;
  • 登录并创立须要的 bucket,并配置拜访策略为读 / 写;

5)双域名革新

因为私有化客户的环境分为内外环境,所以平台拜访的域名分为内外域名,服务间调用应用外部域名,用户能间接拜访的应用内部域名。双域名革新的关键点就是将服务分类,哪些是只用外部服务调用的,哪些还须要用户间接调用,剖析分明后,间接在 configMap 中增加对应的 Key 值,并革新 Confd 的配置,适配相干域名。例如在 Confd 章节中举例的的前端域名配置。

6)K8s 编排文件

镜像文件生成之后,接下来就该编写 K8s 的编排文件了,而后就能够将镜像部署到 K8s 平台上了。须要配置的有以下编排文件:

  • configMap
  • ingress
  • service
  • deployment
  • PersistentVolumeClaim

configMap 次要作用就是将须要配的参数对立放到这里,而后传给镜像中的 confd 进行渲染配置。

PersistentVolumeClaim 次要用于内部挂载文件或目录,挂载 AndroidSDK,这样多个构建节点能够共用 SDK,节俭了空间。

JenkinsSlave 镜像将会应用挂载的 PVC 做为 Android SDK 的输出。多个 JenkinsSlave 节点会共用同一份 PVC 中的 Android SDK,以节俭存储空间。

PVC 挂载目录为 /usr/local/aura/auraCfs,也可将其挂载到其它目录 (例如 /mnt/auraCfs),而后将 /usr/local/aura/auraCfs 作为软链。

解压 SDK 文件,文件有两个:

  • aura-Cfs-mini-without-gradlecache.tar.xz
  • aura-Cfs-mini-with-gradlecache.tar.xz

它们两个的区别差了一个 14G 左右的 gradle cache。cache 可应用也可不应用,如不应用则会主动从网络下载,只是会缩短第一次构建的工夫。

步骤如下:

  1. 将文件 xz 解压到 PVC 的根目录即可;
  2. 抉择应用 gradle 缓存;
  3. 能够应用预置的 gradle 缓存来放慢首次的构建速度,也可不应用预置缓存,而是在构建过程中主动从网络下载依赖的包。如要应用 Grade 缓存,依照以下步骤操作即可;
  4. 保障 JenkinsSlave 镜像中有短缺的存储空间(大于 200G);
  5. 应用 with-gradlecache 的压缩包;
  6. 在 PVC 盘的根目录下新建一个空文件 use_gradle_cache;
  7. 解压结束后,镜像启动脚本会输入:“Gradle UserHome 缓存复原实现”。

经验总结

本篇文章次要介绍了 Aura 平台(Android 组件平台)拆分成 Docker 镜像,并进行镜像编译和部署的过程。在私有化部署的过程中,三个要点总结如下:

1)   Dockerfile 编写及镜像编译

2)   配置的对立治理

3)   K8s 的编排文件编写

其余平台如有基于本文中所波及到的雷同需要,能够重点把握以上关键点,顺利推动私有化革新部署落地。

M-PaaS 是京东云技术中台(T-PaaS)家族的产品之一,技术中台(T-PaaS)是京东多年数字化技术的最佳实际和技术积淀。为企业客户提供 16 大类,通过大规模严苛生产验证的全栈 PaaS 服务。

举荐浏览

  • 30 天如何实现超级 APP 从 0 到 1 开发?京东 mPaaS EMOP 最佳示范来了

欢送点击【 京东科技 】,理解开发者社区

更多精彩技术实际与独家干货解析

欢送关注【京东科技开发者】公众号

退出移动版