UDN-企业互联网技术人气社区

板块导航

浏览  : 1204
回复  : 0

[教程技巧] Docker深感Mesos、Kubernetes威胁,Engine中内置编排

[复制链接]
泡泡兔的头像 楼主
发表于 2016-6-28 11:06:31 | 显示全部楼层 |阅读模式
2.png

  2016年的DockerCon已经圆满落下帷幕,本次大会最重要的发布当属Docker将编排工具Swarm内置到了Docker Engine中。容器编排是多主机部署Docker应用时必须要解决的问题,会伴随应用的整个生命周期。

  如果一个应用如果由多个容器组成,那么编排工具是必不可少的,而在实际的生产环境中,谁家的应用是跑一个容器就够的呢?Docker意识到很多用户都已经非常依赖于第三方的编排工具,比如Mesos,Kubernetes。

  Google不愧是每天要处理20亿容器的老司机,在Docker刚火起来不久,2013年夏天就开始了Kubernetes项目;而2007年诞生的Mesos,虽然最初的设计是为了支持分布式高性能的计算负载,但在2014年8月的0.20.0版本中就加入了对Docker的支持;Docker自己反而是落后很多,在2014年12月的DockerCon上才正式发布了Docker Swarm,目前虽然发展的很快,但还是稍显落后。但Swarm毕竟是原(qin)生的,于是在今年的DockerCon上,Swarm被内置到了Docker Engine。

  有人说这也是Docker正式向Kubernetes开战的标志,但business is business,我们还是在DockerCon上看到了Kubernetes的展台。
2.png

  (图片来自Twitter,中间那位白衣服的帅哥就是Kubernetes项目的创始人

  Brendan Burns,小编还有幸采访过他)

  当然本文不会只聊这些八卦而已,而是要带你了解什么是容器编排?为啥Docker要在这么多第三方工具中,第一个拿下它?以及这三个最常用的编排工具的工作原理对比。

  以下为译文:

  在Docker平台及其周边的生态中包括很多容器生命周期管理的工具,比如Docker的CLI(CommandLine Interface)可以支持以下的容器行为:

  • 从registry中pull一个镜像库;
  • 运行容器;
  • commit容器为一个新的镜像;
  • 上传镜像到registry;
  • 停止一个运行中的容器。

  尽管CLI满足了在一个主机上管理一个容器的需求,但要管理部署在多主机上的多容器问题,就必须要求助于编排工具了。编排工具可以管理部署在集群中的复杂、多容器的工作负载。通过抽象化主机基础设施,编排工具可以把整个集群当做单一的部署目标去看待。

  基本功能

  一个典型的编排过程,会将应用管理的各个方面都自动化,从初始的布局,调度,以及系统部署到稳定状态的一些动作,比如更新,扩展和故障相关的健康监控功能等,都是一个现代容器编排工具的核心功能。

  配置声明

  通过配置工具,DevOps团队能以标准的格式(比如YAML或JSON格式),声明一个应用负载及其配置。这些定义也承载了镜像库,网络(端口),存储(volume)和工作负载日志的关键信息。这种方式不但能保证编排工具每次对目标系统的配置,都能达到相同的效果;还能让编排工具根据应用的不同阶段(开发、测试和生产),对不同的目标环境,发送相应的配置。

  规则和限制

  工作负载通常有特殊的规则,或者对主机的布局,性能和高可用性有一定要求。比如,将master容器和slave数据库容器部署在同一个主机上是无意义的,违背了原则;同样,将内存中的缓存和web服务器放在同一个主机上可能比较好。编排工具可以定义容器间的关系和容器的布局限制。

  调度

  调度解决的是容器在集群内的布局和启动,这个过程包括根据配置选择一个合适的主机,除了容器调度的API外,编排工具还会调用基础设施的API。

  服务发现

  在一个多主机多容器的分布式部署环境中,服务发现是至关重要的。Web服务器要动态查找数据库服务器,负载均衡器要查找和注册web服务器。编排工具提供的可能是一个分布式的key-value存储,一个轻量级的DNS或一些其它服务发现的机制。

  健康监控

  由于编排工具知道系统期望的配置情况,他们可以跟踪和监控系统容器和主机的健康状况。如果主机宕机的话,编排工具可以重新安置容器;同样,如果一个容器挂了,编排工具可以启动一个新的去替代。编排工具要保证系统部署总是按照开发人员或运维人员声明的状态进行。

  目前来说Docker内置的Swarm和Docker Swarm的功能是基本相同的,只是更便捷了而已。那么Docker Swarm,Kubernetes和Mesos有什么区别呢?

  Docker Swarm

  Docker Swarm的目标是使用和Docker Engine相同的API,这并不是代表调用一个Docker Engine的API端口,而是显式地调用和多个Docker Engine相关的一个端口。这么做最大的好处是,现有的工具和API可以和在单实例模式下一样的工作。Docker的CLI和Compose是开发者创建应用的方式,也可以和Docker Swarm做到完美兼容,这是其他编排器目前还做不到的。
2.png

  DockerSwarm还有一些内置的调度策略,给了用户去引导容器布局的能力,以便能最大或最小化地在集群内扩散容器,还支持随机地容器布局。

  Docker一直在遵循『batteries included but removable』的原则,意思是虽然目前它的后端只支持一些简单的调度,未来会通过可插拔的接口支持更多的功能,根据用户案例的扩展情况和复杂度,开发人员或运维人员可以有选择地去集成。所以,虽然做了内置,怕大家一时接受不来,swarm模式默认还是关闭的。

  Docker Swarm支持限制(constraints)和容器关系(Affinity)的定义,来决定容器在特定主机上的布局。限制定义了选择被调度节点的需求,可以根据存储类型,物理位置,环境和内核版本等条件进行筛选。容器关系定义了在主机上布局容器的需求。

  对于服务发现,Swarm还使用了一个可插拔的后端架构,可以和静态文件,IP列表,etcd,Consul和Zookeeper等配合实现服务发现。

  Google Kubernetes
2.png

  Kubernetes的架构是一个master服务器带多个minion,命令行工具Kubecfg可以连接master的API端口,去管理和调度这些minion。下面是Kubernetes环境中每个组件的定义:

  • Master:运行着Kubernetes管理进程的服务器,包括API服务,复写控制器(Replication controller)和调度器;
  • Minion:运行Kubelet服务和Docker Engine的主机,minion接收来自master的命令;
  • Kubelet:Kubernetes中节点级别的管理器,运行在minion上;
  • Pod:在同一个minion上部署的容器的集合;
  • Replication controller:定义了需要运行的pod或容器的数量;
  • Service:定义了每个容器发布的服务发现,以及通信用的外部代理;
  • Kubecfg:和master对话的命令行接口,管理Kubernetes的部署。

  服务的定义,包括规则和约束,都是在JSON文件中描述的。为了实现服务发现,Kubernetes提供了一个稳定的IP地址和DNS名字,对应于动态的pod集合。当运行在pod内的一个容器连接到这个地址,这个连接会被运行在源机器上的本地代理(kube-proxy),发送给相应的容器。

  Kubernetes支持用户自定义的应用健康监控。这些监控是靠kubelet实现的,确保应用的正常运行。目前Kubernetes支持三种健康监控模式:

  • HTTP模式:Kubelet会调用一个web端口,如果返回的代码在200-399之间,系统状态被视为是正常的;
  • Container exec:Kubelet会在容器内执行一个命令,如果返回『OK』,状态就是正常的;
  • TCP socket:Kubelet会向容器开放一个socket,并建立一个连接,如果连接建立成功,系统状态就是正常的。

  Apache Mesos

  一个典型的Mesos集群包括了一个或多个服务器运行mesos-master服务,还有一个服务器集群运行着mesos-slave组件。每个slave被master注册后提供服务。Master和framework交接后,会把任务派发给slave。下面是Mesos的架构概览:
2.png

  • Master daemon:Mesos-master服务运行在master节点上,管理着slave daemon;
  • Slave daemon:Mesos-slave服务运行在slave节点上,运行framework分配过来的任务;
  • Framework:一个应用的定义,包括一个调度器(向master注册接收资源提供),以及一个或多个执行器(启动slave上的任务);
  • Offer:Slave节点的资源列表,每个slave节点发送offer到master,master提供offer给注册的应用framework。
  • Task:在slave节点上执行的作业集合,由framework调度;
  • Apache ZooKeeper:协调master节点的软件。

  不同于其它工具,Mesos通过Apache ZooKeeper实现master节点的高可用,一个高可用的部署需要至少3个master节点。系统中所有节点,包括master和slave,会和ZooKeeper通信去确定哪个mater是当前的master管理员。管理员执行所有slave的监控监测工作,并将失败的slave删除。

  当Mesos和Marathon一起配合工作时,服务发现可以基于HAProxy TCP/HTTP负载均衡器实现,配合一个使用了Marathon的REST API的帮助脚本,定期地重新生成HAProxy的配置文件。Mesos-DNS是最近发布的一个基于DNS的服务发现机制。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部