当前,容器编排主要与kubernetes相关。 但这不是唯一可能的选择。 还有其他编排工具,例如Noashi,这是HashiCorp的开发人员(众所周知的Vagrant虚拟化开发人员)。
通常很难协调业务流程,因为 并非每个人都可以从具有根访问权限的几台服务器访问基础架构,因此,在上一篇文章中
我们使用MicroK8在几分钟之内将Kubernetes部署在桌面上,我们以Django Web应用程序为例描述了在桌面上部署Kubernetes环境的过程。 最初,我计划继续描述MicroK8s环境中的数据库利用。 但是后来我觉得继续使用同样方便的游牧编排工具会很有趣。 我什至不会让德国人来比较不同的编排系统。 对于那些怀疑游牧民族比MicroK8更容易安装的人,我注意到的唯一一件事是 为此,只需从开发人员的服务器复制两个可执行文件(nomad和consul)。
因此,正如我所说,您首先需要下载
nomad和
consul ,它们是所有主要操作系统的现成二进制文件。 您不需要root用户访问权限即可运行这些文件,因此所有内容都可以放在主目录中并以非特权用户身份运行。
而且,当然,如果仅是要对Docker容器重新排序,则应该已经安装了docker。 顺便说一下,nomad不仅可以运行容器,还可以运行常规可执行文件,我们将很快使用它们。
因此,首先您需要创建一个Nomad配置文件。 Nomad可以在服务器模式或客户端模式下启动,也可以在两种模式下同时启动(不建议在生产环境中启动)。 为此,必须将服务器部分,客户端部分或这两个部分都放在配置文件中:
bind_addr = "127.0.0.1" data_dir = "/tmp/nomad" advertise { http = "127.0.0.1" rpc = "127.0.0.1" serf = "127.0.0.1" } server { enabled = true bootstrap_expect = 1 } client { enabled = true options = { "driver.raw_exec.enable" = "1" } } consul { address = "127.0.0.1:8500" }
Nomad由指示所创建的配置文件路径的命令启动:
nomad agent --config nomad/nomad.conf
在配置的最后一部分中,指定了领事将要工作的地址。 Consul也可以在服务器模式,客户端模式以及服务器和客户端模式下工作:
consul agent -server -client 127.0.0.1 -advertise 127.0.0.1 -data-dir /tmp/consul -ui -bootstrap
执行完这些命令后,您可以在浏览器中打开(http://本地主机:4646)-这是UI游牧人,而(http://本地主机:8500)-这是UI领事。
接下来,为Django映像创建一个Dockerfile。 与上一篇文章中的Dockerfile不同
,它与允许通过任何主机访问Django的行不同:
FROM python:3-slim LABEL maintainer="apapacy@gmail.com" WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt RUN django-admin startproject mysite /app \ && echo "\nALLOWED_HOSTS = ['*']\n" >> /app/mysite/settings.py EXPOSE 8000 STOPSIGNAL SIGINT ENTRYPOINT ["python", "manage.py"] CMD ["runserver", "0.0.0.0:8000"]
集装箱建造后:
docker build django/ -t apapacy/tut-django:1.0.1
您需要创建一个任务,在其中创建所需数量的Django容器副本(nomad / django.conf):
job "django-job" { datacenters = ["dc1"] type = "service" group "django-group" { count = 3 restart { attempts = 2 interval = "30m" delay = "15s" mode = "fail" } ephemeral_disk { size = 300 } task "django-job" { driver = "docker" config { image = "apapacy/tut-django:1.0.1" port_map { lb = 8000 } } resources { network { mbits = 10 port "lb" {} } } service { name = "django" tags = ["urlprefix-/"] port = "lb" check { name = "alive" type = "http" path = "/" interval = "10s" timeout = "2s" } } } } }
根据其名称,此配置的所有参数都是可以理解的。 我唯一想解密的是一行:
port "lb" {}
,这意味着该端口将由环境动态分配(您也可以静态设置)。
该任务由以下命令启动:
nomad job run nomad/django.conf
现在,通过UI Nomad(http:// localhost:4646),您可以看到django-job作业的状态;通过UI consul(http:// localhost:8500),您可以看到django服务的状态,以及可以在哪个IP地址和端口上工作django服务的每个副本。 现在,可以通过这些ip地址获得服务,但只能在漫游网络内部使用,而不能从外部访问。 为了发布用于外部访问的服务,您可以使用许多功能。 例如,通过haproxy,但是最简单的方法是通过HashiCorp的另一个模块-fabio。
您也不需要下载它-您可以提供这种保护套,正如我在消息开头提到的那样,它不仅可以与Docker容器一起使用,而且还可以与任何可执行文件一起使用。 为此,请创建另一个任务(nomad / fabio.conf):
job "fabio-job" { datacenters = ["dc1"] type = "system" update { stagger = "60s" max_parallel = 1 } group "fabio-group" { count = 1 task "fabio-task" { driver = "raw_exec" artifact { source = "https://github.com/fabiolb/fabio/releases/download/v1.5.4/fabio-1.5.4-go1.9.2-linux_amd64" } config { command = "fabio-1.5.4-go1.9.2-linux_amd64" } resources { cpu = 100 # 500 MHz memory = 128 # 256MB network { mbits = 10 port "lb" { static = 9999 } port "admin" { static = 9998 } } } } } }
驱动程序
driver = "raw_exec"
用于完成此任务。 默认情况下,并非所有驱动程序都已加载,因此在nomad配置中,我们提供了此功能:
client { enabled = true options = { "driver.raw_exec.enable" = "1" } }
顺便说一下,在新版本的nomad中,加载插件和驱动程序的语法将发生变化,因此这部分配置必须尽快完成。
该任务由以下命令启动:
nomad job run nomad/fabio.conf
之后,可在浏览器中的地址(http:// localhost:9998)上使用UI fabio UI。 并在地址(http:// localhost:9999)上发布django服务。
可以在资源库中找到出版物中显示的配置代码 。
有用的链接
1.dvps.blog/minimalnoie-sravnieniie-swarm-kubernetes-mesos-nomad-rancherpapacy@gmail.com
2019年2月20日