对于DevOps 工程师来说,掌握所有围绕新技术的工具比以往任何时候都更加重要。如今,两个重要工具是 Kubernetes 和 Docker,它们用于使软件在需要从一个计算环境迁移到另一个计算环境(例如,从测试环境迁移到实际生产环境或本地环境)时可靠地运行。计算机到云端。这些环境可能不相同,这可能会导致软件运行方式出现问题。这就是容器、Kubernetes 和 Docker 的用武之地,在本文中,我们将了解 Kubernetes 和 Docker 之间的区别。
什么是容器?
容器包含整个运行时环境。它是一个捆绑包,不包含应用程序,而是包含关联的依赖项、库和其他配置文件。容器化是虚拟化的演进,与虚拟机相比,容器具有多种优势,例如,它们效率更高,使用的资源比虚拟机少得多。它们也是轻量级的,因此一台服务器可以承载比虚拟机更多的容器。如果您从事信息技术领域并考虑容器平台(现在谁不是?),您无疑会遇到 Kubernetes 与 Docker 的争论或问题的变体“Kubernetes 比 Docker 更好吗?” 但这些具有误导性,因为尽管 Kubernetes 和 Docker 都是非常流行的容器相关解决方案,但它们的用途并不相同,也不存在竞争。它们经常一起使用。让我们深入了解一下。
什么是 Kubernetes?
Kubernetes是一个开源的容器管理工具,也称为容器编排工具。它用于自动化容器部署以及缩放和缩放容器等。它不是容器化平台,而是容器化平台上使用的工具。为什么您甚至需要内容管理工具?好吧,考虑一下您可能不会只使用一两个容器。更有可能的是,您将拥有数十个或数百个它们,并且您需要某种方法来管理它们。这就是 Kubernetes 的用武之地。这个工具由 Google 于 2014 年推出,被广泛认为是目前同类工具中最受欢迎的工具,许多公共云上都提供这种工具,其中最著名的可能是 Amazon Web Services (AWS )。
什么是 Docker?
因此,您希望使用 Kubernetes 来自动化和扩展所有容器调度和部署,而不必单独编写每个任务的脚本,从而为您节省大量的工作和压力。现在,您需要一个平台来打包应用程序及其依赖项,即创建 Kubernetes 将自动化的容器。这就是Docker 的用武之地,因为 Docker 是一个容器化平台。它是开源的(就像 Kubernetes),自 Docker, Inc. 在 2013 年推出以来,这项技术已经开始腾飞。根据Contino的说法,Lyft、Uber、eBay 和 PayPal 只是使用 Docker 的少数公司。因此,正如您所看到的,关于 Kubernetes 与 Docker 的争论本质上是无效的,因为这些解决方案不具有可比性。然而,有一个名为 Docker Swarm 的容器管理工具的 Docker 版本,它与 Kubernetes 相当,因此我们可以讨论 Kubernetes 与 Docker Swarm。
Kubernetes 与 Docker Swarm
Kubernetes 和Docker Swarm都是开源容器编排工具,这意味着我们现在正在进行同类比较,而不是苹果树之间的比较,两者都是容器生态系统中的主要参与者。但它们在设置方式和运作方式方面存在一些根本差异。在我们讨论 Kubernetes 与 Docker Swarm 的细节之前,您应该知道 Docker Swarm(通常简称为 Swarm)是 Docker 平台的原生集群引擎。由于 Docker Swarm 可以将一组主机转变为单个虚拟主机,因此如果您想保持部署简单,它就特别方便。另一方面,Kubernetes 通常被认为更复杂(但它也可以满足更复杂/更高的要求)。以下是 Kubernetes 与 Docker Swarm 之间显着差异的基本细分。
- 概念Kubernetes 使用 Pod 作为基本调度单元。Pod 由位于主机上并共享资源的一个或多个容器组成。Docker Swarm 使用集群。集群是一组运行 Docker 的机器,这些机器连接在一起。
- 安装对于 Docker Swarm 来说很简单;对于 Kubernetes 来说很复杂。在 Swam 中设置集群只需要两个命令,而在 Kubernetes 中设置 pod 则需要几个步骤。
- 容器设置Swarm 提供了许多与 Docker 相似的功能,但其应用程序编程接口 (API) 并不完全包含所有 Docker 命令。使用 Kubernetes,您无法使用 Docker Compose 或 Docker CLI 来定义容器,因为 Kubernetes 使用其 YAML(即语言)、API 和客户端定义。
- 图形用户界面 (GUI)Docker Swarm 根本没有 GUI(!);Kubernetes 使用简单的英文仪表板以方便使用。
- 联网在 Kubernetes 中,所有 Pod 在扁平网络上交互,通常作为覆盖层实现。Docker Swarm 使用 Linux 工具来虚拟化多主机覆盖网络。
- 可扩展性和自动缩放在这里,归结为速度或稳定性与您更相关。两者都具有高度可扩展性,但 Docker Swarm 速度要快得多,因为 Kubernetes 由于其严格保证集群状态的方式而变慢。Docker Swarm 无法进行自动缩放,而 Kubernetes 可以。
- 负载均衡为了对不同 Pod 或集群中的容器之间的流量进行负载均衡,您有时需要使用 Kubernetes 手动配置设置。只要所有节点都连接到该组,Docker Swarm 就会自动进行负载均衡,这比手动干预要容易得多。
- 滚动更新和回滚这两种工具都支持滚动(即渐进式和渐进式)更新。但如果发生故障,Docker Swarm 不会自动回滚到之前的工作部署,而 Kubernetes 会。
- 记录和监控Kubernetes 为此提供了内置工具,而使用 Swarm,您将引入第三方工具,例如 ELK。