编排 这个术语对于 IT 行业来说相对较新,它仍然具有细微差别,让那些不整天从事编排工作的人感到困惑或不解。当我向别人描述编排时,听起来通常像我只是在描述自动化。但这不太正确。事实上,我写了一整篇文章来区分 自动化和编排。
一个简单的思考方式是,编排只是一种自动化形式。要理解您如何从编排中获益,了解它具体自动化了什么是有帮助的。
理解容器
容器是一个文件系统的镜像,其中只包含运行特定任务所需的内容。大多数人不会从头开始构建容器,尽管阅读关于 如何完成 的文章可能会有所启发。相反,更常见的是从公共容器中心拉取现有的镜像。
容器引擎是一个运行容器的应用程序。当容器运行时,它会使用一个名为 cgroup
的内核机制启动,该机制使容器内的进程与容器外部运行的进程隔离。
运行容器
您可以使用 Podman、Docker 或 LXC 在您自己的 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 是一个大型项目,还有许多其他项目,如 Terraform、Helm 和 Ansible,它们与 Kubernetes 交互,使常见任务可编写脚本且易于操作。对于所有级别的系统管理员、架构师和开发人员来说,这都是一个重要的主题。
要了解关于 Kubernetes 容器编排的全部知识,请下载我们的免费电子书: Kubernetes 编排指南。该指南教您如何设置本地虚拟集群、部署应用程序、设置图形界面、理解用于配置 Kubernetes 的 YAML 文件等等。
2 条评论