企业持续交付平台方案_第1页
企业持续交付平台方案_第2页
企业持续交付平台方案_第3页
企业持续交付平台方案_第4页
企业持续交付平台方案_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、技术创新 变革未来企业持续交付平台方案目录企业持续交付简介1统一构建平台设计2Jenkins on K8s 实践3问题与改进4 企业持续交付背景8000+ 应用3000+ 研发6000+ 发布/天 持续交付的意义效率提升质量保障安全可靠团队协作流程透明 持续交付流程 分支模型管理master release/20181010 feature/1feature/2 hotfix/1v1.1 v1.0v1.0.1什么是版本?Git Tags源码Packages源码 + 代码依赖Images源码 + 代码依赖 + 环境依赖 部署模型演进以前201520162017虚拟机单机多应用虚拟机单机单应用胖容

2、器单机单应用MesosK8s2018OpenStack Group一组暴露同一服务的集合拉入拉出Group 中的某个成员是否接收请求堡垒机生产环境 Group 中第一台被发布验证的机器点火应用初始化、预热、加载数据等部署过程分批同一 Group 分成多个批次进行滚动部署降级部分依赖系统发生故障后发布系统可忽略刹车当发布失败机器数量大于一定比例则停止发布 回滚稳定的符合预期的回滚逻辑部署过程拉出堡垒机部署堡垒机点火部署剩余批次成功成功成功需要刹车?发布停止发布成功是 否拉入堡垒机测试验证多环境测试环境, 生产环境多类型Docker, VM, BM多平台OpenStack, Mesos, K8s多

3、数据中心私有云, 公有云资源管理 FAT-n环境管理FATFWSLPTUATPROFAT-2FAT-1性能测试用户验收测试生产环境功能测试LPT-nLPT-2LPT-1 更加稳定的 FAT目录企业持续交付简介1统一构建平台设计2Jenkins on K8s 实践3问题与改进4 开箱即用成熟稳定插件丰富社区活跃强大的 PipelineJenkins 的优势 单点故障与单机性能Jenkins 的不足 Keepalived + Virtual IPGearman PluginJenkins on Mesos/K8sCloudBeesJenkins Master HA 方案 Master 拆分策略By

4、 environmentBy org chartBy product linesProsCan tailor plugins on masters to be specific to that environments needsCan easily restrict access to an environment to only users who will be using that environmentCan tailor plugins on masters to be specific to that teams needsCan easily restrict access t

5、o a divisions projects to only users who are within that divisionEntire flows can be visualized because all steps are on one masterReduces the impact of one masters downtime on only affects a small subset of productsConsReduces ability to create pipelinesNo way to visualize the complete flow across

6、mastersOutage of a master will block flow of all productsReduces ability to create cross- division pipelinesNo way to visualize the complete flow across mastersOutage of a master will block flow of all productsA strategy for restricting permissions must be devised to keep all users from having acces

7、s to all items on a master.来源 https:/jenkins.io/doc/book/architecting-for-scale/ Number of Jobs = Number of Developers * 3.333Number of Masters = Number of Jobs/500Number of Executors = Number of Jobs * 0.03预估 Job, Master 和 Executors 的数量来源 https:/jenkins.io/doc/book/architecting-for-scale/ 构建系统现状120

8、00+ 构建/天210000+ Jobs320+ Masters20+ 类型 构建系统架构API 层负责接收各类 构建请求Worker 层负责 Job调度 Job Division Strategies队列按照 app 或者 project 进行分割Job Template每种 Job 都由数据库中的队列模板动态创建与更新,队列模板支持版本化的提交,可进行灰度发布与快速回滚LabelingJob 与 Master 都带有标签,Job 可以通过标签找到符合条件的 MasterSharding每个 Master 可以配置容量,新建Job 时按照 Master 容量配置比例进行ShardingFai

9、lover每个 Job 至少有两台满足条件的 Master,构建系统实时对Master 进行健康监测,故障时Job 自动转移到其他健康的 Master构建系统特点 操作系统层面CPU, Mem, Disk, Network 等指标应用系统层面API, Worker 与 Jenkins 的可用性与异常情况业务逻辑层面构建队列是否有堵塞 系统容量是否到达瓶颈Pipeline 关键 Step 是否超时监控与告警 构建系统界面 目录企业持续交付简介1统一构建平台设计2Jenkins on K8s 实践3问题与改进4 Jenkins 集群演进以前201520162017虚拟机Master and Sla

10、ve胖容器Master and Linux Slave胖容器Windows SlaveK8sMaster and Linux Slave Jenkins on K8sSlave 弹性调度Workspace 保留问题12 Slave 弹性调度构建数量容器数量根据构建的频繁程度, 为不 同类型的 Slave 配置不同 的 PodIdleMinutes 参数 控制 Slave 保留时间 Slave Provision 时间优化initialDelay: Jenkins 启动留给静态 Slave 连接的时间decay: Jenkins 负载统计公式 “指数移动平均值(EMA)” 中的平滑指数:0 +

11、(1 )判断是否应该创建 Slave: 1 ( = m 的计算公式: + (0 ) . (DECAY, ) Slave Provision 时间优化经常有 Slave 的创建时间超过 5 分钟! kubernetes-plugin: src/main/java/org/csanchez/jenkins/plugins/kubernetes/pipeline/PodTemplateStepEx ecution.java#start jenkins: core/src/main/java/jenkins/model/Jenins.java#966jenkins: core/src/main/jav

12、a/hudson/slaves/NodeProvisioner.java#861遍历 Labels 运行 Provision 轮训逻辑, 而第 一次新建 Slave 时不会更新 Labels 集合Jenkins 每隔 5 分钟更新一次 Labels 集合在插件创建 Slave 时主动调用 reset 方法Workspace 保留问题为什么?用户需要在 Slave 被回收后依然可以在 Jenkins 上 面查看 Workspace, 并且可以减少源码下载次数如何实现?让 Slave 与 Master 在同一个 Node(nodeSelector) 且 共享同一 Workspace, 通过 Mas

13、ter 查看 Workspace遇到问题?一个 Job 在同一时间只能在一个 Master 中运行如何解决?构建系统实现同一个 Job 对于多个 Master 并发构建 的调度/var/lib/jenkins/workspaceJenkins MasterMount/var/Jenkins-master-1/workspace/var/jenkins_home/workspaceJenkins SlaveNode StatefulSet 管理 Master使用 StatefulSet 管理 Jenkins Master 集群降低 维护成本StatefulSetMasterSlaveSlaveM

14、asterSlaveSlaveMasterSlaveSlaveMasterSlaveSlaveNode NodeSticky Scheduler让 Master Pod 固定分配 到指定的 Node 上 CHostpath Volume Driver/var/lib/k8s/storage/chostpath/$(NAMESPACE)/$(RESOURCE_TYPE)/$(RESOURCE_NAME)/Pod/$(POD_NAME)/$ (VOLUME_NAME)按照规则自动创建 Pod的挂载目录 Jenkins Master 启动过程创建 StatefulSet创建 Pod运行 Entrypoint创建 Volume创建

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论