随着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服务器相互通信。这些组件中的每一个都运行自己的功能,然后公开指标,我们稍后可以收集这些指标以进行监视。我们可以将组件分为三个主要部分。

  1. Master控制平面-主控。
  2. Node节点-窗格安排的位置。
  3. 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

Kubernetes可以代替Docker,可笑相关推荐

  1. 容器编排技术 -- Kubernetes kubectl 与 Docker 命令关系

    容器编排技术 -- Kubernetes kubectl 与 Docker 命令关系 1 docker run 2 docker ps 3 docker attach 4 docker exec 5  ...

  2. 为什么 Kubernetes 要替换 Docker

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  3. kubernetes (k8s) 与 Docker 关系

    kubernetes (k8s) 与 Docker 关系 简要介绍 Docker就像飞机,而Kubernetes就像飞机场. Docker: 是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到 ...

  4. Kubernetes弃用Docker?关于Kubernetes、Docker和containerd的那些事

    00 前情提要 作为后端研发工程师,之前的工作中还是涉及到一部分K8S的工作.在当时的工作场景下,我们通过使用Kubernetes(简称k8s)+docker编排部署的架构方案来提供云原生的在线服务. ...

  5. Kubernetes弃用Docker后怎么办?

    本文转自Rancher Labs 近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后将弃用Docker作为容器运行时.这一消息在云原生领域激起了不小的水 ...

  6. Ubuntu16.04多主机集群上手动部署Kubernetes,配置docker私有registry,配置Kubernetes-dashboard WEB ui

    Ubuntu16.04多主机集群上手动部署Kubernetes,配置docker私有registry,配置Kubernetes-dashboard WEB ui 2017年03月17日 20:51:4 ...

  7. Kubernetes中部署Docker registry2.7.1并通过containerd实现拉取镜像到应用Pod的部署

    这里主要介绍一下私有仓库(HTTPS)在Kubernetes中部署的问题,由于Kubernetes将弃用docker,因此这里主要介绍以下使用containerd替换docker后如何从私有仓库拉取镜 ...

  8. Kubernetes 弃用 Docker !

    多年间,Docker.Kubernetes 被视为云计算时代下开发者的左膀右臂. Docker 作为一种开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的 Linux ...

  9. 不讲武德,Kubernetes 弃用 Docker刷爆了网络,我们公司也慌了!

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...

  10. Docker与Kubernetes系列(一): Docker的基本概念

    这段时间工作中用到了Docker以及Kubernetes(简称K8S),现在整理下我学习Docker以及K8S过程中看的一些比较好的资料,方便自己回顾,也希望能给容器小白一些帮助.给自己定一个小目标, ...

最新文章

  1. 完全平方数(打表+二分)
  2. golang中的死锁
  3. python --- re模块
  4. mysql开启查看慢查询日志[转]
  5. SAP Fiori Lead应用中Accept按钮显示隐藏的逻辑
  6. centos7 致命错误:curl/curl.h:没有那个文件或目录 #include curl/curl.h
  7. hover 插入html元素,解决hover生成border造成的元素移动方法
  8. linux -- CW8.8 编译 提示缺少libstdc++.so.5的error
  9. Dynamic Web TWAIN:网页扫描过程中如何自动检测和删除空白页?
  10. 股市修仙传:群魔乱舞之仙人跳!
  11. 深度解析PHP数组函数array_merge
  12. High Performance Visual Tracking with Siamese Region Proposal Network全文翻译
  13. 学校计算机ip设置路由器,配合路由器设置电脑静态ip方法图文教程
  14. python中functools的partiaethod_设置functools.partial作为Python中的一个实例方法
  15. 赵小楼《天道》《遥远的救世主》深度解析(134)做了你该做的,就要受你该受的
  16. 期货法律法规重点笔记2
  17. IT外企那点儿事(20): 程序员的大侠情结
  18. 如何在macbook上制作MP3同步歌词
  19. 3D成像方法 汇总(原理解析)--- 双目视觉、激光三角、结构光、ToF、光场、全息
  20. 给新手学习MySQL的建议

热门文章

  1. Fiddler工具介绍一
  2. oracle数据库使用odbc导出到access失败
  3. 【跃迁之路】【586天】程序员高效学习方法论探索系列(实验阶段343-2018.09.14)...
  4. css background背景拉伸
  5. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决...
  6. tinyxml初体验
  7. wordpress各种获取url函数总结
  8. wordpress文章,页面,小工具如何使用php代码
  9. linux常用命令全集sed,Linux常用命令之find详解
  10. 数据可视化——ECharts基础