58赶集运维开发高级工程师史祥阳

  1. 项目背景

58现有的部署系统只管理线上环境,在资源和环境两个维度,分别存在以下问题:

在这个现状下,我们提出了『基于 docker 的自动化部署』项目,在不破坏现有项目管理流程的基础上,实现接管所有环境的部署,提高生产效率。

  1. 自动打包

引入 docker 技术之后,首先给开发人员带来了编写 dockerfile 的问题。为了降低使用成本,我们提供了若干标准的 dockerfile 模板,业务线 RD 同学可以根据不同业务场景选择合适的模板。同时提供标准 dockerfile 也带了其它好处,类似项目之间通用的 layer 比较多,减少了同类型集群镜像的差异性,在镜像存储,和拉取镜像的时候带来了方便。

一个典型的 dockerfile 模板如下:

运行 docker build 的时候可以加上 –build-arg 参数,给构建环境的 CACHE 变量指定不一样的值,防止后面的业务代码层被打包机缓存。

在此基础上,我们还实现了自动打包流程,在完成提测之后,触发自动打包的流程,在 kubernetes 中用跑一个 Job,完成镜像构建的步骤,同时上传本次运行日志,方便定位未知的问题。这样在部署阶段,业务线 RD 只需要选择集群名,需要部署的环境和版本号就能部署容器了。

  1. 全环境流转

目前在58赶集内部大多数业务有以下四种环境:

现有的部署系统『USP』接管了线上环境的部署,能实现自动从产品库拉取代码包,完成部署,摘流量,重启服务等操作。对于剩下三种环境,基本上是各自为政的状态,大多由RD、QA 同学手动搭建,比较混乱。

为了实现单一镜像能在不同的环境下正常生成容器,首先要解决不同环境配置文件的问题。我们写了一个切换配置文件的脚本,然后把此脚本和所有环境的配置文件在打包阶段均置入到镜像中,然后在不同环境运行时,添加代表当前环境的系统环境变量,这样在不同环境生成的容器就能启用对应的配置文件了。

  1. 测试 NGINX

由于分类信息业务的特殊性,58赶集的二级域名是城市分站缩写,不同业务需要通过 URL 来区分,所以我们可能有着业内最复杂的 NGINX 配置。对于很多业务,如果没有 NGINX 配置,直接 IP:端口 访问后端服务,是不能正常进行测试的,再加上测试环境需要频繁变更版本,还有多版本并行测试的情况,更是增加了测试 NGINX 的配置复杂程度。

测试 NGINX 的实现原理如下图:

  1. 首先借助于腾讯 TGW(可用 LVS 代替),预先申请很多 VIP 放入资源池,并将后端 RS 绑定为我们统一提供的 NGINX 机器。
  2. 测试 NGINX 是线上 NGINX 的同步实例,配置可以同步更新。
  3. 每次部署完成后,从 VIP 资源池中取出一个可使用的 VIP,记录下部署容器和 VIP 的关系;同时更新 NGINX UPSTREAM 配置。
  4. VIP 携带着集群、版本等部署信息,因为用户只面对版本号,那么容器=版本,版本=测试任务,VIP 也就携带了测试任务的信息,那么通过 VIP 就能定位到容器了。
原文:58赶集基于 Docker 的自动化部署实践  K8S中文文档推荐

58赶集基于 Docker 的自动化部署实践相关推荐

  1. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  2. 陆金所测试专家金玲谈《基于容器的自动化环境管理实践》

    金玲:大家下午好,我是来自陆金所测试部金玲,大家知道陆金所是做什么的吗?请举手示意一下.有在陆金所投资过的举手示意一下?陆金所是针对用户的个人投资理财平台,开始的时候是针对P2P起家,后来整个业务进行 ...

  3. 云服务基于DevCloud的自动化部署功能,实现快速部署网站应用

    [目的]本实验指导用户基于DevCloud的自动化部署功能,实现在CCE集群上快速部署网站应用. 云服务基于DevCloud的自动化部署功能,实现快速部署网站应用 1.资源准备 1.1.创建安全组.虚 ...

  4. 广告业务系统 之 敏捷交付 —— “基于 Docker 容器同机部署”

    文章目录 广告业务系统 之 敏捷交付 -- "基于 Docker 容器同机部署" 服务 Docker 构建及部署 代码支持 服务打包&构建 服务部署 广告业务系统 之 敏捷 ...

  5. SpringBoot | 第十四章:基于Docker的简单部署

    前言 讲解了单元测试,本章节讲讲应用的部署吧.总体而言,在进行自动化部署时,基本都会用上Jenkins+Maven+Docker进行部署.本章节主要讲解使用Maven+Docker进行SpringBo ...

  6. Docker与自动化部署

    Docker安装与基本使用 虚拟机系统centOS7 mini Docker的应用场景 1.简化配置,同一Docker的配置可以在不同 环境中使用,降低了硬件要求和应用环境之间的耦合度.  2.代码的 ...

  7. 爱奇艺基于 Docker 的 App Engine 实践

    杨成伟:大家好,我是来自爱奇艺的杨成伟,现在在爱奇艺公司内部负责弹性计算云方面的建设,之前我是做移动操作系统的,之前在因特尔做MeeGo和Python,有几年的经验,主要是在操作系统的核心层,但是是在 ...

  8. 基于云计算的自动化部署与自动化运维:提高运维效率

    作者:禅与计算机程序设计艺术 1.简介 随着互联网技术的飞速发展,网站流量日益增长,用户对网站功能及其可用性的需求也越来越高,越来越多的人开始担忧网站的安全和稳定性.因此,如何快速.准确地处理网站故障 ...

  9. 基于K8S的OpenStack部署实践

    Openstack.Docker和Kubernetes是当前IaaS和PaaS领域最为火热的技术.随着Docker容器技术的兴起,容器编排调度引擎成为当前十分抢眼的技术,这其中尤以Google开源的K ...

  10. Docker 与 DevOps自动化部署实践

    利用Docker 实现自动热部署 简单的流程 开发人员在本地完成代码开发后,提交到本地分支,利用docker模拟生产环境进行测试,测试通过后合并到远端的主分支: master 主分支一旦更新后,触发持 ...

最新文章

  1. 【飞行术】Web2.0如何改变电信业
  2. _variant_t和_bstr_t
  3. WIX(20121031) 应用设置默认变量
  4. java remove all_如何使用Java List等集合类的removeAll方法
  5. C++初始化vector<vector<int>>
  6. 基于MaxCompute+PAI的用户增长方案实践
  7. Linux install innotop
  8. thinkphp漏洞_漏洞分析之thinkPHP反序列化:这就是黑客的世界吗
  9. Python项目实践:国家财政数据趋势演算
  10. 数据库系统概论第五版_第九章:关系查询处理和查询优化
  11. [转]防火墙、防病毒网关、IDS以及该类安全产品开发(文章汇总)
  12. c 易语言置入代码6,易语言置入代码 , 谁碰到这种情况_精易论坛
  13. missing separator 解决方法
  14. Python监控动态日志
  15. 支持网络和局域网共享文件的windows pe
  16. 在.NET 6.0上使用Kestrel配置和自定义HTTPS
  17. 云展网教程 | 云展网PDF合并工具使用说明
  18. 天才小毒妃 第973章 韩芸汐,救我
  19. 北京理工大学计算机学院研究生孙灿,蒋芃_北京理工大学计算机学院
  20. ASM(六) 利用TreeApi 动态生成以及转换方法字节码

热门文章

  1. 【百度大脑新品体验】行驶证识别
  2. 解决在HD Audio模式下Windows系统前置面板耳机无声音的问题
  3. win7蓝牙热点自动断开
  4. 【ShareSDK社会化分享】新浪微博分享网络图片问题
  5. 利用DCT进行jpg压缩;对图像进行二值化【matlab代码】
  6. Bytes和bits的区别(字节和位的区别)
  7. 网络工程师需要学c语言,网络工程师需要学哪些内容
  8. 京东放大镜效果的实现
  9. 周杰伦何以成青少年偶像
  10. linux查询电脑mac地址,查看MAC地址的几种方法汇总