您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

Kubernetes 与 Docker:差异解释

时间:2022-12-30 15:04:05  来源:今日头条  作者:科技狠活与软件技术

了解 Docker 和 Kube.NETes 容器解决方案,并发现 Kubernetes 和 Docker 之间的差异,以选择最适合您需求的解决方案。

Kubernetes 与 Docker:差异解释

容器化已经存在了几十年,但近年来在应用程序开发和现代化方面越来越多地被采用。本文涵盖两种容器解决方案及其用途:

  1. Docker,即容器引擎解决方案,它的容器编排解决方案Docker Compose,以及Docker Swarm,这是一个集群-容器编排解决方案。
  2. Kubernetes 是另一种集群容器解决方案,将其与 Docker Swarm 进行比较,以帮助您选择最符合您要求的解决方案。

什么是容器化?

容器化是应用程序级别的一种虚拟化形式。它旨在将应用程序及其所有依赖项、运行时、库和配置文件打包在一个独立的可执行包中,称为容器。操作系统(OS)不包含在容器中,这使得它与虚拟机(VM)不同,虚拟机(VM)在硬件级别虚拟化并包含操作系统。

虽然虚拟化背后的概念是在多个虚拟机之间共享物理资源,但容器在多个容器之间共享一个操作系统的内核。与虚拟机不同,容器是轻量级的,因为它们不包含操作系统。这就是容器需要几秒钟才能启动的原因。此外,容器可以轻松部署在不同的操作系统(windowslinuxmacOS)和不同的环境(云、VM、物理服务器)上,而无需进行任何更改。

2013 年,Docker Inc. 引入了 Docker,试图标准化容器以在不同平台上广泛使用。一年后,谷歌推出了 Kubernetes 作为管理容器主机集群的解决方案。这两个解决方案的定义将显示Kubernetes 和 Docker 之间的区别。

什么是Docker ?

Docker 是一个开源平台,用于在标准容器中打包和运行应用程序,这些容器可以以相同的行为跨不同的平台运行。使用 Docker,容器化应用程序与主机隔离,这提供了将应用程序交付到运行任何操作系统的任何平台的灵活性。此外,Docker 引擎管理容器并允许它们在同一主机上同时运行。

由于客户端-服务器架构,Docker 由客户端和服务器端组件(Docker 客户端和 Docker 守护进程)组成。客户端和守护进程 (Dockerd) 可以在同一系统上运行,或者您可以将客户端连接到远程守护进程。除了管理其他 Docker 对象(容器、网络、卷、图像等)之外,守护进程还处理客户端发送的 API 请求。

Docker Desktop 是 Docker 客户端和守护进程的安装程序,包括其他组件,如 Docker Compose、Docker CLI(命令行界面)等。它可以安装在不同的平台上:Windows、Linux 和 macOS。

开发人员可以将应用程序设计为在同一主机上的多个容器上运行,这就产生了同时管理多个容器的需要。为此,Docker Inc. 推出了 Docker Compose。Docker vs Docker Compose 可以概括为:Docker 可以管理一个容器,而 Compose 可以管理一台主机上的多个容器。

Docker compose

在同一主机上管理多容器化应用程序是一项复杂且耗时的任务。Docker Compose 是用于单个主机的编排工具,它使用 Compose 文件格式管理在一个主机上定义的多容器化应用程序。

Docker Compose 通过创建一个定义所有容器的 YAML 配置文件,允许同时运行多个容器。Compose 允许您将应用程序拆分到多个容器中,而不是将其构建在一个容器中。您可以将应用程序拆分为称为微服务的子服务,并在容器中运行每个微服务。然后,您可以通过 Compose 运行一条命令来启动所有容器。

Docker swarm

开发人员可以将应用程序设计为在不同主机上的多个容器上运行,这就需要为跨不同主机的容器集群提供编排解决方案。为此,Docker Inc. 推出了 Docker Swarm。

Docker Swarm 或 Swarm 模式下的 Docker 是一个 Docker 引擎集群,可以在安装 Docker 后启用。Swarm 允许在不同主机上管理多个容器,不像 Compose 只允许在同一主机上管理多个容器。

什么是 Kubernetes?

Kubernetes (K8s) 是一种编排工具,用于管理一个或多个主机上的容器。K8s 将主机集群,无论它们是在本地、云端还是在混合环境中,并且可以与 Docker 和其他容器平台集成。谷歌最初开发并引入了 Kubernetes 来自动化容器的部署和管理。K8s 提供了多种功能来支持弹性,例如容器容错、跨主机负载平衡以及自动创建和删除容器。

Kubernetes 管理一个由一台或多台主机组成的集群,这些主机要么是主节点,要么是工作节点。主节点包含 Kubernetes 的控制面板组件,而工作节点包含非控制面板组件(Kubelet 和 Kube-proxy)。建议至少拥有一个由四台主机组成的集群:至少一个主节点和三个工作节点来运行您的测试。

控制面板组件(主节点)

主节点可以跨越多个节点,但只能在一台计算机上运行。建议您避免在主节点上创建应用程序容器。master 负责管理集群。它响应集群事件,做出集群决策,使用容器调度操作,启动一个新的 Pod(同一主机上的一组容器,是 Kubernetes 中的最小单元),运行控制循环等。

  • Apiserver 是控制面板前端,它向其他 Kubernetes 组件公开 API。它处理其他组件的访问和身份验证。
  • Etcd 是一个存储所有集群键/值数据的数据库。每个主节点都应该有一份 etcd 以确保高可用性。
  • Kube scheduler 负责为新创建的 Pod 分配一个节点。
  • Kube 控制管理器是一组控制器进程,它们在单个进程中运行以降低复杂性。控制器进程是一个控制循环,它通过 apiserver 监视集群的共享状态。当集群的状态发生变化时,它会采取措施将其更改回所需的状态。控制管理器监控节点、作业、服务帐户、令牌等的状态。
  • 云控制器管理器是一个可选组件,它允许集群与云提供商的 API 进行通信。它将与云交互的组件与与内部集群交互的组件分开。

节点组件(工作节点)

工作节点是非主节点。有两个节点组件:kubelet 和 kube-proxy。除了像 Docker 这样的容器运行时软件之外,它们还应该在每个工作节点上运行。

  • Kubelet 是运行在工作节点上的代理,以确保每个容器都运行在一个 Pod 中。它管理由 Kubernetes 创建的容器,以确保它们在健康状态下运行。
  • Kube-proxy 是运行在每个工作节点上的网络代理,是 Kubernetes 网络服务的一部分。它允许 Pod 与集群或外部网络之间的通信。

其他组件

  • 服务是在给定时间一起工作的一组逻辑 Pod。与 Pod 不同,服务的 IP 地址是固定的。这修复了删除 Pod 时产生的问题,以便其他 Pod 或对象可以改为与该服务通信。一个服务的一组 Pod 是通过为服务分配一个策略来根据标签过滤 Pod 来选择的。
  • 标签是一对键/值属性,可以分配给 Pod、服务或其他对象。标签允许根据公共属性查询对象并将任务分配给选择。每个对象可以有一个或多个标签。一个键只能在一个对象中定义一次。

Kubernetes 与 Docker Swarm:哪个更好?

Kubernetes 和 Docker 是不同范围的解决方案,可以相互补充以形成强大的组合。因此,Docker 与 Kubernetes 并不是一个正确的比较。Docker 允许开发人员将应用程序打包在隔离的容器中。开发人员可以将这些容器部署到其他机器上,而不必担心与操作系统的兼容性问题。

开发者可以使用 Docker Compose 来管理一台主机上的容器。但是 Docker Compose 与 Kubernetes 也不是一个准确的比较,因为解决方案适用于不同的范围。Compose 的范围仅限于一台主机,而 Kubernetes 的范围是针对一组主机。

当容器和主机数量变多时,开发者可以使用 Docker Swarm 或 Kubernetes 编排 Docker 容器,并在集群中进行管理。Kubernetes 和 Docker Swarm 都是集群设置中的容器编排解决方案。

Kubernetes 在大型环境中比 Swarm 使用更广泛,因为它提供高可用性、负载平衡、调度和监控,以提供永远在线、可靠和健壮的解决方案。

以下几点将突出显示使 K8s 成为值得考虑的更健壮解决方案的差异。

安装

  • Swarm 已经包含在 Docker 引擎中。使用某些 Docker CLI(命令行界面)标准命令,可以轻松启用 Swarm。
  • 不过,Kubernetes 部署更为复杂,因为您需要学习新的非标准命令才能安装和使用它。此外,您还需要学习使用 Kubernetes 中使用的特定部署工具。集群节点应该在 Kubernetes 中手动配置,比如定义 master、controller、scheduler 等。

注意:Kubernetes 安装的复杂性可以通过使用 Kubernetes 即服务 (KaaS) 来克服。各大云平台都提供Kaas;其中包括谷歌云平台 (GCP) 的一部分谷歌 Kubernetes 引擎 (GKE) 和亚马逊弹性 Kubernetes 服务 (EKS)。

可扩展性

两种解决方案都支持可扩展性。但是,使用 Swarm 更容易实现可扩展性,而使用 Kubernetes 则更灵活。

  • Swarm 使用简单的 Docker API 以更简单、更快速的方式按需扩展容器和服务。
  • 另一方面,Kubernetes 支持自动缩放,这使得可伸缩性更加灵活。但由于它使用统一的 API,可扩展性更加复杂。

负载均衡

  • Swarm 具有内置的负载平衡功能,并使用内部网络自动执行。对集群的所有请求都在主机之间进行负载平衡。Swarm 使用 DNS 来负载平衡对服务名称的请求。无需在 Swarm 中手动配置此功能。
  • 应手动配置 Kubernetes 以支持负载平衡。您应该在 Pod 中定义负载均衡策略。因此 Pod 应该被定义为服务。Kubernetes 使用 Ingress 进行负载均衡,这是一个允许从外部网络访问 Kubernetes 服务的对象。

高可用性

这两种解决方案本身都支持高可用性功能。

  • swarm 管理器监视集群的状态并采取措施修复实际状态中的任何更改以满足所需状态。每当工作节点崩溃时,群管理器就会在另一个正在运行的节点上重新创建容器。
  • Kubernetes 还会自动检测故障节点并无缝故障转移到新节点。

监控

  • Swarm 没有内置的监控和日志记录工具。为此,它需要第三方工具,例如 Reimann 或 Elasticsearch,以及 Kibana (ELK)。
  • Kubernetes 内置了 ELK 监控工具,可以原生监控集群状态。此外,还支持一些监控工具来监控其他对象,如节点、容器、Pod 等。

结论

Docker 是一个容器化平台,用于在容器中独立于操作系统构建和部署应用程序。它可以在 Windows、Linux 或 macOS 上使用 Docker Desktop 安装,并包括其他解决方案,如 Compose 和 Swarm。当在同一主机上创建多个容器时,管理它们会变得更加复杂。在这种情况下,可以使用 Docker Compose 轻松管理同一主机上一个应用程序的多个容器。

在大型环境中,多个节点的集群成为确保高可用性和其他高级功能的需要。这就需要像 Docker Swarm 和 Kubernetes 这样的容器编排解决方案。对比这两个平台的特性,可以看出两者都支持可扩展性、高可用性和负载均衡。但是,Swarm 更易于安装和使用,而 Kubernetes 支持自动扩展和内置监控工具。这解释了为什么大多数大型组织将 Kubernetes 与 Docker 用于主要分布在数百个容器中的应用程序。



Tags:Kubernetes   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  Search: Kubernetes  点击:(7)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  Search: Kubernetes  点击:(22)  评论:(0)  加入收藏
聊聊 Kubernetes 网络模型综合指南
这篇详细的博文探讨了 Kubernetes 网络的复杂性,提供了关于如何在容器化环境中确保高效和安全通信的见解。译自Navigating the Network: A Comprehensive Guide to Kubernete...【详细内容】
2024-02-19  Search: Kubernetes  点击:(40)  评论:(0)  加入收藏
Kubernetes Informer基本原理,你明白了吗?
本文分析 k8s controller 中 informer 启动的基本流程不论是 k8s 自身组件,还是自己编写 controller,都需要通过 apiserver 监听 etcd 事件来完成自己的控制循环逻辑。如何高...【详细内容】
2024-01-30  Search: Kubernetes  点击:(41)  评论:(0)  加入收藏
Kubernetes 100个常用命令!
这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令,这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于:• 集...【详细内容】
2024-01-03  Search: Kubernetes  点击:(81)  评论:(0)  加入收藏
管理 Kubernetes 集群这3年,我踩过的十个坑
作者 | Herve Khg编译 | 如烟出品 | 51CTO技术栈(微信号:blog51cto) Kubernetes 作为云计算领域的绝对主角,当仁不让地坐上了容器技术领域的“头把交椅”。它的精髓在于,你只要在...【详细内容】
2023-12-15  Search: Kubernetes  点击:(169)  评论:(0)  加入收藏
在 Kubernetes 中无侵入安装 OpenTelemetry 探针,你学会了吗?
OpenTelemetry 探针OpenTelemetry(简称 Otel,最新的版本是 1.27) 是一个用于观察性的开源项目,提供了一套工具、APIs 和 SDKs,用于收集、处理和导出遥测数据(如指标、日志和追踪信...【详细内容】
2023-12-07  Search: Kubernetes  点击:(175)  评论:(0)  加入收藏
Kubernetes 的调试功能 ,别慌:debug 不行,还有superdebug
这篇内容主要探讨了 Kubernetes 的调试功能,介绍了 kubectl debug 和 kubectl superdebug。它们支持容器挂载并且能够调试一些需要排查问题的 Pod。文章指出了在 Kubernetes...【详细内容】
2023-12-06  Search: Kubernetes  点击:(220)  评论:(0)  加入收藏
Kubernetes 中的服务注册与发现原理分析
对k8s有点了解技术人员,应该都只知道k8s是有服务注册发现的,今天就分析下这个原理,看看怎么实现的。什么是服务注册与发现服务注册与发现是一种机制,用于在集群中动态地发现和连...【详细内容】
2023-11-30  Search: Kubernetes  点击:(167)  评论:(0)  加入收藏
普通Kubernetes Secret足矣
众所周知,Kubernetes secret 只是以 base64 编码的字符串,存储在集群的其余状态旁边的 etcd 中。自 2015 年引入 secret 以来,安全专家就一直在嘲笑这一决定,并寻求其他替代方案...【详细内容】
2023-11-30  Search: Kubernetes  点击:(181)  评论:(0)  加入收藏
▌简易百科推荐
Qt与Flutter:在跨平台UI框架中哪个更受欢迎?
在跨平台UI框架领域,Qt和Flutter是两个备受瞩目的选择。它们各自具有独特的优势,也各自有着广泛的应用场景。本文将对Qt和Flutter进行详细的比较,以探讨在跨平台UI框架中哪个更...【详细内容】
2024-04-12  刘长伟    Tags:UI框架   点击:(6)  评论:(0)  加入收藏
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(22)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(59)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(50)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(40)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(53)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(71)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(91)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(88)  评论:(0)  加入收藏
站内最新
站内热门
站内头条