前言
互联网时代的冬天即将来临,或许很快就很少人去提及“互联网”这个词,但是互联网时代所带来的技术风暴对于每一位IT技术狂热者来说永远不会熟视无睹,包括笔者在内的众多IT从业者都在思考应该以什么样的角度去思考互联网时代掀起的开源风暴(虽然开源这个词并不是什么新鲜词汇),作为一个微软MVP,我也尝试着从众多前辈老师们的实践中去探索如何去接近开源。
我认为无论是什么平台的技术,最终的目的都是为了解决实际生产的问题,而并非为了什么技术而去上线或学习什么技术。所以对于开源,我的态度是“拥抱”,不仅仅是我作为一个微软技术追随者的态度,而且是技术上,我也认为开源与闭源(或部分开源)技术是能够实现互补的拥抱的。
今天我带来的分享是在Azure平台构建一个“鹰眼”容器平台,这也是我前几个月在彭爱华老师的微信课堂分享的一个设想(如图):
如今已经小有雏形,故也算是给当时听了我这个“技术狂想”的朋友交一份作业吧!
/**************************** 分割线 ****************************/
底层平台选型及平台解释
使用Azure搭建开源平台的诸多好处其实我也不用多说,这里列举几个最显而易见的好处:
l 真正的“公有云”
l 底层多数据库中心容灾
l PaaS或IaaS级别高可用
l 提高开源底层系统易用性
l 自身的细粒度监控
这些虽然通过自主开发可以基本实现,但除去固有的硬件成本不说,单一的开发成本以及习惯培养成本来说就已经是非常大一笔开销,且并不能保证真正的好用,故在Azure上搭建开源平台是较为折中的一个方案。
解决了底层平台选型的问题,接下来先来解释下什么是“鹰眼”容器平台,所谓容器平台,就是利用Docker作为容器底层,Docker这个词我就不用多解释了,其提供Container(容器)的最大的好处就是能够大幅度缩短业务上线/恢复/更新的时间。但是当一个业务系统化身成为一个Container后,我们怎么样才可以观察到它的状态?
答案的多种多样的,我考虑过使用SCOM去监控容器,由于容器的IP本身是Docker的内部IP,虽然加上-hostname参数可以将容器主机名固定住且正常解析,但是存在多个容器时就无法这么做了,毕竟只有一个IP地址,而SCOM的异构监控是需要对监控的对象做双向解析的,即使是对容器单独绑定固有IP也会造成一些其他的问题,当然这也有办法避免(将在以后文章中进行公开)。所以,为了避免以上问题,我决定暂时不采用微软的SCOM,而是采用同样的是开源架构(这里仅仅表达巧合,并非同样是开源架构,兼容性就能比较好)的Zabbix,所以Zabbix就是本次实验的“鹰眼”。
/**************************** 分割线 ****************************/
“鹰眼”容器平台架构问题
有了容器,选择就多了,为什么这么说呢?因为这里涉及到一个问题,究竟是要把“鹰眼”放在Container里面还是跟Docker平行?所以便有了以下两种架构:
A. Zabbix作为Container之一
B. Zabbix与Docker Host平行
通过架构图我们可以清楚的看到,如果将Zabbix作为Docker Host的Container之一的话,当Docker Host宕机(当然,处于Azure平台的话,这种情况极少可能发生)后其下的Zabbix也就连带着宕机,相当于我们失明了,对平台的情况无法监控到,实际上你可能连Docker Host宕机都不清楚,因为Zabbix就是Docker其中的一个Container(当然,如果Docker Host宕机那么Azure已经会发出第一层警报了,只是这个警报可能并不会非常明显)。所以基于上述考虑,采用B架构为佳。
如果你确实额度有限,使用A架构其实也无妨,因为正如选型篇所说Azure本身就具备了监控功能。但是A架构的实现需要比B架构考虑更多因素,这里暂且以B架构为例。
/**************************** 分割线 ****************************/
实现准备篇
为了实现以上所述架构,我们需要对Demo环境做一些规划,规划如下(由于目前国内Azure还未上线CoreOS,故这里采用Ubuntu作为Docker Host):
HostName |
NetWork |
Port |
Role |
VMCDocker01 |
VMCloud_vNet |
10050 10051 10052 |
Docker Host |
VMCZabbix01 |
VMCloud_vNet |
80 |
Zabbix/DB Server |
CApp01 |
Docker IntNet |
10050 |
MySQL |
CApp02 |
Docker IntNet |
10051 |
Nginx |
Zabbix提供监控Docker的方式有很多,包括GitHub上也有现成的Docker监控项目,但是为了在Azure上实现原生态的监控,今天采用最暴力的通过Zabbix本身提供的Template来对Container进行监控。
*:10050是对Docker Host本身的OS做监控,10051/10052分别为两个Container的监控端口。
/**************************** 分割线 ****************************/
实现步骤
1. 创建Azure vNet:
2. 创建Docker01及Zabbix01宿主机(采用Ubuntu Server 14.04 LTS):
3. 准备Zabbix环境
4. 配置Zabbix:
a) 配置好对应的Template
b) 创建Zabbix组,分为Docker Hosts与Docker Container组:
5. 准备Docker环境
6. 配置Docker
a) 创建容器(Azure A1 Linux Ubuntu 14.04创建时提示不支持限制Swap,也就是说-m参数直接无效,这个以后会进行说明如何解决):
b) 为Container与Hosts都安装Zabbix Agent:
7. 建立Zabbix与Container之间的联系
*这里可以以端口做区分,且Zabbix是以configfile中指定的HostName作为对应而并非真实的HostName,故可以实现对应
8. 检查监控状态
各项数据监控正常(比如之前说过并不支持限制swap与内存,所以这里显示的容器使用内存还是全量内存)
由于Azure上Ubuntu默认不会帮你创建Swap分区(这也是为什么不能限制swap的原因),而大多数现成的docker images也是不会给你设置swap的,所以监控完成后会出现以下警报
/**************************** 分割线 ****************************/
写在最后
随着Hyper-V Container与Windows Container的发布,相信会有越来越多的容器方案在Azure上实现,笔者也在做进一步的努力将前面所分享的架构进行实现(Hyper-V vNext有可能支持嵌套,或者Container中嵌套)。至于本篇中涉及到安装与配置有兴趣的同学可自行到搜索引擎上进行学习,或者期待俺将为大家带来更为详细的“拥抱”开源历程讲解。
本篇完成的架构体验:
Zabbix地址:http://vmczabbix01.chinacloudapp.cn/zabbix/
用户名:VMCGuest
密码:123456
过期时间:由于笔者得到的是Azure中国版的试用账户,此地址将于10月份失效,还请尽快体验:)
/**************************** 分割线 ****************************/
扩展阅读
MVP张善友《在 Azure 上使用 Docker运行 Mono》:
http://www.cnblogs.com/shanyou/p/4168391.html
MVP谢睿《当Azure遇上Docker》:
http://maomaostyle.blog.51cto.com/2220531/1654994
MVP彭爱华《Windows Docker和Windows Nano Server来啦!》
MVP张诚《MVP看互联网+系列》:
VMCloud最新信息(热火到来不及排版,持续更新)
- 职场巅峰之路:
- VMCloud-OPC:
微信公众号全面开启,高端与进阶文章:
点击微信右上角的『+』,会出现『添加朋友』,进入『查找公众号』,输入VMCloud(此为关键字,非ID),即可找到