5

5 分钟带你快速了解 Docker 和 Kubernetes

 3 years ago
source link: http://dockone.io/article/1678644
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

随着 Kubernetes 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 Kubernetes 进行对比,不禁问道:Docker 不香吗?

其实 Docker 和 Kubernetes 并非直接的竞争对手,它俩相互依存。 Docker 是一个容器化平台,而 Kubernetes 是 Docker 等容器平台的协调器。

容器化时代来了

虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生。

yAZ7fe7.png!mobile

虚拟化技术演进

物理机时代:多个应用程序可能会跑在一台机器上。

JVJ73y7.png!mobile

物理机时代

虚拟机时代:一台物理机器安装多个虚拟机(VM),一个虚拟机跑多个程序。

e2aEzyJ.png!mobile

虚拟机时代

容器化时代:一台物理机安装多个容器实例(container),一个容器跑多个程序。

jYrqQfR.png!mobile

容器化时代

容器化解决了软件开发过程中一个令人非常头疼的问题,用一段对话描述:

  • 测试人员:你这个功能有问题。
  • 开发人员:我本地是好的啊。

开发人员编写代码,在自己本地环境测试完成后,将代码部署到测试或生产环境中,经常会遇到各种各样的问题。明明本地完美运行的代码为什么部署后出现很多 bug,原因有很多:不同的操作系统、不同的依赖库等,总结一句话就是因为本地环境和远程环境不一致。

容器化技术正好解决了这一关键问题,它将软件程序和运行的基础环境分开。开发人员编码完成后将程序打包到一个容器镜像中,镜像中详细列出了所依赖的环境,在不同的容器中运行标准化的镜像,从根本上解决了环境不一致的问题。

容器化技术的尖刀武器

b26vuya.png!mobile

容器化技术的特点

  • 可移植性:不依赖具体的操作系统或云平台,比如在阿里云或腾讯云直接随意迁移。
  • 占地小:容器只需要其应用程序以及它需要运行的所有容器和库的依赖清单,不需要将所有的依赖库都打包在一起。
  • 共享 bin 和 lib:不同的容器可以共享 bin 和 lib,进一步节省了空间。

Docker 横空出世

2010年一位年轻小伙子在美国旧金山成立了一家名叫『dotCloud』的公司, 开发了叫 Docker 的核心技术,从此开启了容器技术的时代。

BR3E7jZ.jpg!mobile

Docker 公司原 Logo

后面 dotCloud 公司将自己的容器技术进行了简化和标准化,取名为 Docker,就是大家熟悉的鲸鱼 Logo。

rU7JraJ.png!mobile

Docker 新 Logo

2013 年 dotCloud 公司宣布将 Docker 开源,随着越来越多的工程师发现了它的优点, Docker 的人气迅速攀升,成为当时最火爆的开源技术之一。

当前有 30% 以上的企业在其 AWS 环境中使用 Docker,并且这个数字还在继续增长。

jARnQv.jpg!mobile

Docker 使用率越来越高

Docker 怎么用?

其实大多数人谈论 Docker 时说的是 Docker Engine,这只是一个构建和运行的容器。

在运行容器前需要编写Dockerfile,通过 Dockerfile 生成镜像,然后才能运行 Docker 容器。

Dockerfile 定义了运行镜像(image)所需的所有内容,包括操作系统和软件安装位置。一般情况下都不需要从头开始编写 Dockerfile,在 Docker Hub 中有来自世界各地的工程师编写好的镜像,你可以基于此修改。

编排系统的需求催生 Kubernetes

尽管 Docker 为容器化的应用程序提供了开放标准,但随着容器越来越多出现了一系列新问题:

  • 如何协调和调度这些容器?
  • 如何在升级应用程序时不会中断服务?
  • 如何监视应用程序的运行状况?
  • 如何批量重新启动容器里的程序?

解决这些问题需要容器编排技术,可以将众多机器抽象,对外呈现出一台超大机器。现在业界比较流行的有:Kubernetes、Mesos、Docker Swarm。

在业务发展初期只有几个微服务,这时用 Docker 就足够了,但随着业务规模逐渐扩大,容器越来越多,运维人员的工作越来越复杂,这个时候就需要编排系统解救 opers。

7zqAZzj.png!mobile

应用程序的声明周期

一个成熟的容器编排系统需要具备以下能力:

  • 处理大量的容器和用户
  • 负载均衡
  • 鉴权和安全性
  • 管理服务通信
  • 多平台部署

Kubernetes 与 Docker Swarm 江湖恩怨

Nzeim2R.jpg!mobile

Kubernetes vs Docker Swarm

如果你非要拿 Docker 和 Kubernetes 进行比较,其实你更应该拿 Docker Swarm 和 Kubernetes 比较。

Docker Swarm 是 Docker 自家针对集群化部署管理的解决方案,优点很明显,可以更紧密集成到 Docker 生态系统中。

虽说 Swarm 是 Docker 亲儿子,但依旧没有 Kubernetes 流行,不流行很大程度是因为商业、生态的原因,不多解释。

Kubernetes 是做什么用的?

Kubernetes 是 Google 研发的容器协调器,已捐赠给 CNCF,现已开源。

Google 利用在容器管理多年的经验和专业知识推出了 Kubernetes,主要用于自动化部署应用程序容器,可以支持众多容器化工具包括现在非常流行的 Docker。

目前 Kubernetes 是容器编排市场的领导者,开源并公布了一系列标准化方法,主流的公有云平台都宣布支持。

一流的厂商都在抢占标准的制高点,一堆小厂商跟着一起玩,这就叫生态了。国内的大厂商都在干嘛呢?抢社区团购市场,玩资本游戏,哎!

Kubernetes 架构和组件

Kubernetes 由众多组件组成,组件间通过 API 互相通信,归纳起来主要分为三个部分:

  • Controller Manager
  • Node
  • Pod

UJ3AJby.png!mobile

Kubernetes 集群架构图

  • Controller Manager,即控制平面,用于调度程序以及节点状态检测。
  • Node,构成了Kubernetes集群的集体计算能力,实际部署容器运行的地方。
  • Pod,Kubernetes集群中资源的最小单位。

Docker 与 Kubernetes 难舍难分

Docker 和 Kubernetes 在业界非常流行,都已经是事实上的标准。

Docker 是用于构建、分发、运行容器的平台和工具。

而 Kubernetes 实际上是一个使用 Docker 容器进行编排的系统,主要围绕 Pod 进行工作。Pod 是 Kubernetes 生态中最小的调度单位,可以包含一个或多个容器。

Docker 和 Kubernetes 是根本上不同的技术,两者可以很好的协同工作。

开发实践,灵魂追问

没有 Kubernetes 可以使用 Docker 吗?

可以。实际上一些小型公司,在业务不太复杂的情况下都是直接使用 Docker。尽管 Kubernetes 有很多好处,但是众所周知它非常复杂,业务比较简单可以放弃使用 Kubernetes。

没有 Docker 可以使用 Kubernetes 吗?

Kubernetes 只是一个容器编排器,没有容器拿什么编排?

Kubernetes 经常与 Docker 进行搭配使用,但是也可以使用其他容器,如runC、containerted 等。

Docker Swarm 和 Kubernetes 怎么选?

选 Kubernetes。2019 年底 Docker Enterprise 已经出售给 Mirantis,Mirantis 声明要逐步淘汰 Docker Swarm,后续会将 Kubernetes 作为默认编排工具。

最后一个问题

Docker 不香吗?为什么还要用 Kubernetes。

Docker很香,但 Kubernetes 在业务达到一定规模后也得启用。

学会了吗?

原文链接: https://juejin.cn/post/6913568633813729294 ,作者:爱笑的架构师


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK