相比于普通的软件的开发速度,容器编排领域的发展速度相当惊人。基于容器的初创公司呈爆发式增长,这个领域的竞争也愈加激烈。这是一个好的开始,但是技术的选择却成为一个难题。在这样的情况下,我们目前关注了Docker和Swarm。
在Apprenda,我们的目标就是提交一个有创意的,稳定的,可以在长时间内比较好维护的编排技术。一个健康的社区有三个关键点。在对技术,社区和不同容器编排工具解决方案进行漫长的商业评估之后,我们选择了Kubernetes。然而,随着其它容器集群管理选项的增加,要重点了解相比于Kubernetes他们分别可以提供什么样的功能进行对比。
Docker即将发布1.12版本,这次的发布直接跟Kubernetes进行竞争。这次的新版本都是在名为SwarmKit的编排系统的基础上建立起来的。Docker Swarm目前增加了一些有趣的新功能,也属于Docker的一部分。比如,Docker CLI增加了一个将Swarm集群实例化的新功能。将Swarm实例化其实也就是创建一个Swarm Manager和CA证书的意思。值得注意的是,这个CA证书可以在不需要外部系统的情况下为Swarm Manager和所有Swarm集群生成证书,同时所有节点之间的交流由TLS来保证安全。这也就意味着不会再有不安全的Swarm集群了。对于创建和使用Swarm的开发者来说,安全已经完全是透明的了。
CLI同样也有一些新的命令要把节点添加到已经存在的Swarm集群中。要注意的是,节点中有manager或者worker两者之一,但是worker可以被升级到manager,manager可以被降级到worker。Swarm managers使用RAFT协议来选举leader,并且确定共识,这跟Kubernetes运用etcd工作的机制有点相似。另一方面,workers使用Gossip协议来交流他们之间各自的状态,这样的话,Docker用户就不再需要外部实体,也不需要键值存储来跟踪不断变化的集群拓扑。
同样,逻辑服务的概念对Docker 来说也是很新的,是一个被Docker Cloud启发的概念。这个服务包括了一对多容器实例,而且这个逻辑观点的介绍使得服务管理更加容易。服务可以被创建,更新和扩容,这也就导致了容器的配置,更新和杀死。
Docker1.12的一个弱点就是服务发现,在Kubernetes中,服务发现还是运行得很顺畅的。更加重要的是,自从项目的开始,“service”为容器代理的概念已经存在于Kubernetes中。它只是简单地联系你的集群中的service,Kubernetes确保你在容器服务之后连接到正确的pod(一个或者多个容器的组合)。Kubernetes也是被设计成模块化,可扩展的,这样的话,它的组件就可以轻松交换,这就使其更加适合你的整体需求。
从Docker发布的这个新版本面临来自Kubernetes的竞争,Kubernetes被设计来帮助更新配置,缩放,操作主机上集群间的容器。鉴于Kubernetes超强的社区,已经有很多公司在使用Kubernetes了。Kube(社区是这么叫它的)同样也获得了企业客户的普遍接受,这些客户同样也希望使用新云原生算法来创建容器化应用程序。
Kubernetes对自身的定义就是:将容器集群作为单个的系统进行管理,以此来加速开发,简化操作。Kubernetes是一个开源平台,但是它同时也是CNCF(Cloud Native Computing Foundation)开发和管理的社区。它从根本上就跟由初创公司控制,不属于开源社区的Docker/Swarm不一样。Kubernetes很厉害,因为它带来的是谷歌十多年大规模运行容器的经验,Red Hat在企业多年部署和管理开源平台的经验,CoreOS灵活开发的经验,以及来自很多其他组织和社区成员的优点。
鉴于强大的多元化社区,Kuberentes是一个跟Swiss Army Chainsaw一样灵活有弹性的平台。你可以在裸机上运行Kubernetes,或者在你能想到的任意云提供商上运行。Kubernetes另一个很棒的功能就是它同时支持多种类型的容器,比如Docker和RKT容器,以及多种容器的集群。
最后,Apprenda已经被提交到Kubernetes。这是我们所尝试过最强壮的解决方法,同时我们相信它在我们壮大的时候也还是会支持我们。Apprenda和Red Hat也期望Kubernetes能够支持Windows,并且能够运行windows容器。要记住的是,其它集群编排服务也不差,但是,就像我开篇提到的——这个领域发展得很快,我们要确保我们处理的是最主动,最稳定和最成熟的项目。我们对Kubernetes十分满意,而且自从1.0版本发布以来,就一直在生产过程中使用它了。
对于Kubernetes1.3版本的发布,我们满怀期待,同时新功能PetSet(也就是之前的nominal services)提供新的有状态的基本单元来运行你的pods,这就需要强大的辨识和存储功能。我们对Kubernetes1.3中的“集群联盟”附加的功能也满怀期待!
我很感激整个Kubernetes社区为这个项目已经做的和继续做的努力!这真是一个很棒的技术,也是Apprenda所需的重要基石。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。