DockOne微信分享(一二七):Docker的另类用法,就是这么简单粗暴

本文讲的是DockOne微信分享(一二七):Docker的另类用法,就是这么简单粗暴【编者的话】现在业内一提到Docker就必然说到Kubernetes、Mesos。然后就提到重写Kubernetes、Mesos,优化Ubuntu内核等等。作为一个资源紧缺的使用者我只能表示用不起。我就是喜欢把事情简单化,用最小的力气做事。简单粗暴没什么不好。

【3 天烧脑式容器存储网络训练营 | 深圳站】本次培训以容器存储和网络为主题,包括:Docker Plugin、Docker storage driver、Docker Volume Pulgin、Kubernetes Storage机制、容器网络实现原理和模型、Docker网络实现、网络插件、Calico、Contiv Netplugin、开源企业级镜像仓库Harbor原理及实现等。

我说另类是指我就用了原生的功能,这些对我们来说基本够用了。还省去了很多开发维护的工作量。

1. 最小化的使用Docker,保证资源利用最大化和服务分钟级切换。

现在业内一提到Docker就必然说到Kubernetes、Mesos。然后就提到重写Kubernetes、Mesos,优化Ubuntu内核等等。作为一个资源紧缺的使用者我只能表示用不起。那么真的需要这么用吗?Docker自带的工具可以吗?

其实我们经常处于消费过剩,需求过剩的状态。很多需求都是伪需求,没必要什么都做到100%。为了达到这目标需要的资源比做到70%要多几十倍。我们使用工具目标是用最少的投入来解决问题。简单粗暴没什么不好。

首先我们使用Docker是为了解决服务稳定性和资源紧缺的问题。现存很多关键系统(非生产)都跑在古老的服务器上,说挂就挂。很多系统跑在VM上,宿主机资源不足。说不定突然VM就崩了。甚至于宿主机直接挂了,再也启动不了。想上新系统,机柜也没空间。所以为了保证这些系统的稳定和高效,就决定把这些系统迁移到Docker系统。

先用一批新机器安装Docker,配成Swarm集群。然后把用的服务一个个做成image,上传到集群上的Docker Hub。所有服务的端口全部固定,人为错开。网络全部使用Host模式。所有的数据全部从外部存储挂载。就是这么简单粗暴。

然后把所有服务启动在Swarm上,看看负载情况,不行就手动指定机器。全部启动完成后,把IP和Port填入DNS和Nginx。其他人就可以通过域名来访问到对应的服务。如果服务挂了,重启这个服务,然后修改对应的DNS和Nginx。如果服务代码变了,直接JENKINS编译出新版本image到Docker Hub。停服务,拉镜像,重启,修改DNS,这些都可以通过脚本完成。

下一步在所有镜像里添加自主开发的Agent来完成服务监控,完成服务自发现。再加上服务监控。基本就可以用一段时间,不用折腾了。

这个方案的缺点就是如果是JIRA这种有License的软件,必须手工重新去获取机器信息,然后重新申请License。不过正常情况服务就这么起个一年,也不用管它。系统监控通过Zabix和我们自己开发的Agent来进行。也能满足日常监控需求。

这样搭建整个环境,2个人搞两周就行了。

2. 中等规模测试环境Docker的规划,环境网络隔离及持续集成。

因为我们是金融公司,所以目前生产系统还没有打算上Docker。在测试环境还是可以用Docker的。

由于多个测试环境需要互相隔离,而且服务一般都部署在80端口,所以就要比前一个用法进阶一点了。用Contiv进行VLAN的隔离。各个环境互相隔离。IP也自动分配,不用自己管了。服务启动后自己上报信息,修改DNS和Nginx的信息,内部外部都可以访问。

针对不同的测试环境建不同的Jenkins,可以产生对应的镜像部署到对应的测试环境。缺点是不能做到按需建立和销毁环境。那个还需要进行很多开发工作。整个Docker的动态伸缩也没在考虑过程中。毕竟规模不大。预先划分出5,6套测试环境足够使用。

这样就把整个CI内置到测试环境中了。

Q&A

Q:请问从开始看Docker到完成环境搭建大概用了多长时间?

A:前期的学习和选型用了2个月。后面基础搭建用了1个月,耗时最长的是旧服务的Docker化,这个到现在还没全部完成,因为技术债太多。

Q:可以说明下为什么生产环境不用Docker吗,跟你们是金融公司属性有什么关系?

A:因为金融公司对于稳定性有非常高的要求,同时对于生产服务器数量和空置率又不敏感。所以Docker这样的新技术应用还是需要不会那么快切入。同时运维团队也要去学习,技术储备等都是阻碍。所以现在很多银行也只是在周围不重要,变化频繁的系统开始尝试Docker。

Q:主要想了解下你们集成的流程?

A:CI的流程和普通的CI类似。代码变动后触发Jenkins,Jenkins会编译,打包,产生一个对应的发布单元的新容器版本。然后触发对应的脚本来停服务,取镜像,启动容器。

Q:为什么不考虑在私有云平台上玩?

A:因为资源限制,从硬件及人力上都不足。另外就几十台服务器,没必要。如果有几百台就要考虑资源调度等因素。

Q:请问容器做编排管理,你们选用什么工具

A:我们只用了原生的Swarm。这样不用考虑开源软件二次开发及工具间的版本兼容问题。

Q:如何让宿主机挂载到存储之后,让容器全部跑在存储里面?

A:容器本身还是在Docker主机的磁盘中,但其他数据:例如配置文件都是从SAN上挂载到容器中。这样保证如果Docker主机down了,容器可以在其他主机上重启恢复。

Q:z387的ip如何分配?

A:Contiv会帮你分配IP的,不用自己管理。

Q:为什么把JIRA也Docker?

A:因为资源不足,没有强大的主机来跑JIRA,也没有办法主备。所以干脆把这些重要系统都放到容器里。这样就可以用较少的主机来保证性能和可用性。

Q:镜像带环境变量属性吗?

A:看情况,我们跑自动化测试的镜像有环境变量属性,因为有很多可变参数。

Q:如果服务挂了,重启服务。重新修改DNS和Nginx,问题1:服务挂了,Swarm可以负责重启吧?问题2:为什么重启后需要改DNS Nginx。Swarm的ingress网络可以从任何一台node路由到对应的Container吧。

A:如果镜像down了,Swarm会管理的。但如果是服务不可用,Swarm是不知道的。这时候就需要在服务监控那里触发重启。由于服务还有端口的问题,所以是在Nginx上转发到真实的服务端口上。DNS基本都是配置到Nginx上,如果Nginx挂了,就要把DNS重新指向。

Q:应用是Java的吗,根据环境不同的配置文件如何处理?

A:大部分是Java的,也有Python等。我们自己开发了一套配置文件管理的系统,同时对配置文件里的配置项进行命名规范,这样从一套环境到另一套大部分情况是直接自动进行修改的。

Q:如何做多版本环境隔离测试?

A:目前我们没有这样的需求。测试环境基本上都是和生产对齐。特殊情况是在Jenkins上来选择特定的代码版本来进行部署。所以在不同的环境里可以部署不同的代码。

Q:请问Ngin配置的是Container的IP还是物理机IP?

A:Nginx是暴露出80端口在容器宿主机上的。

Q:不同环境的配置文件是在镜像层面替换进去还是在容器层面替换进去

A:是在容器层面的。每个容器上有个Agent,负责去拉取配置文件。

以上内容根据2017年06月20日晚微信群分享内容整理。分享人寿佳炎,盛付通质量流程中心经理。在通信和互联网跌打滚爬近20年。几乎干过研发体系内各种岗位。从初级码农到管理层。中国第一批EXIN DEVOPS MASTER认证通过者。 DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesa,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。

原文发布时间为:2017-06-22

本文作者:寿佳炎

原文标题:DockOne微信分享(一二七):Docker的另类用法,就是这么简单粗暴

时间: 2024-10-23 10:46:55

DockOne微信分享(一二七):Docker的另类用法,就是这么简单粗暴的相关文章

DockOne微信分享(一二一):喜马拉雅FM测试环境的Docker化实践案例

本文讲的是DockOne微信分享(一二一):喜马拉雅FM测试环境的Docker化实践案例[编者的话]随着容器技术的流行,作为线上应用Docker的铺垫,喜马拉雅FM从16年开始推进测试环境Docker化.本次分享将重点为大家介绍我们在Docker化的过程中如何进行技术选型.环境搭建,特别是实践中碰到的一些问题及其解决方案. [3 天烧脑式 Docker 训练营 | 上海站]随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛.本次培训我们理论结合实践,从Docker应该场景.持续部

DockOne微信分享(一一零):Docker在沪江落地的实践

本文讲的是DockOne微信分享(一一零):Docker在沪江落地的实践[编者的话]容器化是很多公司技术层向往又惧怕的一项热门技术,它的高效性,封装性能给开发.运维带来许多便利,但其本身也需要较强的技术能力去控制,否则会变成一个无法落地的概念.沪江作为教育界的独角兽,随着业务的增长,在开发.测试.运维上的成本增加日益显著.经过我们一年的探索,终于使Docker技术在沪江落地,不但成功的降低了成本,并吸引了其他部门的关注与试用,取得良好的成效. [上海站|3天烧脑式微服务架构训练营]培训内容包括:

DockOne微信分享( 八十九):恒生金融交易系统的Docker化实践

本文讲的是DockOne微信分享( 八十九):恒生金融交易系统的Docker化实践[编者的话]Docker可以显著改善企业软件研发流程.提升企业DevOps效率.借助Docker,企业可以对现有IT系统进行一次梳理,解决IT软件系统部署.升级难的顽疾,重新释放企业生产力,降低企业成本.本次分享介绍了恒生电子运用Docker技术,加上自研配套工具,实现金融交易系统配置.部署.运维自动化的心得,包括: Docker的优势以及我们为什么要使用Docker: 恒生Docker运用现状: 恒生金融交易系统

DockOne微信分享(八十七):基于Docker的开发云提高资源利用率的实践

本文讲的是DockOne微信分享(八十七):基于Docker的开发云提高资源利用率的实践[编者的话]Docker的出现,为更简便.更细粒度地对云资源的调控提供了一个强有力的支撑,WeX5开发者云基于Rancher+Docker,在如何提高物理资源利用率的课题上做了一些探索和研究,在保障用户体验良好的前提下,大大提高了物理资源的利用率,有效地降低了运营成本. 一般情况下,开发者从无到有开发一个可用于公网访问的HTML5的App应用的流程是这样的:配置开发环境.开发应用.本地调试.租用公网服务器.注

DockOne微信分享(八十四):Docker在B站的实施之路

本文讲的是DockOne微信分享(八十四):Docker在B站的实施之路[编者的话]B站一直在关注Docker的发展,去年成功在核心SLB(Tengine)集群上实施了Docker.今年我们对比了各种Docker实施方案后选择了Mesos.结合CI&CD,打通了整个业务的Docker上线流程,并实现了全自动扩缩容.这次结合我们的实施之路,分享一下遇到的重点与难点: 自研Docker网络插件的介绍: Bili PaaS平台中的CD实现与优化: 应用全自动扩缩容的实现方案: Nginx动态Upstr

DockOne微信分享(一三二):58 赶集基于 Docker 的自动化部署实践

本文讲的是DockOne微信分享(一三二):58 赶集基于 Docker 的自动化部署实践[编者的话]随着 58 业务的发展,机器和服务数量也日益庞大,在多环境下,服务的管理和依赖难以维护.基于 Docker 带来的技术红利,我们借助 Docker 和 Kubernetes 提供了镜像的自动打包,单一镜像在测试-沙箱-生产-稳定四个环境的流转,以及测试环境统一的 Nginx 入口.至此,开发同学可以不再为资源和环境问题困扰,提高了生产效率. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训

DockOne微信分享(七十一):基于Docker的负载均衡和服务发现

本文讲的是DockOne微信分享(七十一):基于Docker的负载均衡和服务发现[编者的话]Docker已经成为时下热门的容器技术,各大公司,中小创业者,都选择采用Docker技术架构其下一代的系统和应用. 随着系统规模扩大,单一Docker容器不能应对压力,需要横向扩展到多个容器,我们需要考虑负载均衡的问题:单一职责的Docker容器之间需要相互通信,而容器在每一次重启之后,它的IP都可能发生变化,那么服务和服务之间如何发现对方? 这一次我们一起来交流基于Docker的负载均衡和服务发现.内容

DockOne微信分享( 九十三)魅族云Docker实践

本文讲的是DockOne微信分享( 九十三)魅族云Docker实践[编者的话]介绍魅族云的场景需求,如何引入Docker,在网络.存储.镜像技术的选择,如何落地的等等.主要内容: 魅族云业务场景 魅族云Docker化设计理念 网络.存储.镜像技术的选择 Docker化落地情况 1.魅族云业务场景 魅族云的需求场景可以分为以下几大块: 镜像需求:应用想上Docker就需要镜像,我们跟业务运维一起定好镜像的Dockerfile,push到镜像仓库,这个私有仓库存储了公司内部使用的所有镜像.然后我们会

DockOne微信分享( 八十八):PPTV聚力传媒的Docker与DevOps

本文讲的是DockOne微信分享( 八十八):PPTV聚力传媒的Docker与DevOps[编者的话]DevOps是2009年前后提出的一个概念,提倡开发(Development)和运维(Operations)这两个领域的高度协同.从而在完成高频率部署的同时,提高生产环境的可靠性.稳定性.弹性和安全性.本次分享介绍了PPTV聚力传媒以Docker技术为支撑,在DevOps方面做的优化,包括: DevOps简介 Docker在PPTV的应用 DevOps与Docker的结合 实现方案 DevOps