随着Kubernetes作为容器编排解决方案变得越来越流行,“ Kubernetes与Docker”这个词在如今越来越多地听到。
但是,“ Kubernetes与Docker”也是一个令人误解的短语。当您将其分解时,这些词并不意味着许多人想要表达的意思,因为Docker和Kubernetes不是直接竞争对手。Docker是一个容器化平台,而Kubernetes是Docker等容器平台的容器协调器。
这篇文章旨在消除围绕Kubernetes和Docker的一些常见困惑,并解释人们在谈论“ Docker vs. Kubernetes ” 时的真正含义。
容器化和Docker的兴起
如果不先探索容器,就不可能谈论Docker。容器解决了应用程序开发生命周期中的一个关键问题。开发人员编写代码时,他们正在自己的本地开发环境中工作。当他们准备将代码移至生产环境时,就会出现问题。在他们的机器上完美工作的代码在生产中不起作用。原因多种多样。不同的操作系统,不同的依赖项,不同的库。
容器解决了可移植性这一关键问题,使您可以将代码与运行它的基础基础结构分开。开发人员可以将其应用程序(包括正确运行所需的所有bin和库)打包到一个小的容器映像中。在生产中,该容器可以在具有conterization平台的任何计算机上运行。
集装箱的优势
除了解决可移植性的主要挑战之外,容器和容器平台还提供了优于传统虚拟化的许多优势。
容器的占地面积非常小。容器只需要它的应用程序,以及它需要运行的所有容器和库的定义。与每个VM都具有来宾操作系统的完整副本的虚拟机不同,容器隔离是在内核级别完成的,不需要来宾操作系统。此外,库可以跨容器使用,因此无需在服务器上具有10个相同库的副本,从而进一步节省了空间。如果我有3个同时运行节点和Express的应用程序,则不必拥有3个节点和Express的实例,则这些应用程序可以共享这些bin和库。允许将应用程序封装在独立的环境中,从而可以更快地进行部署,在开发环境之间实现更紧密的奇偶校验以及无限的可伸缩性。
什么是Docker?
Docker是当前最受欢迎的容器平台。Docker适时出现在市场上,并且从一开始就是开源的,这很可能导致了它在当前市场上的统治。当前,有30%的企业在其AWS环境中使用Docker,并且这个数字还在继续增长。
当大多数人谈论Docker时,他们谈论的是Docker Engine,这是允许您构建和运行容器的运行时。但是必须先从Docker File开始构建它们,然后才能运行Docker容器。Docker File定义了运行映像所需的所有内容,包括OS网络规范和文件位置。有了Docker文件后,您就可以构建Docker映像了,它是可移植的静态组件,可以在Docker Engine上运行。而且,如果您不想从头开始,Docker甚至提供了一项名为Docker Hub的服务,您可以在其中存储和共享映像。
对编排系统的需求
尽管Docker为包装和分发容器化的应用程序提供了开放标准,但出现了一个新问题。所有这些容器将如何进行协调和计划?如何无缝升级应用程序而不会中断服务?您如何监视应用程序的运行状况,知道什么时候出了问题并无缝地重新启动它?
编排容器的解决方案很快出现。Kubernetes,Mesos和Docker Swarm是一些更流行的选项,用于提供抽象以使一簇机器表现得像一台大机器,这在大规模环境中至关重要。
当大多数人谈论“ Kubernetes与Docker”时,他们真正的意思是“ Kubernetes与Docker Swarm”。后者是Docker自己的针对Docker容器的本机集群解决方案,其优点是可以紧密集成到Docker生态系统中,并使用自己的API。像大多数调度程序一样,Docker Swarm提供了一种管理分布在服务器集群中的大量容器的方法。它的过滤和调度系统可以选择集群中的最佳节点来部署容器。
Kubernetes是Google研发的容器协调器,已捐赠给CNCF,现在是开源的。它具有利用Google在容器管理方面多年专业知识的优势。它是用于自动化容器化应用程序的部署,调度和扩展的综合系统,并支持许多容器化工具,例如Docker。
目前,Kubernetes是市场领导者以及编排容器和部署分布式应用程序的标准化方法。Kubernetes可以在公共云服务或本地上运行,具有高度模块化,开放源代码,并且拥有一个活跃的社区。各种规模的公司都在对此进行投资,许多云提供商都提供Kubernetes作为服务。Sumo Logic支持所有编排技术,包括Kubernetes支持的应用程序。
Kubernetes如何工作?
Kubernetes的细节很容易让人迷失,但归根结底,Kubernetes所做的事情非常简单。CNCF的Cheryl Hung将Kubernetes描述为一个控制回路。声明您希望系统的外观(3个容器映像b和2个容器映像b),然后Kubernetes做到了。Kubernetes会将所需状态与实际状态进行比较,如果它们不相同,则将采取步骤对其进行更正。
Kubernetes架构和组件
Kubernetes由许多彼此不关心的组件组成。所有组件都通过API服务器相互通信。这些组件中的每一个都运行自己的功能,然后公开指标,我们稍后可以收集这些指标以进行监视。我们可以将组件分为三个主要部分。
- Master控制平面-主控。
- Node节点-窗格安排的位置。
- Pod豆荚-容纳容器。
Master控制平面-主节点
控制平面是协调器。Kubernetes是一个编排平台,而控制平面可促进该编排。控制平面中有多个组件可以帮助简化业务流程。用于存储的Etcd,用于组件之间通信的API服务器,用于确定应在其上运行Pod的节点的调度程序以及负责根据所需状态检查当前状态的控制器管理器。
Node节点数
节点构成了Kubernetes集群的集体计算能力。这是实际部署容器运行的地方。节点是您的应用程序在其上运行的物理基础结构,在您的环境中的VM服务器。
Pod豆荚
Pod是Kubernetes集群中最低级别的资源。容器由一个或多个容器组成,但最常见的是一个容器。在定义集群时,会为Pod设置限制,以定义需要运行哪些资源,CPU和内存。调度程序使用此定义来决定在哪些节点上放置容器。如果一个容器中有多个容器,则很难估计所需的资源,并且调度程序将无法正确放置容器。
Kubernetes与Docker有何关系?
Kubernetes和Docker都是全面的事实上的解决方案,用于智能地管理容器化的应用程序并提供强大的功能,由此产生了一些混乱。现在,“ Kubernetes”有时被用作基于Kubernetes的整个容器环境的简写。实际上,它们不是直接可比的,具有不同的根源,并且解决不同的问题。
Docker是一个用于构建,分发和运行Docker容器的平台和工具。它提供了自己的本机集群工具,可用于在机器集群上编排和调度容器。Kubernetes是一个用于Docker容器的容器编排系统,其功能比Docker Swarm更为广泛,旨在以高效的方式大规模协调节点集群。它围绕Pod的概念进行工作,Pod是Kubernetes生态系统中的调度单位(可以包含一个或多个容器),并且它们分布在节点之间以提供高可用性。可以轻松地在Kubernetes集群上运行Docker构建,但是Kubernetes本身并不是一个完整的解决方案,而是要包含自定义插件。
Kubernetes和Docker都是根本不同的技术,但是它们可以很好地协同工作,并且都可以促进分布式架构中容器的管理和部署。
您可以在没有Kubernetes的情况下使用Docker吗?
Docker通常在没有Kubernetes的情况下使用,实际上这是规范。尽管Kubernetes有很多好处,但是众所周知它很复杂,并且在许多情况下不必要或不需要分解Kubernetes的开销。
在开发环境中,通常在没有像Kubernetes这样的容器协调器的情况下使用Docker。在生产环境中,使用容器协调器的好处通常不会超过增加复杂性的代价。此外,许多公共云服务(例如AWS,GCP和Azure)都提供了一些编排功能,从而无需在增加的复杂性上进行权衡。
您可以在没有Docker的情况下使用Kubernetes吗?
由于Kubernetes是容器编排器,因此需要容器运行时才能进行编排。Kubernetes最常用于Docker,但也可用于任何容器运行时。您可以使用Kubernetes部署RunC,cri-o,containerted等其他容器运行时。Cloud Native Computing Foundation(CNCF)在其生态系统格局页面上维护了认可的容器运行时清单,Kubernetes文档提供了使用ContainerD和CRI-O进行设置的特定说明。
Kubernetes与Docker Swarm
参量 | Docker | Kubernetes |
---|---|---|
由开发 | Docker公司 | 谷歌 |
发行年份 | 2013年 | 2014年 |
缩放比例 | 没有自动缩放 | 自动缩放 |
集群设置 | 设置集群具有挑战性且复杂。集群强度更强。 | 设置集群很简单。只需要两个命令。集群实力不那么强 |
安装 | 方便快捷 | 复杂且耗时。 |
数据量 | 在同一Pod中的多个容器之间共享存储卷。 | 与任何其他容器共享存储卷 |
支持日志记录和监视工具 | 允许您使用3 次第三方工具如麋鹿。 | 它提供了用于记录和监视的内置工具。 |
负载均衡 | 是否进行自动负载平衡 | 手动配置负载平衡设置 |
可扩展性 | 扩展比K8S快。但是,它的集群强度并不那么强大。 | 与docker相比,扩展速度较慢。但是,要保证更强的群集状态负载平衡需要手动服务配置。 |
更新 | 代理更新可以就地执行。 | 集群可以就地升级。 |
优化 | 针对单个大型集群进行了优化 | 针对SDLC的多个较小群集进行了优化 |
容错能力 | 高容错能力 | 容错能力低 |
节点支持 | 支持2000>节点 | 最多支持5000个节点 |
容器支持 | 限于95000容器 | 限制为300000个容器 |
公共云服务提供商 | 仅Azure。 | Google,Azure和AWS。 |
从设备 | Worker | Nodes |
兼容性 | 不太广泛且可定制 | 更全面,高度可定制 |
社区 | 活跃的用户群,可以定期更新软件。 | 提供来自开源社区和Google,Amazon,Microsoft和IBM等大公司的强大支持 |
大型集群 | 对于强群集状态,考虑速度。 | 即使在大型集群中也无需考虑速度,即可提供容器部署和扩展。 |
公司使用 | Spotify,Pinterest,eBay,Twitter等 | 9GAG,Intuit,Buffer,Evernote等 |
Github Star | 53.8K | 54.1K |
Github Fork | 15.5K | 18.7K |
参考
https://www.sumologic.com/blog/kubernetes-vs-docker/
https://www.guru99.com/kubernetes-vs-docker.html