编排能不能被视为交付和配置管理方案的替代品是值得商榷的,在云原生应用程序的前提下尤为明显。我们可以从各个角度来看这个问题:与数据中心解决方案进行比较,区分基础设施(云端和云外)与容器(主要关注云)的编排,以及在不同场景下的最佳实践。
基础设施或容器?
在讨论编排时,第一个不可避免地问题就是:基础设施编排或容器编排?
这是我们面对的两难选择,取决于我们希望实现的抽象程度以及如果组织堆栈。如果我们决定在基础设施层进行管理,我们将使用虚拟机和裸机服务器。换言之,即多租户或单租户服务器。假设我们以IaaS的方式使用云,那么我们就会得到一些资源,例如网络资源、存储、负载平衡器、数据库、DNS等等,我们可以根据自己的喜好建设基础设施。
如果我们已经决定在CaaS(有时被视为PaaS)层进行管理,将对容器的生命周期进行管理,或者对工作负载进行管理。对于那些不熟悉容器的人来说,这不是一种查看工作负载的新方式,最受欢迎的是Docker,Rkt和LXC。容器非常适合定义一个不可变的体系架构,也可以用于微服务定义,更不用说它们是轻量级的,易于移植的,并且可以打包使用。
这两者都各有优缺点,下面继续讨论两者的编排方面。
基础设施
编排基础设施的方法有好几种,下面介绍的是最受公司欢迎的两种。
交付和配置管理:一种方式是使用旧式的PXe/Kickstart组合文件,尽管它正慢慢被自动化解决方案取代,但有些公司仍然坚持使用它,或者像Cobbler这样的替代品。另一方面,我们使用诸如Foreman等工具。Foreman支持跨不同操作系统的BIOS和UEFI,并且与Puppet和Chef等配置管理工具集成。Foreman在数据中心交付方面表现出色,并为我们提供了易于管理的基础设施,可随时使用或配置管理。
一旦完成交付,我们就会进入配置管理,其中包括生命周期的管理。包含Ansible、Chef、Puppet、Salt,甚至是老式可靠的CFengine。后两个是我的最爱,同时Ansible也给了我很多帮助,因为简单无主的工作方式。
编排和可选的配置管理:现在,编排意味着概念上的不同,现在常用的工具是Terraform。它允许在数据中心或云端进行编排,与AWS,Oracle Cloud,Azure甚至AliCloud等不同的云进行集成。除了云提供商之外,还可以将Terraform与第三方(如PagerDuty)集成并处理所有类型的资源。从经验来看,这种整合是顺利且简单的,但有时还不够成熟。
并非所有提供商都能提供高度的灵活性。最初在Oracle Cloud中使用Terraform时,OCI的自动缩放还不够成熟。因此,该提供商不允许Terraform创建自动缩放组,但是有时候这些工作非常重要,以至于曾需要同时使用Terraform和AWS工作。另一个是看提供商的功能,不管是云还是其他。不容忽视的是,有时我们的工具不能很好地融合在一起设计出合适的架构。
Terraform的另外一个优点是它可以编排任何基础设施,包括虚拟机、裸机以及网络资源和存储资源。同样,它将取决于云和Terraform提供商以及所使用的插件。
Terraform新一代工具的作用不仅在于编排,还在于作为代码(IaaC)方面的基础设施。这个行业到处都是IaaC,Terraform也不例外。我们被允许将资源定义存储在任何VCS系统,Git,SVN或任何其他文件中,而且这非常庞大:它允许我们拥有版本化的基础设施,团队可以进行交互,并且每个人都可以加速且管理分支机构并定义不同的版本,分离基础设施和环境的版本,如生产、分期、UAT等等。
一旦完成了Terraform的初始步骤,配置就可以用诸如Cloud-Init之类的任意引导完成。另一种比较流行的选择是Ansible:它适用于小型简单初始任务。如果开始从事云计算,Cloud-Init比较符合需求。之后可以使用其他配置管理工具接管。
容器编排
容器不再是新事物,他们已经存在了几年(或几十年,取决于我们如何看待它),它们足够稳定和有用,我们可以选择它们作为平台。
虽然数据中心的容器很有趣,但云端的容器更好,尤其是由于现在大多数云提供给我们容器编排,以及大量的解决方案,以防我们无法获得足够的容量。例如ECS, Amazon Container Service,ACS, Azure Container Services; CoreOS Fleet; Docker Swarm,GCE, Google Container Engine,Kubernetes等。
Kubernetes将来会有很好的发展,主要有以下三个原因:
它是由谷歌设计的,使用环境巨大,并且能够蓬勃发展;
它是云原生计算基金会(CNCF)的一个选择,这意味着它有更大的机会来生存。CNCF对云原生应用程序非常重要,受到许多公司(如Oracle)的支持;
该架构简单易学,可以快速部署,并且容易扩展。
Kubernetes是一个非常有前途的工具,并且已经取得了成果。如果您正在考虑大规模的容器编排,开始深入研究诸如Minikube之类的技术,并慢慢推进诸如Rancher等易于使用的工具,这将大大有助于为未来铺平道路。
结论
正如已经表明的那样,有许多解决方案取决于正在管理的基础设施类型,还包括基础设施的位置、规模以及目前如何分配。
技术可以共同使用。在Oracle云安装了OKE(Oracle Kubernetes Engine)之前,在云端实现Kubernetes的方式是通过一个实例化必要基础设施的Terraform插件,然后在其之上部署Kubernetes集群,以便我们继续配置、管理和安装应用程序(例如ElasticSearch)。
现在行业正在迈向云计算,这意味着所有将作为XaaS(一切即服务)提供。这反过来意味着构建分布式架构,可靠、高性能、可扩展且成本更低,而且对于一些公司来说,这是一个巨大的竞争优势。
尽管如此,还是有很多技术可供选择。通常,选择符合行业标准的技术是一个明智的决定。这意味着它已被公司用于当前的开发,并将在未来数年内得到维护。