Установка кластера Nomad с Consul на облачных серверах

0 Акции
0
0
0
0

Введение

В этом руководстве мы настроим кластер HashiCorp Nomad с Consul для обслуживания и обнаружения узлов.
При наличии 3 серверных узлов и произвольного количества клиентских узлов эта конфигурация может служить основой для растущих проектов.
Мы также создадим снимок облака Hetzner для клиентов, что позволит добавлять больше клиентов без ручной настройки.
Кластер работает в частной сети между серверами и поддерживает все функции Nomad и Consul «из коробки», такие как обнаружение служб и управление томами.

В этом руководстве частично соблюдаются рекомендуемые шаги из официального руководства по развертыванию Consul и Nomad.

Предпосылки
  • Учетная запись Hetzner Cloud
  • Базовые знания Linux и команд оболочки
  • Возможность подключения к серверу по ssh
  • Иметь сервер Hetzner

Это руководство было протестировано на серверах Ubuntu 24.04 Hetzner Cloud с Nomad версии 1.9.3 и Consul 1.20.1.

Термины и символы

Команды
local$ <command> این دستور باید روی ماشین محلی اجرا شود.
server$ <command> این دستور باید به‌عنوان root روی سرور اجرا شود.

Шаг 1 — Создание базового изображения

На этом этапе будет использоваться следующий ресурс:

  • 1 облачный сервер Hetzner типа CX22

Начнём с настройки сервера Consul/Nomad на новом сервере CX22. Созданный снимок послужит базовым образом для всех серверов и клиентов кластера на следующих этапах.

В этом руководстве показана настройка для трёх серверов. Это обеспечивает высокую доступность кластера, но не слишком затратно. Настройка одного сервера не рекомендуется, но возможна. В руководстве будут даны комментарии по изменениям, которые необходимо внести для одного или нескольких из трёх серверов в соответствующих шагах.

Перейдите в веб-интерфейс Hetzner Cloud и создайте новый сервер CX22 с Ubuntu 24.04.

Шаг 1.1 – Установка 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

Подготовка сертификатов TLS для Консула
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 dc1

Если вы хотите запустить меньше или больше 3 серверов в кластере Consul, повторите команду консул tls cert create -server -dc dc1 Адаптируйтесь.
Для кластерного сервера требуется только один сертификат, для 5 серверов — 5 сертификатов.

Эти команды создадут 3 сертификата сервера и один сертификат клиента.
Папка /корень/ Теперь он должен содержать как минимум следующие файлы:

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.pem

Шаг 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

Следующий файл конфигурации: /etc/nomad.d/nomad.hcl Добавлять:

datacenter = "dc1"
data_dir = "/opt/nomad"

Шаг 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 и создайте снимок состояния. Этот снимок будет использован в качестве основы для настройки сервера и клиентов кластера.

После успешного создания снимка удалите экземпляр CX22 из этого шага.

Шаг 2 — Настройка кластерных серверов

На этом этапе вы создадите 3 кластерных сервера из базового образа, созданного на этапе 1.
Эти серверы составляют основу вашего кластера и динамически выбирают лидера кластера.

  • 1. Облачная сеть Hetzner
  • 3 облачных сервера Hetzner типа CX22

В консоли Hetzner Cloud Console создайте 3 сервера CX22 из снимка, созданного на шаге 1, и общую облачную сеть.
В этом руководстве используется сеть 10.0.0.0/8, но подойдут и сети меньшего размера.

В последующих шагах руководства будут упомянуты серверы с внутренними адресами 10.0.0.2, 10.0.0.3 и 10.0.0.4.
Если у ваших серверов разные внутренние адреса, замените их на следующих шагах.

Шаг 2.1 — Создание симметричного ключа шифрования

Сначала создайте симметричный ключ шифрования, который будет общим для всех серверов. Сохраните этот ключ в надёжном месте — он понадобится нам на следующих этапах.

server$ consul keygen

Шаг 2.2 – Настройка Consul

Создайте файл конфигурации Consul для каждого сервера. Этот файл будет содержать внутренние IP-адреса остальных серверов.
Для каждого сервера на пути /etc/consul.d/consul.hcl Создайте следующий файл:

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

 

Заменять <CONSUL_KEY> с ключом, сгенерированным из команды консул кейген.
Для других серверов, файл_сертификата и ключевой_файл Измените его так, чтобы он соответствовал сертификату для этого сервера.

Шаг 2.3 – Настройка Nomad

Создайте файл конфигурации Nomad для каждого сервера. Этот файл находится по адресу /etc/nomad.d/nomad.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
}

Заменить адреса 10.0.0.x С внутренним адресом каждого сервера.

Шаг 2.4 – Активация и запуск служб

После создания файлов конфигурации включите и запустите Consul и Nomad как службы systemd:

server$ systemctl enable consul server$ systemctl start consul server$ systemctl enable nomad server$ systemctl start nomad

Проверьте состояние каждой службы с помощью следующих команд:

server$ systemctl status consul
server$ systemctl status nomad

Шаг 2.5 – Проверка кластера консулов

Чтобы проверить состояние кластера Consul, выполните следующую команду:

server$ consul members

Вы должны увидеть список всех серверов и клиентов в кластере. Если возникнут какие-либо проблемы, ещё раз проверьте файлы конфигурации и прочтите логи:

server$ journalctl -u consul

Шаг 2.6 – Проверка кластера Nomad

Проверьте состояние кластера Nomad с помощью следующей команды:

server$ nomad server members

Вы должны увидеть список серверов Nomad в кластере. Если возникнут проблемы, проверьте файлы конфигурации и прочтите логи:

server$ journalctl -u nomad

Шаг 2.7 – Проверка веб-интерфейса

Веб-интерфейсы Consul и Nomad теперь должны быть доступны:

  • Консул: http:// :8500
  • Кочевник: http:// :4646

Заменять <SERVER_IP> с публичным или частным IP-адресом сервера.

Шаг 3 — Добавление клиентов

Теперь вы можете добавить клиентов Nomad. Этот шаг аналогичен настройке сервера, но с ролью клиента.

Шаг 3.1 – Установка и настройка клиентов

Процесс установки клиентов Nomad аналогичен процессу установки серверов. Сначала установите Consul и Nomad на клиентские машины.
Эти шаги включают загрузку пакетов и их установку.

Шаг 3.2 — Настройка Consul для клиентов

Файл конфигурации Consul в пути /etc/consul.d/consul.hcl Создать. Для клиентов настройка проще:

client {
enabled = true
network_interface = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"name\" }}"
}
acl {
enabled = true
}

Обратите внимание, что IP-адреса в retry_join Это внутренние адреса серверов Consul.
Файлы сертификата и ключа (сертификат и ключ) должны соответствовать особенностям клиента.

Шаг 3.3 — Настройка Nomad для клиентов

Поместите файл конфигурации Nomad в путь /etc/nomad.d/nomad.hcl Создать. Для клиентов эта конфигурация включает следующие настройки:

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 }

Адрес рекламировать Он должен указывать на внутренний адрес этого клиента. Также, адреса серверы Они такие же, как серверы Nomad.

Шаг 3.4 – Активация и запуск служб

Как и в случае с серверами, включите и настройте службы Consul и Nomad для клиентов:

client$ systemctl enable consul
client$ systemctl start consul
client$ systemctl enable nomad
client$ systemctl start nomad

Проверьте статус услуг:

client$ systemctl status consul 
client$ systemctl status nomad

Шаг 3.5 – Проверка подключения клиента

Убедитесь, что клиенты подключены к кластеру Consul. На сервере выполните следующую команду:

server$ consul members

Клиенты должны быть видны в списке. Также для Nomad:

server$ nomad node status

Клиенты должны быть в состоянии “готов”. Если возникла проблема, проверьте файлы конфигурации и прочтите логи:

client$ journalctl -u consul
client$ journalctl -u nomad

Шаг 4 — Запуск задач в Nomad

Убедившись в правильности настройки, вы можете определять и запускать свои задания на Nomad.
Создайте файл конфигурации задачи, например:

job "example" { datacenters = ["dc1"] group "example-group" { task "example-task" { driver = "docker" config { image = "nginx:latest" } resources { cpu = 500 memory = 256 } } } }

Назовите вышеуказанный файл пример.кочевник Сохраните и запустите с помощью следующей команды:

server$ nomad job run example.nomad

Проверьте статус выполнения задачи:

server$ nomad job status example

Результат

Вы успешно настроили кластер Consul и Nomad. Теперь вы можете использовать эту инфраструктуру для управления своими задачами и сервисами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться