简单易懂的 Kubernetes:容器、Pod 和镜像

Avatar of Lari Maza
Lari Maza

DigitalOcean 提供适用于您旅程各个阶段的云产品。立即开始使用 200 美元的免费额度!

如果您每次听到有人提到“Kubernetes”、“容器”或“Pod”时都会走神,那么这篇文章适合您。本文不会涉及复杂的图表!

作为前端开发人员,您无需从头开始配置基础设施。但是,如果您对它的工作原理有基本的了解,您就可以更独立地部署和回滚应用程序,并且在讨论此主题时也能获得更多信息。

让我们从网络搜索什么是 Kubernetes 开始。

Kubernetes 是一个开源的容器编排系统,用于自动化计算机应用程序的部署、扩展和管理。

维基百科

好的,但是什么是容器呢?

简单来说,容器就像一台虚拟计算机,您可以远程创建、使用、销毁和重新启动它。

现在想象一下,这台计算机实际上位于云端,与数千台其他虚拟计算机一起运行。所有这些都在一台功能强大的真实计算机上运行。您的计算机现在是云中的一个容器。

An illustrated cloud with five computers, each labeled “Container”.

但是等等——您将如何创建和控制这台虚拟计算机?它将如何与同一云中的其他计算机通信?它将如何与外部世界通信?听起来您需要一种方法来编排所有这些。因此:我们的指挥家,Kubernetes(简称 K8s)!

A cloud with five computers labeled “Container” and a maestro below it labeled “K8s”

您可能还听说过Pod这个术语。它们是什么,它们在这里扮演什么角色?简单来说,Pod 是一个或多个容器的组。它们是 K8s 中最小的可部署单元,就像原子一样。

假设您正在构建一个 WordPress 网站,并且需要一台运行 PHP 和 MySQL 数据库的计算机。在同一台计算机上运行两者可能过于繁重;因此,您可以为 PHP 创建一个容器,为 MySQL 创建一个容器,K8s 将帮助它们进行通信。

然后,您将这两个容器分组到一个 Pod 中,该 Pod 代表整个应用程序。这意味着您现在可以通过 Pod 启动和终止整个应用程序。

Cloud with circle inside it labeled “Pod” and two computers inside it each labeled “PHP” and “MySQL”

不过,您可能不会只创建一个 Pod 来在生产环境中部署应用程序——还有更多内容我们现在不需要讨论,但是 您可以在 K8s 文档中阅读有关 Pod 的更多信息。

现在是时候问一个问题:在这种设置中部署应用程序时会发生什么?

K8s 创建一个新的 Pod,将流量重定向到它,并且当它确定一切正常时,它会终止旧的 Pod。同样,还有更多实体参与控制和重定向请求,但我们今天不讨论这些。

但是,有时部署会破坏某些东西,我们需要将应用程序回滚到以前的版本。想象一下,一切都着火了,我们必须从头开始启动所有这些计算机——安装 Linux、Node、Git、克隆存储库、安装依赖项、构建应用程序……这将花费很长时间!如果有一种更快的方法,例如从过去获取快照以快速恢复一切……

USB flash drive labeled “June 15 2:45pm”

登场:镜像!您可能也经常听到这个词。镜像就像一个容器的备份,其中已经安装并配置了所有内容。每次您推送到存储库的主分支时,都会使用您的持续集成 (abbr>CI) 生成一个新的镜像,然后在创建新容器时将其复制到新容器中。

它们有什么用?主要有两个方面:第一个是快速恢复到以前的镜像,就像我们上面的示例一样。但是,当您的网站流量很大,一台计算机无法处理时,它们也很有用。

拥有镜像后,您可以创建任意数量的相同容器,并在所有容器之间复制该镜像,从而提供完全相同的内容。

Four computers all equally labeled “Commit d406cht”

完成了!我们刚刚介绍了应用程序基础设施的工作原理,现在希望您能够将其扩展到您的项目正在使用的任何工具。


非常感谢 Eduardo Shiota 让我能够解释这一点!