容器编排

容器编排是将容器的部署、管理、扩展、网络和可用性使用自动化的方式完成。

任务

容器的调配和部署

容器的冗余和可用性

扩展或删除容器,合理分配基础设施(主机)。

主机资源不足或宕机,将容器进行转移。

容器间的资源分配。

对外公开容器提供的服务。

服务发现的负载平衡。

容器和主机的健康监控。

为应用配置容器。

工作方式

在使用Kubernetes或Docker Swarm之类的容器编排工具时,通常会使用YAML或JSON文件,描述应用程序的配置。在配s置文件中告诉业务流程工具,在哪里可能获取容器镜像,如何在容器之间建立网络,如何挂载存储以及在哪里存储容器的日志。

通常,会对这些配置文件使用分支和版本控制,以便在将它们应用到生产环境之前,能够在开发和测试环境中进行部署。

在部署时,容器编排工具会根据指定的资源配置(如,CPU或内存可用性)寻找合适的主机放置容器。

注:放置容器的策略有很多种,如:与其他主机的距离。取决于配置的约束条件。

一旦容器在主机上运行,编排工具就会根据容器的定义文件(如Dockerfile),管理容器的生命周期。

容器编排工具的优美之处在于,只要是能够运行容器的环境,就可以使用它。从传统的本地服务器到AWS,GCP、Azure,都提供容器运行环境。

Kubernetes

Kubernetes是容器编排中的黄金标准。

Docker Swarm

强硬派玩家,虽然Docker已将Kubernetes作为容器编排引擎的首选,但仍提供了Swarm

Apache Mesos/Marathon

复杂但灵活工具,稍早于Kubernetes项目,由伯克利分校开源的项目,在Twitter、Uber、Paypal等组织中广泛采用。

支持开箱即用的高可用性,Mesos只提供集群的管理。因此,在Mesos之上出现许多框架,如:Marathon(“生产级”容器编排平台)。

如何选择

Kubernetes是标准的容器编制工具,众多云服务厂商支持,提供丰富的功能,开销却很少。

Swarm架构相当简单,能直接在Docker生态系统使用。

Mesos,可以自由扩展。在Mesos集群中,可以将容器化应用部署到传统vm应用旁边。

Swarm适合于规模较小的部署。Mesos可以扩展到数万个节点,Kubernetes紧随其后。

Swarm的学习曲线较低,Mesos和Marathon需要一定的专业程度。