利用docker将传统企业集中式架构转换为微服务架构的实践经验

环境:企业环境,内网与外网隔离,有严格的网络访问策略和系统使用监控要求,直接与考核挂钩。同时企业内对敏捷的要求提升。鼓励使用微服务体系架构提升开发、部署、运维的效率,降低操作风险。

硬件环境:X86服务器和非开源操作系统

操作系统:suse 12 sp4。docker-ce社区。有docker-ee,但是版本较低,有些特性不好用。

一、基础设施体系结构设计

    企业本身从集中式架构转换过来,因此本来就有很多设备,如服务器、存储、SAN等。这些设备老板的意思大概率是要利旧,豪爽的老板不多见,反正我们老板听说要买新的就眉头紧锁。所以设计的时候把成本作为重要的因素考虑,保持原有的架构不变,增加微服务架构特点。

    docker的特性只能运行在X86上,小型机之类的,该淘汰就淘汰吧,要么做一些轻量的工作,比如反向代理、FTP服务器之类、包仓库之类的。

    实体机操作系统,用已有的suse和ESXI。主要有几个原因:

    1、有技术支持服务。虽然centos、redhat也可以用,但是出一些莫名其妙的问题可以问技术支持或者甩锅。不然影响年终绩效划不来。

    2、商用版软件在连接SAN、存储方面、HA有优势,有些商用软件必须要授权的OS才能用。

    3、HA方面优势明显,特别是ESXI,利用SAN,可以做到虚拟化集群的快速应急处置。虽然swarm、k8s也可以设置容器集群,容灾也不错,但是总有点不放心,需要经过复杂的配置和验证,成本较大,没有ESXI这么方便。但话说回来,ESXI+SUSE+docker 的体系,丧失了docker部分高性能特征。这就得在稳定性、便利性、轻便性方面做个平衡。目前我们采用的ESXI+SUSE+docker的配置,性能还可以,没有差很远。但ESXI的成本也不低,未来仍然会逐步转换到docker成熟的集群和HA上。

    4、监控要求。有些集团公司有自己的监控软件,针对某些特定的操作系统开发。监控又是和考核挂钩的。书面一点的说法,有利于整个集团的IT集中统一管理。

    5、买都买了,用着呗。

二、微服务体系的周边支持设施

    下几个centos、ubuntu等基础镜像(baseimage),建centos、ubuntu等操作系统的仓库(可选),建一个容器仓库,选用swarm、k8s等容器集群管理软件,建立数据管理容器。

    1、先在docker hub下几个centos、ubuntu等基础镜像(baseimage)。一般商用OS都没有官方的docker镜像,比如suse,如果直接用别人的image,存在未知的安全隐患。所以用centos、ubuntu的基础镜像来构建开发、测试、应用运行环境。baseimage也可以通过虚拟机来转换。

    2、在baseimage的基础上,增加ssh、vnc、net-tools等必要的服务,虽然可能违背所谓的“一个容器、一个服务”的原则,但企业内部不太讲究这些原则,原则还是从健康性、可维护性、可操作性上考虑,性能不是第一优先。

    3、mysql、redis、ugnix等可以拆开的服务,都拆开。

    4、考虑docker 集群管理工具。swarm和k8s是比较主流的。目前用swarm,k8s的学习成本比较大,可以循序渐进,从swarm切换到k8s的时候不会中断服务。swarm适合小规模,通过docker service控制集群各台机器中的容器启停,达到服务不中断的目的。要考虑的问题有:数据存储问题、网络访问问题、中断判断问题、安全问题。

    5、配置swarm时,除了通过swarm设置好master和slave,还得使用dockerd -H tcp://IP:port 把docker的监听端口打开,用于master控制各个slave。但这么做存在安全性问题。

    6、存储问题。如果没有集中存储,集群就没有意义,因为各个容器还是独立在各个实体机上,假如A机的容器挂了,B机起来,但是读不到A机的数据,没毛用。所以以前的存储和ESXI的好处利用起来,确保各台slave都能读到数据。如果是分布式的slave,可以用分布式存储。。。。。

1、设docker组,设dockeradmin账户,dockeradmin加入docer组。

 

2、建一个目录专门放docker有关的东西。 /app

用二进制文件安装docker,docker二进制文件,放在 /app/docker-ce/docker,把里面所有的文件cp 到 /usr/bin    也方便看有什么文件需要修改

dockerd 的 log 放  /app/docker/log  docker.log文件

写个启动脚本 start_docker.sh 。主要内容 : nohup dockerd --log-level warn >> /app/docker-ce/log/docker.log &   万一dockerd意外停止,可以用这个脚本启动回来。

把/usr/bin/涉及docker、log、启动脚本等需要的权限赋予组和用户。

必须用root用户启动dockerd,因此把dockerd的启动脚本放到 root 的profile里,启动的时候就自动启动。或者sudo过去。

vi /etc/init.d/after.local

添加    nohup dockerd --log-level warn >> /app/docker-ce/log/docker.log &    到   after.local

还要改/var/run/docker.sock。这个各有不同,可以先改 /usr/bin/docker*,试用 docker images,看看报什么错,就改哪里。

 

3、企业内,用http登录仓库就可以了。修改 /etc/docker 里的 daemon.json文件,增加:

{

  "insecure-registries" : ["IP"]

}

用二进制安装docker,都不能用类似 service docker restart之类的重启docker,所以直接kill 掉 dockerd的进程,之前最好把运行的容器都停了。重启完以后docker login IP    就可以登录仓库 pull images了。

4、以下 5-X 点,建一个私有仓库,单机的就可以了。假设 HB 代表仓库主机名,55代表IP地址。

5、在 HB 上设置一个管理空间的 存储容器,所有的应用容器连接到存储容器,由存储容器管理容器的存储,避免直接从宿主机的OS中操作容器数据,主要是怕删除了。

加入swarm,形成docker集群。

 

posted @ 2019-02-22 16:17  alpha118  阅读(344)  评论(0编辑  收藏  举报