Введение
В этом руководстве мы настроим кластер HashiCorp Nomad, используя консоль для обнаружения сервисов и узлов. Используя 3 серверных узла и произвольное количество клиентских узлов, это руководство может стать хорошей основой для растущих проектов. Мы также создадим снимок в облаке Hetzner для наших клиентов, что позволит нам добавлять новых клиентов без необходимости их ручной настройки. Этот кластер будет работать в частной сети между серверами и поддерживать все стандартные функции Nomad и консоли, такие как обнаружение сервисов и томов.
В этом руководстве частично соблюдаются шаги, рекомендованные в официальных руководствах по установке Consul и Nomad.
Предпосылки
- Учетная запись Hetzner Cloud
- Введение в Linux и команды терминала
- Возможность подключения к серверу по ssh
Данное руководство было протестировано на серверах Ubuntu 24.04 из Hetzner Cloud с версиями Nomad 1.9.3 и Consul 1.20.1.
Термины и символы
Команды:
local$ <دستور> # این دستور باید در ماشین محلی شما اجرا شود
server$ <دستور> # این دستور باید در سرور بهعنوان کاربر root اجرا شود
Шаг 1 — Создание базового изображения
На этом этапе будут использованы следующие ресурсы:
- 1 облачный сервер Hetzner модели CX22
Начнём с настройки сервера Consul/Nomad на новом сервере CX22 в облаке Hetzner. Полученный снимок будет использоваться в качестве базового образа для всех серверов и клиентов кластера на следующих этапах.
Шаг 1.1 – Установка Consul
Чтобы установить Consul, выполните следующие команды:
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 consulЧтобы добавить функцию автозаполнения в Consul (необязательно):
server$ consul -autocomplete-installШаг 1.2 — Установка исполняемого файла Nomad
Чтобы установить Nomad, выполните следующие команды:
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 nomadЧтобы добавить функцию автозаполнения в Nomad (необязательно):
server$ nomad -autocomplete-installШаг 1.3 – Подготовка служб systemd
Consul и Nomad должны запускаться автоматически при загрузке. Чтобы включить эту функцию, создайте для каждого из них службу systemd.
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_mountsЗатем создайте файл конфигурации /etc/systemd/system/consul.service со следующим содержимым:
[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.targetИ создайте файл конфигурации /etc/systemd/system/nomad.service со следующим содержимым:
[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.targetНе включайте эти службы на данном этапе, так как установка еще не завершена.
Шаг 1.5 — Создание базового снимка
Наконец, остановите сервер в консоли Hetzner Cloud и создайте снимок состояния. Этот снимок будет использован в качестве основы для настройки серверов и клиентов кластера.
Шаг 2 — Настройка кластерных серверов
На этом этапе вы создадите три кластерных сервера из базового образа. Эти серверы станут основой вашего кластера и автоматически выберут лидера кластера.
Мы будем использовать следующие ресурсы:
- 1. Облачная сеть Hetzner
- 3 облачных сервера Hetzner модели CX22
В консоли Hetzner Cloud Console создайте три сервера CX22 из снимка, созданного на шаге 1, и подключите их к общей облачной сети. В этом руководстве будет использоваться сеть 10.0.0.0/8, но подойдут и сети меньшего размера.
Шаг 2.1 — Генерация симметричного ключа шифрования
Сначала создайте симметричный ключ шифрования, который будет общим для всех серверов. Сохраните этот ключ в надёжном месте, так как он понадобится нам на следующих этапах.
server$ consul keygenШаг 2.2 — Распространение сертификатов
Теперь мы можем скопировать нужные сертификаты из шага 1 в каталог конфигурации Consul. Выполните следующую команду на всех серверах:
server$ cp consul-agent-ca.pem /etc/consul.d/Три сертификата сервера, созданные на шаге 1, необходимо распространить так, чтобы каждый сервер получил свой уникальный сертификат с соответствующим ключом. В этом руководстве представлены следующие команды для разных серверов:
[10.0.0.2] server$ cp -a dc1-server-consul-0* /etc/consul.d/
[10.0.0.3] server$ cp -a dc1-server-consul-1* /etc/consul.d/
[10.0.0.4] server$ cp -a dc1-server-consul-2* /etc/consul.d/Шаг 2.3 – Редактирование конфигурации консула
На всех серверах отредактируйте файл конфигурации /etc/consul.d/consul.hcl и добавьте следующее содержимое:
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
}Шаг 2.4 — Настройка Consul и Nomad
Теперь, когда настройки выполнены правильно, вы можете запустить службы Consul и Nomad.
server$ systemctl enable consul
server$ systemctl start consul
server$ systemctl enable nomad
server$ systemctl start nomadДля проверки состояния служб вы можете использовать следующие команды:
server$ systemctl status consul
server$ systemctl status nomad Если все работает правильно, службы Consul и Nomad должны быть запущены, а кластер должен быть правильно настроен.
Шаг 2.5 – Подключение других узлов к кластеру
Теперь, когда основные серверы кластера запущены и работают, пришло время подключить остальные узлы. Чтобы подключить клиентские узлы к кластеру, просто примените те же настройки к конфигурациям Consul и Nomad для новых узлов.
На каждом клиентском узле создайте те же файлы конфигурации, что и на основном сервере, а затем запустите службы:
client$ cp consul-agent-ca.pem /etc/consul.d
/client$ cp dc1-client-consul-* /etc/consul.d
/client$ systemctl enable consul client$ systemctl start consul
client$ systemctl enable nomad client$ systemctl start nomadШаг 3 — Проверка кластера и конфигурации
После запуска серверов и клиентов вы можете проверить состояние кластера с помощью следующих команд:
client$ consul membersЭта команда должна отобразить список узлов кластера. Вы также можете проверить состояние и настройки Nomad, выполнив следующую команду:
client$ nomad statusШаг 4 – Управление кластером
Теперь, когда ваш кластер Consul и Nomad правильно настроен, вы можете управлять им и пользоваться его различными функциями.
Для просмотра состояния кластера и выполнения запросов на управление используйте следующие команды:
информация консула# для получения общей информации о кластере Консулстатус работы кочевника# для просмотра статуса работы Nomadстатус распределения кочевников# для просмотра статуса распределения в кластере Nomad
Использование кластера Nomad
Nomad позволяет выполнять различные задачи, такие как управление заданиями, развертывание модулей и координация с Consul для обнаружения сервисов.
Использование Consul для поиска услуг
Consul обеспечивает автоматическое обнаружение сервисов. Используя веб-интерфейс Consul (доступный по умолчанию через порт 8500), вы можете просматривать доступные сервисы и настраивать их при необходимости.
Результат
В этом руководстве вы создали кластер из серверов HashiCorp Nomad и Consul в частной облачной сети с помощью Hetzner Cloud. Этот кластер можно использовать для управления различными крупномасштабными рабочими нагрузками. В руководстве также подробно рассмотрен запуск новых узлов с помощью Snapshot и настройка серверов.









