Kubernetes和Docker Swarm的区别
容器在打包和保存所有应用程序代码、依赖关系、库和必要的配置方面非常出色,可以轻松地在任何地方运行它们。但问题是,容器本身不能做一些事情,如:负载平衡、配置主机、在多个服务器上分配容器、扩大和缩小集群等。所以容器化平台的概念就出现了。
谷歌Kubernetes
Kubernetes是谷歌的开源、可移植和可扩展的容器编排系统,用于管理和处理容器化的工作负载,便于声明性配置和自动化。Kubernetes在2014年作为谷歌的一个开源项目进入人们的视野。Kubernetes考虑到了谷歌超过15年的大规模运行生产负载的经验以及社区的最佳想法和实践。
Docker Swarm
Docker Swarm是一组物理/虚拟机器,用于运行Docker应用程序,并被配置为联合起来形成一个集群。Docker Swarm是Docker的原生集群工具,自1.12版以来一直是核心的一部分。它可以让管理和组织一个Docker节点集群,并允许像一个单一系统一样与它们互动。它通过调度容器在最合适的主机上运行,为你的IT资源提供优化,并平衡工作负载,确保容器在有足够资源的地方被加载/启动。所有这些都是在保持你定义的性能标准的同时完成的。
Kubernetes和Swarm Docker之间的区别如下-
Kubernetes | Docker Swarm |
---|---|
Kubernetes是由谷歌在2014年开发的。 | Docker Swarm是由Docker公司在2013年开发的。 |
Kubernetes的安装需要一系列的手动步骤和配置,将其组件如etcd、flannel和docker引擎联系在一起。 | Docker的安装很简单,就像你所使用的操作系统上的软件包管理系统中的任何应用程序一样。Docker在Linux平台上只需要一个命令,如Debian、Ubuntu和CentOS的安装。 |
Kubernetes使用自己独特的客户端、API和YAML定义,与标准的Docker等价物不同。 | Swarm API提供了许多来自Docker的熟悉的/已知的功能,但所提供的功能是有限的,因此它并不完全包括其所有的容器构成命令。 |
Kubernetes的复杂性源于为容器提供了一套统一的API,并促进了对集群状态的有力保证,但以牺牲速度为代价,因此,容器的部署和扩展较慢。 | Docker Swarm即使在非常大的集群中也能提供更快的容器部署,并且由于这种高集群填充阶段,支持更快的反应时间来按需扩展。 |
Kubernetes通过手动服务配置来实现/促进负载平衡,即容器pod需要被定义为负载平衡的服务。 | Docker Swarm通过集群中任何节点和容器之间的连接提供内置/自动的内部负载平衡。 |
Kubernetes逐步地处理更新。每个容器被一个一个地更新(一次一个),以确保服务在任何时候都是可用的。如果在更新过程中出了问题,工作版本会自动回滚。 | 在Docker的情况下,它可以渐进地将更新应用到节点上。如果有什么问题,可以很容易地回滚到以前的工作版本的服务。 |
卷作为一个抽象概念,允许容器(卷)与它们所包含的pod一起被创建和移除。容器在同一个pod内共享数据。 | Docker Swarm的数据卷基本上是单独或与容器一起创建的,因此它们可以在多个容器之间共享。 |
Kubernetes支持多种类型的日志/监控服务,如容器内的Elasticsearch/Kibana(ELK)日志、Head ster/Grafana/Influx、Sysdig云整合和Node健康。 | Docker Swarm主要支持第三方工具的监控服务,如Reimann。 |
Kubernetes主要使用flannel来设置它的容器网络。为了安全起见,TLS认证需要手动配置。 | Docker Swarm为容器网络的多主机入口网络叠加提供便利,在所有集群节点上运行。TLS认证是自动配置的。 |
Kubernetes依赖于etcd和容器,这些容器被手动定义为发现的服务。DNS服务器是观看Kubernetes API的一个强烈推荐的附加组件。 | Docker Swarm使服务发现相对更容易。默认情况下,容器被赋予自己独特的IP,这使得它们可以在集群特定的入口网络中通过虚拟私有IP地址进行通信。 |
Kubernetes支持更复杂、更灵活的架构,有更强的服务保障,因此性能会变慢。 | Docker Swarm支持更简单的架构,所以在纯粹的速度方面,它总是有一个额外的优势。 |
支持自动扩展。不能做自动扩展。