来自用户的DevOps实践分享,分享从开发代码到生产环境部署的一条龙操做的实践及经验, 包含工具技术的选型及考量、私有代码库与私有镜像库的应用等。java
从互联网的屡次变革提及,早期的C/S架构,到后来的B/S架构,一直到如今最广泛的M/S架构,他们的背后都是技术不断的优化改进,以适应、促进IT技术的发展整。体而言在过去10年间,互联网技术能够说是以手工制造的方式为主,相似于传统销售、设计、制做、而后打包销售。每一个环节都须要大量的人员来操做,也须要不断有人接班学习来延续对应的环节。而将来10年将会是以流水线的方式为主 ,其主要缘由是互联网云计算技术的高速发展及可持续快速交付的业务需求。其对应的DevOps方式将完美契合。开发运维一体化确切的说是一种方式,而这种方式须要全新的技术来支撑才行执行下去,咱们将之称为下一代核心技术。mysql
传统的技术主要问题是高耦合,其耦合存在于服务器、硬件存储、内外网之间(网络通信),存在于应用程序之间、代码之间、业务模块之间。虽然通过近几年的发展,在不断的去耦合化大趋势下,已经尽量的将这几大块之间进行低耦合处理,可是因为传统技术的限制,没法从根本上解决这些问题。好比最经常使用的程序链接数据库。传统的方式多将数据库链接字符串写到程序的配置文件里,致使其链接数据库IP不能变,多节点部署程序须要一一手动修改数据库链接字符串,很是麻烦。随着技术的发展优化,有经验的研发人员会将数据库链接放到JNDI里面(如Tomcat),由中间件管理,这样将程序和数据库之间进行解耦。这也是传统技术架构经常使用的作法。可是对于多节点的部署变动,须要改变多个节点Tomcat的JNDI配置,仍是存在易用性、可维护性、可靠性方面的问题。固然也有高级别的中间件来集中解决这些问题,如WebSphere的集群管理。但这都属于为了解决问题而解决问题,受限于传统技术,没法从根因上解决各个组件、软硬件之间的耦合问题。并且须要商业付费,很是的贵。linux
下一代核心技术,受益于云计算、微服务、容器服务的高速发展,采起DevOps的模式进行整合,实现硬件服务器、存储、网络、软件程序、代码之间的全低耦合甚至0耦合,这将大大提升交付能力,下降运维成本,实现互联网产品的快速迭代。nginx
我以前的文章已经对微服务作了基本分析,本章节及后续章节会陆续对云计算的分析应用和容器服务的分析应用作逐一的讲解。微服务主要是对软件代码层面进行解耦,云计算主要从硬件支撑层进行解耦,而容器服务主要从应用层面进行解耦。容器服务的飞速发展,主要是Docker的巨大功劳,将传统的虚拟化技术带到一个全新的层面。Docker的优点在此不作多讲,主要是其原生的管理基于命令行,对于简单应用较为方便。可是在DevOps模式下就须要有一整套的规范接口来统一管理整个流水线。对于Docker容器的管理系统目前比较流行的有几个: K8S、Rancher、Shipyard等,其余还有一些不是颇有名的在此很少作列举了,你们能够自行研究学习。git
通过对比试用选型,在容器管理考虑到易用性包括跨主机通信的管理、DevOps的支持力度等方面,Rancher以各方面优先胜出。Rancher目前在开源社区很是火爆,支持众多的编排引擎,当前最新版本为 1.6.12 ,你们能够下载试用。github
安装Rancher环境,必定要在干净的linux主机上进行,避免出现因配置致使的莫名其妙的问题。服务器操做系统建议CentOS7.4(内核3.10以上),低于这个版本的系统 如7.3 7.2会报一个小bug,不过倒不影响使用,再低内核的版本就不要用了,不少都不支持。web
生产环境建议采用阿里云 Rancher(1C 2G以上的配置,若要保证运行稳定,建议配置至少2C 4G),宿主机(1C 2G以上的配置)、弹性公网EIP+ 专有网络测试,私有环境建议采用Rancher(1C 2G以上的配置),宿主机(1C 2G以上的配置)、 虚拟机(Hyper-V、VMware)+ 同一内网可通信Rancher 1.6.12 ,调度引擎选择Cattle。Rancher2.0调度引擎默认使用K8s,当前仍是测试版,官方不建议在生产环境使用。sql
root执行docker
curl https://releases.rancher.com/install-docker/17.06.sh | sh
配置加速器数据库
重启Docker服务
sudo systemctl daemon-reload sudo systemctl restart docker
登录服务器Mgr01
运行完后,就能够经过IP:8888来访问Rancher的管理台了,接下来咱们就能够点击 “添加主机” 来添加各个宿主机了
依次登录各个宿主机,执行5里面的脚本便可。
若是须要把mgr01加为宿主机,那么须要在4里面填写mgr01和ws之间互通的内网IP地址,建议不要添加mgr为宿主机,方便后续作mgr集群高可用。
Rancher有不少好玩的、强大的功能,后续咱们会逐一去发现讲解。对于DevOps来说,原来能够这么简单。
使用DevOps确定离不开和代码的集成。因此要想跑通整套流程,代码库的选型也是很是重要的。不然没法实现持续集成。目前比较经常使用的代码管理有SVN和Git,若是还使用SVN的,建议尽早迁移到Git上面,否则很费劲的。尤为是webhook,不少svn软件都不支持。
能够采用公网的GitHub,这是用的最多的,可是免费帐号仍是缺乏不少功能,收费版功能更全的,但须要考虑公司的预算。
免费版须要自行架设,Gitlab CE和Bitbucket均可以。固然这又少不了一部分维护人员、设备,从而致使增长成本。
那么既然不肯意花钱,又想要好用的,咱们就只能选型国内一些公司的Git服务了。本着代码可靠性,服务器稳定性,功能扩展性综合对比,咱们选择使用阿里云的Git库。
优势:速度快速度快,不限空间,不限项目数。能够和阿里的相关产品无缝集成。
打开 连接 自行注册便可。使用方法就不说了,和GitHub如出一辙。性能,稳定性,都比较好。最重要的是在国内,速度很是快
经过开发IDE工具,把应用代码放到Git库里面。好比我这里有个config的项目
这时候看到Git服务端已经能够作代码管理了
打开 连接 便可,有阿里云帐号能够直接登录使用
登录本身的Rancher服务器mgr和ws节点,依次执行下列配置,把本身的docker加速器配置上。
可使用docker标准的pull、push等进行镜像推拉操做。
DevOps的核心魅力是快速的持续集成交付,下降研发和实施运维之间的交互,使得传统的各类扯皮现象通通消失。最重要的是下降成本保障产品交付可靠性。
使用Rancher做为持续集成的关键环节,统一结连微服务和云计算,使得产品从研发到上线流水线操做,提升生产效率,此处我写的是微服务而不是传统的程序,是由于微服务(架构的产品)和容器服务、云计算是完美结合的三大核心模块,也是互联网下一代核心技术DevOps的3个核心支柱。而传统程序,因为在微服务架构方面转型较慢或者生态链较弱,没法完美进行DevOps。
本例集成代码采用java微服务项目,可抛弃第三方集成组件如Jenkins,简单高效。
实现提交代码,即生产发布的全自动流程 (Code->Git repository->Docker repository->Rancher->Server)
登录阿里云镜像库
选择镜像区域,如华南1.点击“建立镜像仓库”
建立:命名空间,
仓库名称:你的项目名称
源代码选择:阿里云Code或者其余的Git源
勾选:代码变动时自动构建镜像
路径:/或者你代码里Dockerfile文件的全路径
标签:latest或者自定义版本号
而后点击:建立镜像仓库
只要提交代码上来,服务器就会自动根据构建image镜像
点击刚建立的:server-config库,管理,记录下镜像库的地址,由于须要在接下来的Rancher中进行配置。
进入Rancher管理后台-基础架构-镜像库 -添加
添加成功后,Rancher就能够下载部署你的私有镜像
接下来进入Rancher管理后台 -API-WebHooks 添加一条接收器
名称:随意好记
类型:升级服务
参数格式:阿里云
标签:latest
选择器标签:update=server-config
而后点击:建立
复制保存:触发地址
再次进入阿里云Docker管理服务后台,能够看到构建里面的镜像已经构建完毕。
咱们点击webhook,新增一条记录
名称:随意
URL:刚才Rancher里面配置的触发地址
标签:latest
登录Rancher管理后台,开始部署咱们的应用
新建服务
镜像:刚创建的镜像名称
标签:update=server-config
完成后,Rancher自动拉取镜像库的镜像并部署
提交代码。查看镜像自动构建过程。完成后,查看Rancher的服务server-config自动升级。
至此,基于DevOps的全自动CI/DI发布已经实现。且不用配置Jenkins等复杂的集成组件。最重要的是:不须要本身的服务器,所有FREE。
为何要使用集中存储?使用集中存储有个很大的优点是数据安全和统一管理,和集群完美配合。产品集成存储经历
过几个阶段:
其中云计算用的最多的是 三、4,主要适应于网络架构的分布式设计和基本云计算存储,如多机房、多地存储。使用集中存储给运维带来的最大优点就是核心数据保存,不怕应用崩溃,各类docker容器均可以随时抛弃、重建而不用担忧数据问题。
Rancher对Docker集群的管理已是很是方便,默认是没有加载共享存储的,咱们这里使用Rancher NFS插件来实现一个统一的存储,固然也能够选择其余的插件,目前官方只有这一个,其余非官方的如CephFS、FastDfs等请自行添加插件或自写插件来实现,在此不作过多解读。
点击Rancher应用商店,搜索nfs,找到官方插件并添加
填写主机地址:IP
目录:建议不要填 / 而是指向NFS服务器存储的一个目录
ON_Remove: Purge: 删除映射目录时会删除NFS远程对应的数据 Retain:不删除远程数据
点“启动”便可 ,Rancher会在各个宿主机上面添加NFS驱动
查看NFS驱动,每一个宿主机都已启动完毕
使用NFS:
咱们在添加服务的时候,能够配置下卷name:/容器对应目录
填logs:/opt/logs会对应远程NFS里面新建的logs目录
若是填/logs:/opt/logs则是经常使用的卷映射,会写入宿主机本地的/logs目录
驱动填写默认的rancher-nfs
这样,容器里面读写的文件就直接操做远程Nfs服务器了
查看效果:
启动应用后,容器的日志已经输出到NFS里面了。
用途及注意事项:
主要是针对日志类的,能够统一作日志搜集。
针对于数据持久化的,如MySQL数据能够经过映射mysql/data:/var/lib/mysql把数据集中存储到NFS上
注意:
郑伟漪,深圳永达电子技术总监,负责公司互联网产品架构和研发管理。对于微服务架构开发有丰富经验,对互联网技术的发展有独到看法。曾服务神州数码(中国)、华为、银联商务等互联网产品。本文版权归做者全部,转载请后台留言。