Kubernetes - 像五岁孩子一样解释 Docker 是什么?Kubernetes 的强大之处 我应该在自己的机器上安装它还是选择云端?

2025-05-27

Kubernetes - 像五岁孩子一样解释

什么是 Docker?

Kubernetes 的强大功能

我应该将它安装在我的机器上还是使用云端?

Kubernetes——顾名思义,是一种容器编排工具

就这些了,让我们开始分解吧!不过在此之前,我先简单介绍一下 Docker,主要是因为这是一个相关的主题,对于那些想了解 Kubernetes 但从未真正学习过 Docker 的人来说会很有帮助。

声明一下,这篇文章是对Hassan Sani问题的回复。它并非最全面的解释,而只是为那些想了解 5 年前情况的人提供的简短描述。原问题如下:

什么是 Docker?

Docker是一款软件,其核心功能是将应用程序“打包”成可运行的程序。当然,Docker 的功能远不止于此,我们假设它就是这么干的。例如,假设你用自己喜欢的语言编写了一个应用程序。该应用程序有其用途,而你作为一名开发者,可能知道如何从源代码将其转化为可运行的程序。这可以通过编译(例如 C++、Java)或解释(例如 JavaScript、PHP)等方式实现。无论语言细节如何,原始代码与其实际运行的产品之间都存在着联系。

既然你已经开发好了程序,你肯定想把这份爱分享出去,让其他人也能从你为之付出的大量时间中受益。假设你想和朋友分享你刚刚编写的那个很棒的待办事项应用。他可能拥有从代码构建这个应用的经验,也可能没有。无论哪种情况,这都可能无关紧要,因为如果他使用不同的操作系统 (OS),你很可能使用的是本地安装在你系统上的库,所以代码无论如何都无法在他的系统上运行。

这就是 Docker 的作用所在。还记得我说过它将你的程序以源代码形式转换为可运行文件吗?

但是我的朋友无法todo.exe在他的 Mac 上运行我!

我知道,我知道!有了 Docker,任何操作系统上都能运行任何应用程序,因为 Docker 创建的“包​​”不仅仅是可执行文件,而是预装了应用程序的完整操作系统镜像。

我的申请中似乎有很多不必要的东西!

或许如此,但这不是全部!如今,像alpine这样的软件包在 Linux 发行版中随处可见,而且占用空间仅为 5MB。

要使用它,你只需按照几个简单的步骤(请参阅下面的详细指南)将应用程序代码转换为 Docker 镜像即可。将它分享给你的朋友,现在他只需要找到一个 Docker 运行时来运行它!非常简单!

但...

好吧,你的意思是你的朋友不想为了试用你的待办事项应用而下载额外的软件包。好吧,我已经帮你搞定了。事实证明,Kubernetes 正是能够帮你实现这一点的!

Kubernetes 的强大功能

让我们快速回顾一下目前的状况。你精心编写了一个待办事项应用程序,用来帮助你的朋友们打发时间。由于他们使用的操作系统比较复杂,而你又无法访问,所以你将应用程序打包成了一个 Docker 镜像。现在他们只需运行这个 Docker 镜像即可。但他们无法做到这一点,因为所有那些 Docker 引擎相关的繁琐操作看起来都费劲,而且他们也不想让这些不必要的软件包弄得操作系统混乱不堪。

好的。正如我所说,Kubernetes 已经为你做好了准备。想象一下,你编写的待办事项应用程序可以作为独立的 Web 应用程序运行。这意味着你可以在服务器上的某个地方启动它,并在某个端点(我说的就是你localhost:3000)上使用它。也许你是一位 CLI 忍者,喜欢设置 AWS EC2 服务器、安全组、负载均衡器等;又或者你只想公开你刚刚构建的 Docker 镜像,而不需要进行那些繁琐的设置工作。

我再次引用“ Kubernetes 是一款容器编排软件”这句话;现在我们终于到了揭开编排神秘面纱的阶段。运行任何类型、规模和形态的公开软件,总是需要考虑诸多因素。这些因素可能包括扩展(应对应用程序日益增长的使用量或负载)、交付(向其他用户开放服务)或保护应用程序(限制访问或以其他方式保护应用程序),但也涵盖了更实际的场景。当您的应用程序崩溃时会发生什么?它会自行重启吗?现有会话会怎样?如果您犯了一个错误,导致巨大的内存泄漏,甚至无法访问服务器,该怎么办?

Kubernetes 以一种优雅的方式处理了所有这些问题和考量。它负责编排你的容器,并将打包好的软件绑定到基础设施上,就像 Docker 将代码绑定到可操作的可运行软件一样。

我不会深入解释 Kubernetes 的概念和结构,因为已经有大量的优秀资源比我做得更好,但最重要的是,你应该阅读手册(你可以在这里找到)。我还会附上一个 Dev.to 教程系列,我发现它既有用又相当深入。

你应该知道的事情

  1. Kubernetes 在集群上运行。这意味着通常不止一台(虚拟机);这提供了冗余和可扩展性选项,同时支持核心 Kubernetes 服务(kube-apiserver、kube-controller-manager 和 kube-scheduler)。当然,您还可以使用更多服务来调整集群,使其执行您喜欢的操作,例如 KubeDNS——负责集群内路由的 DNS 服务。
  2. 集群由节点组成。至少可以有一个主节点。这里的“主节点”是关键词,因为 Kubernetes 区分了两种类型的节点:主节点和非主节点。两者之间区别的本质在于,主节点控制着集群内“什么去哪里”的行为。这意味着,如果你在集群上部署(我稍后会讲到)你的应用程序,Kubernetes 主节点将决定应该配置哪些实际资源,以及应该在何处创建哪些对象和结构。非主节点作为架构的扩展,但不包含 kube-apiserver 之类的服务(它们运行 kubelet 和 kube-proxy,从而允许它们“监听”主节点)。
  3. kube-apiserver 是一项为集群提供接口的服务。这意味着,要部署应用程序,您需要向集群提供一个配置文件,该文件准确描述您的需求。例如,您可能需要指定要运行的 Docker 镜像、需要开放哪些端口进行通信、该镜像在哪个域下可用以及需要多少个副本(并行运行的应用程序副本)。完整的配置选项列表非常丰富,您可以使用多种资源类型来提供服务。每种资源类型都有其优点、缺点和特殊之处。
  4. 最常见的是,kubectlCLI 实用程序用于与集群通信。是的,最终你还是需要一些 CLI 技巧,但积极的一面是 - 它一点也不复杂,而且配置文件支持多种格式,包括 JSON 和 YAML,所以整个过程真的非常轻松。

Kubernetes 网站上有更完整的概念列表。如果你想更好地了解每个组件的功能和位置,我建议你快速浏览一下。

我应该将它安装在我的机器上还是使用云端?

最后,在开始在裸机服务器上安装 Kubernetes 集群之前,请先寻找一些可以帮助您完成此任务的工具。我发现kops(Kubernetes 运维工具)是一款非常有用的软件。到目前为止,我看过的关于 AWS 上 Kubernetes 的最佳介绍,要归功于Jeffrey Taylor 的YouTube 系列视频。

文章来源:https://dev.to/marceliwac/kubernetes-explained-like-you-re- Five-gal
PREV
如何成为更快的程序员
NEXT
7 个 CSS 优化技巧,加速页面加载 + CSS 工具列表 全球 CSS 列表