0
点赞
收藏
分享

微信扫一扫

用Kubernetes编排容器,就看这个

“编排”一词在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](http://nginx.org/).  
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(顾名思义)可以创建:

$ 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编排指南(https://opensource.com/downloads/guide-orchestration-kubernetes)。本指南将教你如何设置本地虚拟集群、部署应用程序、设置图形界面、了解用于配置Kubernetes的YAML文件等。


举报

相关推荐

0 条评论