问题导读:
1.四种开源Docker集群管理平台有哪些不同? 2.Docker集群管理平台资源池层技术思路是什么? 3.怎样构建一个融合Docker和虚拟化的高可用云平台?
理想平台的需求和架构笔者认为融合了Docker与虚拟化的云平台应该包括三个层次:资源管理层、虚拟化层、服务层。当然Docker与虚拟化会共用大部分模块,这也是笔者认为要构筑融合平台的好处。
资源管理层至少包括:计算资源管理,存储资源管理,网络管理,安全管理。
虚拟化层肯定包括:虚拟化引擎(一般情况下就是KVM),容器引擎(一般情况下就是Docker)。
服务层至少包括:高可用性、编排管理、容灾备份、服务发现、应用发布、应用升级、自感扩容、编排管理、平台高可用性、生命周期管理、用户权限认证、监控报警、日志审计、负载均衡、镜像管理、系统维护等模块。
开源解决方案介绍和对比Everybody wants to rule the world这是一个群雄逐鹿的时代,Kubernetes、Docker、Mesos、OpenStack们都想“控制”云世界。
Kubernetes方案Kubernetes的优势在于它是第一个Docker集群管理平台,第一个提出并实现了Pod、Replication、Services Discovery等概念。关于技术细节,笔者在此不做过多介绍,请自行百度、Google,或者自己搭建平台体验。下面的其他方案也相同。
Docker SwarmSwarm是Docker在2014年12月份新发布的Docker集群管理工具。Swarm可管理Docker集群,管理和分配计算资源,也包含服务发现(可以选用etcd、ZooKeeper、Consul),容器编排等功能。Swarm的优势是与Docker接口API统一。
MesosMesos的目标是下一代数据中心操作系统(DCOS),其最核心功能在于集群管理、计算资源管理、任务分发、原本用作Hadoop等分布式任务管理。从0.20版开始,Mesos支持Docker形式的任务调度(主要看中Docker的任务隔离、资源限制、随镜像发布)。在Mesos之上,Marathon可以用作为Docker编排和生命周期管理。
OpenStack Magnum方案为保证云计算领域的领先地位,2015年5月份温哥华峰会上,OpenStack提出了“集成引擎”的思路。其实说白了就是在Kubernetes、Swarm和Mesos的上面套一层,用OpenStack Magnum的接口来管理它们。OpenStack的优势在于在虚拟化上积累的多租户、编排、存储以及网络能力。
笔者认为这个方案有点另类,OpenStack不会甘心仅仅做个"集成商"的。笔者大胆猜测,凭借强大的内生能力,OpenStack Magnum一定会慢慢学习和消化Kubernetes、Swarm和Mesos的优势,并最终替代它们变成另一个"Nova",这个"Nova"操作和管理Docker。
方案比较下面对四种方案进行全方位的比较,按照0(没有此项功能),1(有,但不完善),2(有,且比较完善)。
技术思路笔者推荐的思路还是与IaaS平台混合在一起,用户需要什么提供什么,并且这些功能模块尽量独立,之间的耦合度不高,在特定场景下不需要的功能模块,可以选择不部署。下面是笔者对几个关键点的技术思路(仅仅是思路啊)。
关于存储
a. 将Docker的rootfs以及Volume跑在Ceph集群中。据说Docker社区即将实现Ceph RBD Graph Driver。
b. Ceph模块Docker化,与Docker节点统一起来,实现超融合理念。
关于网络
a. 与虚拟化一体实现DHCP,实际IP分配通过Docker 1.9以上的--ip参数设定。
b. 利用ovs实现Docker与VM互联互通。
c. 用vxlan tunnel实现大二层。
关于服务发现和负载均衡
服务发现可以让一个应用或者组件发现其运行环境以及其它应用或组件的信息。当一个服务启动时,注册自身信息,例如,一个MySQL数据库服务会在这注册它运行的IP和端口。负载均衡的策略可根据负载在Ngnix和DNS上体现,不如发现某个负载太高,就Ngnix或者DNS到另外的Docker Server上。
关于高可用性
a. 静态迁移&Docker HA:Ceph共享存储 + IP设定 == 可实现Docker迁移功能。
b. 动态迁移: 热迁移CRIU(冻结进程 --> 保存在存储上 --> 读取并恢复出来)
关于应用升级和无感扩容
一个Set跑一个业务,由多个Docker组成,支持灰度升级,如果监控到负载太高,也可在Set内增加docker数量。
关于用户,租户管理
用户管理,权限管理,三权分立,租户管理等功能与IaaS平台无差异,可完全复用。
关于日志
a. Docker内日志:对于每一个创建的Docker容器,Docker Daemon均会在内部创建一个goroutine来监听容器内部进程的标准输出stdout以及标准错误stderr,并将内容传递至日志文件中。
b. 操作日志:支持日志查询、审计、下载等功能。操作日志至少需保存:用户、操作对象、状态、用户IP、时间等五个元素。
|