Kubernetes 容器编排指南

要了解关于 Kubernetes 容器编排的全部知识,请下载我们的新电子书。
3 位读者喜欢这篇文章。
CC-BY-SA William Kenlon  http://www.williamkenlon.com

William Kenlon。 CC BY-SA 4.0

编排 这个术语对于 IT 行业来说相对较新,它仍然具有细微差别,让那些不整天从事编排工作的人感到困惑或不解。当我向别人描述编排时,听起来通常像我只是在描述自动化。但这不太正确。事实上,我写了一整篇文章来区分 自动化和编排

一个简单的思考方式是,编排只是一种自动化形式。要理解您如何从编排中获益,了解它具体自动化了什么是有帮助的。

理解容器

容器是一个文件系统的镜像,其中只包含运行特定任务所需的内容。大多数人不会从头开始构建容器,尽管阅读关于 如何完成 的文章可能会有所启发。相反,更常见的是从公共容器中心拉取现有的镜像。

容器引擎是一个运行容器的应用程序。当容器运行时,它会使用一个名为 cgroup 的内核机制启动,该机制使容器内的进程与容器外部运行的进程隔离。

运行容器

您可以使用 PodmanDockerLXC 在您自己的 Linux 计算机上轻松运行容器。它们都使用类似的命令。我推荐 Podman,因为它无守护进程,这意味着不必一直运行进程容器才能启动。使用 Podman,您的容器引擎仅在必要时运行。假设您已安装容器引擎,您只需引用您知道存在于公共容器中心上的容器镜像即可运行容器。

例如,要运行 Nginx Web 服务器

$ podman run -p 8080:80 nginx
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
[...]

打开一个单独的终端,使用 curl 进行测试

$ curl --no-progress-meter localhost:8080 | html2text
# Welcome to nginx!

If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.

For online documentation and support please refer to
[nginx.org](https://nginx.ac.cn/).  
Commercial support is available at [nginx.com](http://nginx.com/).

_Thank you for using nginx._

作为 Web 服务器安装而言,这非常容易。

现在想象一下,您刚刚部署的网站流量意外激增。您没有为此做好计划,即使 Nginx 是一个非常有弹性的 Web 服务器,一切都有其极限。在足够的并发流量下,即使是 Nginx 也可能崩溃。现在怎么办?

维持容器

容器很廉价。换句话说,正如您刚刚体验到的,它们很容易启动。

您也可以使用 systemd 使容器具有弹性,以便容器即使在崩溃时也能自动重新启动。这就是使用 Podman 派上用场的地方。Podman 有一个命令可以基于现有容器生成 systemd 服务文件

$ podman create --name mynginx -p 8080:80 nginx
$ podman generate systemd mynginx \
--restart-policy=always -t 5 -f -n

您可以作为普通用户启动您的容器服务

$ mkdir -p ~/.config/systemd/user
$ mv ./container-mynginx.service ~/.config/systemd/user/
$ systemctl enable --now --user container-mynginx.service
$ curl --head localhost:8080 | head -n1
HTTP/1.1 200 OK

运行容器 Pod

由于容器很廉价,您可以轻松启动多个容器来满足对服务的需求。通过两个(或更多)提供相同服务的容器,您可以增加劳动力的更好分配将成功管理传入请求的可能性。

您可以将容器组合成 Pod,Podman(顾名思义)可以创建 Pod

$ systemctl stop --user container-myngnix
$ podman run -dt --pod new:mypod -p 8080:80 nginx
$ podman pod ps
POD ID     NAME   STATUS  CREATED  INFRA ID  # OF CONTAINERS
26424cc... mypod  Running 22m ago  e25b3...   2

这也可以使用 systemd 自动化

$ podman generate systemd mypod \
--restart-policy=always -t 5 -f -n

Pod 和容器集群

可能很明显,当您使用正确的工具来管理它们时,容器为如何部署网络应用程序和服务提供了多样化的选择。Podman 和 systemd 都与容器非常有效地集成,它们可以帮助确保您的容器在需要时可用。

但是您真的不想整天整夜坐在服务器前,只是为了在整个互联网决定访问您时手动向 Pod 添加容器。即使您可以做到这一点,容器的健壮性也仅限于它们运行的计算机。最终,在单个服务器上运行的容器确实会耗尽该服务器的带宽和内存。

解决方案是 Kubernetes 集群:大量服务器,其中一个充当“控制平面”,所有配置都在其中输入,而许多其他服务器充当计算节点,以确保您的容器拥有所需的所有资源。Kubernetes 是一个大型项目,还有许多其他项目,如 TerraformHelmAnsible,它们与 Kubernetes 交互,使常见任务可编写脚本且易于操作。对于所有级别的系统管理员、架构师和开发人员来说,这都是一个重要的主题。

要了解关于 Kubernetes 容器编排的全部知识,请下载我们的免费电子书: Kubernetes 编排指南。该指南教您如何设置本地虚拟集群、部署应用程序、设置图形界面、理解用于配置 Kubernetes 的 YAML 文件等等。

接下来阅读什么
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算行业工作,经常同时从事这两个行业。

2 条评论

您的文章提供了惊人的信息,非常感谢您抽出时间分享如此精彩的文章。

我来阅读这篇文章和电子书的时机再好不过了。非常感谢!:)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.