如何用Kubernetes进行容器编排的超详细指南

语言: CN / TW / HK

CC-BY-SA William Kenlon  http://www.williamkenlon.com

协调这个词对IT行业来说相对较新,它仍然有细微的差别,让那些不是整天在协调的人摸不着头脑或感到困惑。当我向别人描述协调时,通常听起来好像我只是在描述自动化。这并不完全正确。事实上,我写了一整篇文章来区分自动化和协调

一个简单的思考方式是,协调只是自动化的一种形式。要了解你如何从协调中获益,有助于了解它具体自动化的内容。

关于Kubernetes的更多信息

什么是Kubernetes?

免费在线课程。容器、Kubernetes和红帽OpenShift的技术介绍...

电子书。Kubernetes的存储模式

试用OpenShift实战

企业级Kubernetes的介绍

如何用通俗的语言解释Kubernetes

电子书。在Raspberry Pi家庭实验室上运行Kubernetes

Kubernetes小抄

电子书。Kubernetes的SRE和sysadmins指南

最新的Kubernetes文章

了解容器

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

容器引擎是一个运行容器的应用程序。当一个容器被运行时,它是用一种叫做cgroup 的内核机制启动的,它将容器内的进程与容器外运行的进程分开。

运行一个容器

你可以用PodmanDockerLXC在自己的Linux电脑上轻松运行一个容器。它们都使用类似的命令。我推荐Podman,因为它是无守护程序的,这意味着一个进程不需要一直运行就可以启动容器。使用Podman,你的容器引擎只在必要时运行。假设你已经安装了一个容器引擎,你可以通过引用你知道的存在于公共容器中心的容器镜像来运行一个容器。

例如,要运行一个Nginx网络服务器。

$ 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.
Commercial support is available at nginx.com.

Thank you for using nginx. ```

作为网络服务器的安装,这是很容易的。

现在想象一下,你刚刚部署的网站得到了一个意外的流量激增。尽管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

荚和容器的集群

很明显,容器为你部署网络应用和服务提供了多种选择,特别是当你使用正确的工具来管理它们时。Podman和systemd都能很有效地与容器集成,它们可以帮助确保你的容器在需要的时候可以使用。

但你不会真的想整天整夜地坐在你的服务器前,只是为了在整个互联网决定拜访你的时候,手动将容器添加到pod。即使你能做到这一点,容器也只能像它们所运行的计算机一样强大。最终,在单个服务器上运行的容器会耗尽该服务器的带宽和内存。

解决方案是Kubernetes集群:大量的服务器,其中一台作为 "控制平面",所有的配置都被输入,其他许多服务器作为计算节点,以确保你的容器拥有它们需要的所有资源。Kubernetes是一个大项目,还有许多其他项目,如TerraformHelmAnsible,它们与Kubernetes对接,使常见的任务可以编写脚本并变得简单。对于所有级别的系统管理员、架构师和开发人员来说,这是一个重要的话题。

要了解有关Kubernetes的容器编排的所有信息,请下载我们的免费电子书。用Kubernetes进行协调的指南。该指南教你如何设置本地虚拟集群,部署应用程序,设置图形界面,了解用于配置Kubernetes的YAML文件,以及更多。