Docker 是一个容器化平台,而 Kubernetes 则为众多容器运行时管理容器。Kubernetes 支持多种容器运行时。其中一些如下:

  • Docker
  • 容器
  • CRI-O
  • Mirantis 容器运行时

什么是容器?

容器将应用软件与其依赖关系打包,以便从其运行的基础架构中抽象出来。现在,容器基本上提供了一种逻辑打包机制,可以将应用程序从其实际运行的环境中抽象出来。现在,无论目标环境是私有数据中心、公共云,甚至是开发人员的个人笔记本电脑,这种解耦都能让基于容器的应用轻松、一致地部署。

什么是 Kubernetes?

Kubernetes 是在谷歌平台(GO语言)上开发的一个容器管理系统。它可以帮助你在各种类型的物理、虚拟和云环境中管理容器化应用程序。谷歌 Kubernetes 是一种高度灵活的工具,即使是复杂的应用程序也能始终如一地交付。应用程序可在由 100 到 1000 个独立服务组成的集群上运行。

Kubernetes 的主要特点

它具有以下大量功能:

  • 随处运行: 它是一款开源工具,让您可以自由利用内部部署、公共云和混合云基础设施,将工作负载移动到任何地方。
  • 自动化: 例如,Kubernetes 会为你控制将要启动的容器的可服务主机。
  • 交互: Kubernetes 可以同时管理更多集群,不仅可以横向扩展,还可以纵向扩展。
  • 附加服务: 除了管理容器,Kubernetes 还提供安全网络和存储服务。
  • 自我监控: 它还提供自我监控功能,因为它会不断检查节点和容器本身的健康状况。

Kubernetes 的优势

  • 自动容器调度: Kubernetes 可以将容器从一个节点重新安排到另一个节点,以提高资源利用率。这意味着你可以用同样数量的机器完成更多工作,从而节省开支。
  • 服务发现: 当你有一堆服务需要相互通信时,它们能否第一时间找到对方至关重要。这一点尤其重要,因为容器是自动调度的,有可能被移动。值得庆幸的是,Kubernetes 让容器之间的通信变得非常容易。
  • 自我修复: Kubernetes 会自动监控容器,并在容器崩溃或被终止时对其进行重新调度。如果容器所在的节点发生故障,Kubernetes 也会重新安排容器。
  • 滚动升级: 幸运的是,Kubernetes 能够执行滚动更新。在这种情况下,旧容器会被明智地替换为新版本的相同容器,而不会中断正在运行的应用程序所提供的服务。

Kubernetes 的缺点

  • 学习曲线较长: Kubernetes 并不是一个容易学习的平台,即使对于最有经验的开发人员和 DevOps 工程师来说也是如此。
  • 安装和配置: 如果手动安装 Kubernetes,还需要配置安全性,包括创建证书授权和签发证书。
  • 没有高可用性: Kubernetes 默认不提供高可用性模式,要创建容错集群,必须为 ETCD 集群手动配置 HA。
  • 兼容性问题: 有时,当你使用容器时,可能需要使用带有社区的 Docker。但当时社区与现有的 Docker CLI 和合成工具不兼容。而且在迁移过程中,每当要迁移到无状态时,都需要付出更多努力。

什么是 Docker?

Docker 是一个用于将软件容器化的平台,使用该平台,您可以轻松地构建应用程序,并将应用程序所需的依赖关系打包到容器中,这些容器可以很容易地运送到其他机器上运行。Docker 简化了 DevOps 方法,允许开发人员创建称为映像的模板,使用这些模板可以创建称为容器的轻量级虚拟机。

Docker 让软件行业的工作变得更简单,使他们能够自动化基础设施、隔离应用程序、保持一致性并提高资源利用率。

Docker 的主要特点

  • 易于配置: 这是 Docker 的主要特点之一,通过它,你可以在更短的时间和精力内轻松部署代码,因为你可以在各种环境中使用 Docker。基础架构的要求不再与应用程序的环境相关联,有助于更轻松、更快速地配置系统。
  • 可以使用 swarm: 它是 Docker 容器的集群和调度工具,SO swarm 将 Docker API 用作前端,可帮助我们将各种工具用于控制器,还可帮助我们将 Docker 主机的集群控制为单个虚拟主机,它是一组自组织引擎,用于启用可插拔的后端。
  • 管理安全性: Docker 允许我们在群集中保存机密。然后选择让服务访问某些机密。它包括对引擎的一些重要命令,如秘密检查、秘密创建等。
  • 服务: 服务是一个任务列表,可让我们指定集群内容器的状态。每个任务代表一个应该运行的容器实例,Swan 会将它们调度到各个节点。
  • 提高生产力: Docker 不仅有助于在隔离的环境中运行应用程序,还能减少资源。

Docker 的优势

  • 只需构建一次应用程序: 容器内的应用程序可以在安装了 Docker 的系统上运行。因此,无需在不同平台上多次构建和配置应用程序。
  • 更多睡眠,更少担忧:使用 Docker,您可以在容器内测试应用程序,并在容器内发货。这意味着测试环境与应用程序在生产环境中运行的环境完全相同。
  • 可移植性: Docker 容器可在任何平台上运行。它可以运行在任何本地系统、亚马逊 EC2、谷歌云、Virtual Box 等平台上。
  • 版本控制: 与 git 一样,Docker 也有一个内置的版本控制系统。Docker 容器就像 GIT 资源库一样,允许你提交对 Docker 镜像的更改并对其进行版本控制。

Docker 的缺点

  • 功能缺失: 功能缺失。有大量功能正在开发中,如容器自我注册、从主机向容器复制文件的自我检查等。
  • 容器中的数据: 当容器宕机后,它需要一个备份和恢复策略,尽管我们已经有了几种解决方案,但它们还不是自动化的,或者说可扩展性不强。
  • 图形应用程序: Docker 设计用于部署不需要图形界面的服务器应用程序,但也有一些创造性的策略,如 x11 视频转发,可用于在容器内运行图形用户界面应用程序。
  • 这样做的好处不多: 一般来说,只有设计为离散的微服务运行的应用程序才能从容器中获得最大收益,否则,Docker 唯一真正的好处就是它可以通过提供简易的软件包来简化应用程序的交付。

Docker 还是 Kubernetes?哪一个适合?
与 Kubernetes 相比,Docker 需要的设置和配置更少。例如,您可以使用 YAML 文件部署应用程序,自动实现适当的状态,在集群中的容器之间实现负载平衡,并为您的服务提供安全性和访问控制。如果负担不重,选择 Docker Swarm 而不是 Kubernetes 是一个明智的选择。

Kubernetes 的初始设置比较困难,但它有很多功能。我们可以使用 Kubernetes 管理网络入口和可观测性。大多数云平台都将 Kubernetes 作为 EKS、AKS 和 GKS 等服务提供,让 Kubernetes 从自动扩展、负载平衡等功能中受益。在 Kubernetes 中部署的 pod 和容器可以使用命名空间进行隔离。如果你想要高安全性和出色的可用性,Kubernetes 是一个绝佳的选择。

将 Kubernetes 与 Docker 结合使用
当与 Docker 一起使用时,Kubernetes 将充当容器编排工具,而 Docker 将协助我们创建在 Kubernetes 中执行容器所需的映像。所有容器部署、扩展和调度到集群中的正确节点都可以由 Kubernetes 处理。

Kubernetes和Docker的区别

Kubernetes Docker
Kubernetes 是一个开源平台,用于维护和部署一组容器 Docker 是一个工具,用于在轻量级容器中自动部署应用程序,以便应用程序在不同环境中高效运行。
在实践中,Kubernetes 最常与 Docker 同时使用,以便更好地控制和植入容器化应用程序。 有了 Docker,多个容器在同一硬件上运行的效率要比虚拟机环境高得多,Docker 的生产率也极高。
应用程序以 pod、部署和服务的组合形式部署。 应用程序以服务的形式部署。
它支持集群中容器的自动扩展。 Docker 不支持自动扩展。
健康检查分为两种:有效性和就绪性。 健康检查仅限于服务。
难以设置和配置。 Docker 的设置和安装非常简单。
它没有丰富的文档,但比 Docker 少很多。但它确实包含了从安装到部署的所有内容。 Docker 文档更有效、更广泛、功能更强,包括从安装到部署的所有内容、快速入门说明以及更详细的教程。
与 Docker 相比,Kubernetes 的安装相当困难,甚至 Kubernetes 的命令也比 Docker 复杂得多。 Docker 的安装相当简单,只需使用较少的命令,就能在虚拟机甚至云上安装 Docker。
Azure、buffer、intel、Evernote 和 Shopify 使用 Kubernetes。 谷歌、亚马逊、ADP、VISA、公民银行和大都会人寿等公司使用 Docker。