La orquestación de contenedores está actualmente asociada principalmente con kubernetes. Pero esta no es la única opción posible. Existen herramientas alternativas de orquestación, como nomad, el desarrollador de HashiCorp (conocido como el desarrollador de virtualización Vagrant).
Dominar el trabajo con la orquestación suele ser difícil porque no todos tienen acceso a la infraestructura desde varios servidores con acceso raíz, por lo tanto, en una publicación anterior
Implementamos Kubernetes en el escritorio en unos minutos con MicroK8s, describimos el proceso de implementación del entorno Kubernetes en el escritorio usando la aplicación web Django como ejemplo. Inicialmente, planeé continuar describiendo la explotación de la base de datos en el entorno MicroK8s. Pero luego pensé que sería interesante continuar trabajando con una herramienta de orquestación nómada igualmente conveniente. Ni siquiera daré un alemán para comparar diferentes sistemas de orquestación. Lo único que noto para aquellos que dudan de que Nomad sea aún más fácil de instalar que MicroK8, porque Para hacer esto, simplemente copie los dos archivos ejecutables (nómada y cónsul) del servidor del desarrollador.
Entonces, como dije, primero debes descargar
nómada y
cónsul , que vienen como binarios listos para usar para todos los principales sistemas operativos. No necesita acceso root para ejecutar estos archivos, por lo que todo se puede colocar en el directorio de inicio y ejecutar en nombre de un usuario sin privilegios.
Y, por supuesto, ya debería tener instalada la ventana acoplable, si solo va a reordenar los contenedores de la ventana acoplable. Por cierto, nómada puede ejecutar no solo contenedores, sino también ejecutables regulares, que usaremos pronto.
Entonces, primero debe crear un archivo de configuración nómada. Nomad se puede iniciar en modo servidor o en modo cliente, así como simultáneamente en ambos modos (no recomendado en producción). Para hacer esto, debe colocar la sección del servidor, la sección del cliente o ambas secciones en el archivo de configuración:
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 se inicia mediante un comando que indica la ruta al archivo de configuración creado:
nomad agent --config nomad/nomad.conf
En la última sección de la configuración, se especifica la dirección en la que trabajará el cónsul. Cónsul también puede trabajar en modo servidor, en modo cliente y en modo servidor y cliente:
consul agent -server -client 127.0.0.1 -advertise 127.0.0.1 -data-dir /tmp/consul -ui -bootstrap
Después de ejecutar estos comandos, puede abrir en el navegador (http: // localhost: 4646): este es el nómada de la interfaz de usuario y (http: // localhost: 8500): este es el cónsul de la interfaz de usuario.
A continuación, cree un Dockerfile para la imagen de Django. Desde el Dockerfile en la
publicación anterior, difiere de la línea en la que se permite el acceso a Django a través de cualquier host:
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"]
Después de la construcción del contenedor:
docker build django/ -t apapacy/tut-django:1.0.1
Es necesario crear una tarea en la que se creará el número requerido de réplicas de contenedores 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" } } } } }
Todos los parámetros de esta configuración son bastante comprensibles en función de sus nombres. Lo único que me gustaría descifrar es una línea:
port "lb" {}
, lo que significa que el entorno asignará dinámicamente los puertos (también puede configurarlos estáticamente).
La tarea se inicia con el comando:
nomad job run nomad/django.conf
Ahora a través de la interfaz de usuario nómada (http: // localhost: 4646) puede ver el estado del trabajo django-job, y a través del cónsul de la interfaz de usuario (http: // localhost: 8500) puede ver el estado del servicio django, y también en qué direcciones IP y puertos funciona cada réplica del servicio django. Ahora los servicios están disponibles a través de estas direcciones IP, pero solo dentro de la red nómada, y no son accesibles desde el exterior. Para publicar servicios para acceso externo, puede utilizar una serie de características. Por ejemplo, a través de haproxy, pero la forma más fácil de hacerlo es a través de otro módulo (tercero después de nómada y cónsul) de HashiCorp - fabio.
Tampoco necesitará descargarlo: puede proporcionar este caso nómada que, como mencioné al principio del mensaje, puede funcionar no solo con contenedores de docker, sino también con cualquier archivo ejecutable. Para hacer esto, cree otra tarea (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 } } } } } }
El controlador
driver = "raw_exec"
utiliza para completar esta tarea. No todos los controladores se cargan de manera predeterminada, por lo que en la configuración nómada proporcionamos esta función:
client { enabled = true options = { "driver.raw_exec.enable" = "1" } }
Por cierto, en las nuevas versiones de nómada, la sintaxis de carga de complementos y controladores cambiará, por lo que esta parte de la configuración tendrá que finalizarse pronto.
La tarea se inicia con el comando:
nomad job run nomad/fabio.conf
Después de eso, la interfaz de usuario fabio está disponible en el navegador en la dirección (http: // localhost: 9998). Y en la dirección (http: // localhost: 9999) se publicará el servicio django.
El código para las configuraciones que se muestran en la publicación se puede encontrar en el repositorio .
Enlaces utiles
1.dvps.blog/minimalnoie-sravnieniie-swarm-kubernetes-mesos-nomad-rancherpapacy@gmail.com
20 de febrero de 2019