Introducción
En este tutorial, configuraremos un clúster HashiCorp Nomad con Consul para el descubrimiento de servicios y nodos.
Con 3 nodos de servidor y una cantidad arbitraria de nodos de cliente, esta configuración puede servir como base para proyectos en crecimiento.
También crearemos una instantánea de la nube Hetzner para los clientes, lo que permitirá agregar más clientes sin configuración manual.
El clúster se ejecuta en una red privada entre servidores y admite todas las funciones de Nomad y Consul listas para usar, como descubrimiento de servicios y administración de volúmenes.
Este tutorial sigue parcialmente los pasos recomendados en la guía oficial de implementación de Consul y Nomad.
Requisitos previos
- Una cuenta de Hetzner Cloud
- Conocimientos básicos de Linux y comandos de shell
- Capacidad de conectarse al servidor con ssh
- Tengo un servidor Hetzner
Este tutorial ha sido probado en servidores Ubuntu 24.04 Hetzner Cloud con Nomad versión 1.9.3 y Consul 1.20.1.
Términos y símbolos
Comandos
local$ <command> این دستور باید روی ماشین محلی اجرا شود.
server$ <command> این دستور باید بهعنوان root روی سرور اجرا شود.
Paso 1 – Crear la imagen base
En este paso se utilizará el siguiente recurso:
- 1 servidor en la nube Hetzner tipo CX22
Comenzaremos configurando un servidor Consul/Nomad en un nuevo servidor CX22. La instantánea creada servirá como imagen base para todos los servidores y clientes del clúster en los siguientes pasos.
Esta guía muestra la configuración de 3 servidores. Esto permite que el clúster tenga alta disponibilidad, pero no es demasiado costoso. No se recomienda configurar un solo servidor, pero es posible. El tutorial incluirá comentarios sobre los cambios necesarios para uno o más de los 3 servidores en los pasos correspondientes.
Vaya a la interfaz web de Hetzner Cloud y cree un nuevo servidor CX22 con Ubuntu 24.04.
Paso 1.1 – Instalación de Consul
Instalar Consul
Para obtener más información sobre las versiones disponibles, visita el sitio web oficial.
server$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
server$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
server$ apt update && apt install consulAhora podemos agregar la funcionalidad de autocompletar a Consul (opcional)
server$ consul -autocomplete-installPreparación de certificados TLS para el Cónsul
server$ consul tls ca create
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -client -dc dc1Si desea ejecutar menos o más de 3 servidores en el clúster Consul, repita el comando cónsul tls cert create -server -dc dc1 Adaptar.
Para un servidor en clúster solo se requiere un certificado; para 5 servidores, se necesitan 5 certificados.
Estos comandos crearán 3 certificados de servidor y un certificado de cliente.
Carpeta /raíz/ Ahora debería contener al menos los siguientes archivos:
server$ ls
consul-agent-ca.pem
consul-agent-ca-key.pem
dc1-server-consul-0.pem
dc1-server-consul-0-key.pem
dc1-server-consul-1.pem
dc1-server-consul-1-key.pem
dc1-server-consul-2.pem
dc1-server-consul-2-key.pem
dc1-client-consul-0.pem
dc1-client-consul-0-key.pemPaso 1.2 – Instalación del binario Nomad
Instalar Nomad
Para obtener más información sobre las versiones disponibles, visita el sitio web oficial.
server$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
server$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
server$ apt update && apt install nomadAñadir autocompletado para Nomad (opcional):
server$ nomad -autocomplete-installEl siguiente archivo de configuración es /etc/nomad.d/nomad.hcl Agregar:
datacenter = "dc1"
data_dir = "/opt/nomad"Paso 1.3 - Preparación de los servicios de systemd
Consul y Nomad deberían iniciarse automáticamente tras reiniciar. Para ello, cree un servicio systemd para cada uno.
Primero, configure todos los permisos:
server$ chown consul:consul dc1-server-consul*
server$ chown consul:consul dc1-client-consul*
server$ chown -R consul:consul /opt/consul
server$ chown -R nomad:nomad /opt/nomad
server$ mkdir -p /opt/alloc_mounts && chown -R nomad:nomad /opt/alloc_mountsEl siguiente archivo de configuración es /etc/systemd/system/consul.servicio Agregar:
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl
[Service]
EnvironmentFile=-/etc/consul.d/consul.env
User=consul
Group=consul
ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.targety el siguiente archivo de configuración para /etc/systemd/system/nomad.servicio Agregar:
[Unit]
Description=Nomad
Documentation=https://www.nomadproject.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
User=nomad
Group=nomad
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/bin/nomad agent -config /etc/nomad.d
KillMode=process
KillSignal=SIGINT
LimitNOFILE=65536
LimitNPROC=infinity
Restart=on-failure
RestartSec=2
OOMScoreAdjust=-1000
TasksMax=infinity
[Install]
WantedBy=multi-user.targetNo habilite estos servicios todavía, ya que la configuración no está completa.
Paso 1.5 – Crear una instantánea base
Finalmente, detenga el servidor en la consola de Hetzner Cloud y cree una instantánea. Esta instantánea se usará como base para configurar el servidor y los clientes del clúster.
Una vez creada correctamente la instantánea, elimine la instancia CX22 de este paso.
Paso 2: Configuración de servidores en clúster
En este paso, creará 3 servidores de clúster a partir de la imagen base creada en el paso 1.
Estos servidores forman la base de su clúster y eligen dinámicamente un líder del clúster.
- 1 Red de nubes de Hetzner
- 3 servidores en la nube Hetzner tipo CX22
En la consola en nube de Hetzner, cree 3 servidores CX22 a partir de la instantánea creada en el paso 1 y una red en nube compartida.
Esta guía utiliza la red 10.0.0.0/8, pero también funcionarán redes más pequeñas.
En los siguientes pasos, el tutorial mencionará servidores con direcciones internas 10.0.0.2, 10.0.0.3 y 10.0.0.4.
Si sus servidores tienen direcciones internas diferentes, reemplácelas en los siguientes pasos.
Paso 2.1 – Crear una clave de cifrado simétrica
Primero, cree una clave de cifrado simétrica que se compartirá entre todos los servidores. Guarde esta clave en un lugar seguro; la necesitaremos en los siguientes pasos.
server$ consul keygenPaso 2.2 – Configuración de Consul
Cree un archivo de configuración de Consul para cada servidor. Este archivo contendrá las direcciones IP internas de los demás servidores.
Para cada servidor en la ruta /etc/consul.d/consul.hcl Crea el siguiente archivo:
datacenter = "dc1" data_dir = "/opt/consul" encrypt = "" ca_file = "/root/consul-agent-ca.pem" cert_file = "/root/dc1-server-consul-0.pem" key_file = "/root/dc1-server-consul-0-key.pem" verify_incoming = true verify_outgoing = true verify_server_hostname = true performance { raft_multiplier = 1 } retry_join = ["10.0.0.2", "10.0.0.3", "10.0.0.4"] bind_addr = "0.0.0.0" client_addr = "0.0.0.0" server = true bootstrap_expect = 3 ui = true
Reemplazar <CONSUL_KEY> con la clave generada a partir del comando generador de claves de cónsul.
Para otros servidores, archivo de certificado y archivo_clave Cámbielo para que coincida con el certificado de ese servidor.
Paso 2.3 – Configuración de Nomad
Cree un archivo de configuración de Nomad para cada servidor. Este archivo se encuentra en la ruta /etc/nomad.d/nomad.hcl Será:
datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "your-symmetric-encryption-key"
tls {
defaults {
ca_file = "/etc/consul.d/consul-agent-ca.pem"
cert_file = "/etc/consul.d/dc1-server-consul-0.pem"
key_file = "/etc/consul.d/dc1-server-consul-0-key.pem"
verify_incoming = true
verify_outgoing = true
},
internal_rpc {
verify_server_hostname = true
}
}
retry_join = ["10.0.0.2"]
bind_addr = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"address\" }}"
acl = {
enabled = true
default_policy = "allow"
enable_token_persistence = true
}
performance {
raft_multiplier = 1
}Reemplazar direcciones 10.0.0.x Con la dirección interna de cada servidor.
Paso 2.4 – Activar y ejecutar servicios
Después de crear los archivos de configuración, habilite e inicie Consul y Nomad como servicios systemd:
server$ systemctl enable consul server$ systemctl start consul server$ systemctl enable nomad server$ systemctl start nomadCompruebe el estado de cada servicio utilizando los siguientes comandos:
server$ systemctl status consul
server$ systemctl status nomadPaso 2.5 – Verificación del clúster Consul
Para comprobar el estado del clúster Consul, ejecute el siguiente comando:
server$ consul membersDebería ver una lista de todos los servidores y clientes del clúster. Si hay algún problema, revise los archivos de configuración y lea los registros:
server$ journalctl -u consulPaso 2.6 – Verificación del clúster Nomad
Verifique el estado del clúster Nomad usando el siguiente comando:
server$ nomad server membersDebería ver una lista de servidores Nomad en el clúster. Si hay algún problema, revise los archivos de configuración y lea los registros:
server$ journalctl -u nomadPaso 2.7 – Verificar la interfaz web
Las interfaces web de Consul y Nomad ahora deberían estar disponibles:
- Cónsul:
http:// :8500 - Nómada:
http:// :4646
Reemplazar <SERVER_IP> con la dirección IP pública o privada del servidor.
Paso 3 – Agregar clientes
Ahora puedes agregar clientes de Nomad. Este paso es similar a la configuración del servidor, pero con el rol de cliente.
Paso 3.1 – Instalar y configurar clientes
Los pasos de instalación para los clientes de Nomad son similares a los de los servidores. Primero, instale Consul y Nomad en los equipos cliente.
Estos pasos incluyen la descarga de paquetes y su instalación.
Paso 3.2 – Configuración de Consul para clientes
Un archivo de configuración de Consul en la ruta /etc/consul.d/consul.hcl Crear. Para los clientes, la configuración es más sencilla:
client {
enabled = true
network_interface = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"name\" }}"
}
acl {
enabled = true
}Tenga en cuenta que las direcciones IP en reintentar_unirse Estas son las direcciones internas de los servidores de Consul.
Los archivos de certificado y clave (cert y clave) deben ser específicos del cliente.
Paso 3.3 – Configuración de Nomad para clientes
Coloque el archivo de configuración de Nomad en la ruta /etc/nomad.d/nomad.hcl Crear. Para los clientes, esta configuración incluye los siguientes ajustes:
datacenter = "dc1" data_dir = "/opt/nomad" bind_addr = "0.0.0.0" advertise { http = "10.0.1.2:4646" rpc = "10.0.1.2:4647" serf = "10.0.1.2:4648" } client { enabled = true network_interface = "eth0" servers = ["10.0.0.2:4647", "10.0.0.3:4647", "10.0.0.4:4647"] } tls { http = true rpc = true ca_file = "/root/consul-agent-ca.pem" cert_file = "/root/dc1-client-consul-0.pem" key_file = "/root/dc1-client-consul-0-key.pem" verify_server_hostname = true }DIRECCIÓN anunciar Debe apuntar a la dirección interna de este cliente. Además, las direcciones servidores Son lo mismo que los servidores Nomad.
Paso 3.4 – Activar y ejecutar servicios
Al igual que con los servidores, habilite y configure los servicios Consul y Nomad para los clientes:
client$ systemctl enable consul
client$ systemctl start consul
client$ systemctl enable nomad
client$ systemctl start nomadConsultar el estado de los servicios:
client$ systemctl status consul
client$ systemctl status nomadPaso 3.5 – Verificar la conectividad del cliente
Asegúrese de que los clientes estén conectados al clúster de Consul. Desde un servidor, ejecute el siguiente comando:
server$ consul membersLos clientes deberían estar visibles en la lista. Además, para Nomad:
server$ nomad node statusLos clientes deben estar listos. Si hay algún problema, revise los archivos de configuración y lea los registros:
client$ journalctl -u consul
client$ journalctl -u nomadPaso 4: Ejecución de tareas en Nomad
Después de garantizar una configuración adecuada, puede definir y ejecutar sus trabajos en Nomad.
Cree un archivo de configuración de tareas, por ejemplo:
job "example" { datacenters = ["dc1"] group "example-group" { task "example-task" { driver = "docker" config { image = "nginx:latest" } resources { cpu = 500 memory = 256 } } } }Nombra el archivo anterior ejemplo.nómada Guarde y ejecute con el siguiente comando:
server$ nomad job run example.nomadComprobar el estado de la ejecución de la tarea:
server$ nomad job status exampleResultado
Ha configurado correctamente un clúster de Consul y Nomad. Ahora puede usar esta infraestructura para gestionar sus tareas y servicios.









