Базовая настройка (не рекомендуется):
- Скачать кочевой бинар и сделать его исполняемым:
$ wget https://releases.hashicorp.com/nomad/1.0.5/nomad_1.0.5_linux_amd64.zip $ unzip nomad_1.0.5_linux_amd64.zip $ mv nomad /usr/local/bin/
- Создать каталог конфигураций и каталог данных:
$ sudo mkdir --parents /opt/nomad $ sudo mkdir --parents /opt/data/redis $ sudo mkdir --parents /etc/nomad.d $ sudo chmod 700 /etc/nomad.d $ sudo chmod 700 /opt/data $ sudo touch /etc/nomad.d/nomad.hcl $ sudo touch /etc/nomad.d/server.hcl $ sudo touch /etc/nomad.d/client.hcl
- Добавьте эту конфигурацию в
/etc/nomad.d/Nomad.hcl
Файл конфигурации
datacenter = "dc1" data_dir = "/opt/nomad"
- Добавьте эту конфигурацию в
/etc/nomad.d/client.hcl
Файл конфигурации
client { enabled = true host_volume "redis_data" { path = "/opt/data/redis" read_only = false } } plugin "docker" { config { volumes { enabled = true selinuxlabel = "z" } } }
- Добавьте эту конфигурацию в
/etc/nomad.d/server.hcl
Файл конфигурации
acl { enabled = true } server { enabled = true bootstrap_expect = 1 }
- Создайте файл сервиса Nomad
$ sudo touch /etc/systemd/system/nomad.service
- Добавьте эту конфигурацию в файл службы Nomad
/etc/systemd/system/nomad.service
[Unit] Description=Nomad Documentation=https://nomadproject.io/docs/ [Service] ExecStart=/usr/local/bin/nomad agent -config /etc/nomad.d Restart=on-failure RestartSec=2 [Install] WantedBy=multi-user.target
- Начать кочевник
sudo systemctl enable nomad sudo systemctl start nomad sudo systemctl status nomad
- Общие секреты ACL
$ nomad acl bootstrap Accessor ID = a8b724ef-b5eb-21c0-1a68-b0d3616e1e62 Secret ID = 07fe0ee6-59bc-8ea0-aeeb-9b4e9edcb555 Name = Bootstrap Token Type = management Global = true Policies = n/a Create Time = 2021-05-10 21:05:21.498072284 +0000 UTC Create Index = 10 Modify Index = 10 $ export NOMAD_TOKEN=07fe0ee6-59bc-8ea0-aeeb-9b4e9edcb555
- Создайте свое первое задание для развертывания контейнера без сохранения из пользовательского интерфейса сервера
http://127.0.0.1:4646/ui
job "api" { datacenters = ["dc1"] group "example" { task "server" { driver = "docker" config { image = "hashicorp/http-echo:0.2.1" args = [ "-listen", ":5678", "-text", "hello world", ] } resources { network { mbits = 10 port "http" { static = "5678" } } } } } }
- И Еще один для контейнера Stateful
job "cache" { datacenters = ["dc1"] group "redis" { volume "redis_data" { type = "host" read_only = false source = "redis_data" } task "server" { driver = "docker" volume_mount { volume = "redis_data" destination = "/data" read_only = false } config { image = "redis:4-alpine" labels = { "sh.hippo.service" = "redis" "sh.hippo.service_type" = "cache" } port_map { http = 6379 } command = "redis-server" args = [ "--requirepass", "mystery", ] } env = { HEALTHY_FOR = -1, } resources { cpu = 100 memory = 256 network { mbits = 10 port "http" { static = "6379" } } } } } }
Настройка мульти -узлов (рекомендуется):
Чтобы полностью понять, как должен выглядеть кластер кочевников, пожалуйста, Проверьте это руководство!
Предполагая, что у нас есть два сервера, один для сервера Nomad (лидер) и другой для клиента. Оба сервера в DC1
Анкет Сервер лидера имеет публичный IP $ Server_public_ip
и частный IP $ Server_private_ip
Анкет
Сначала мы запускаем лидера или сервера Nomad, выполнив следующие шаги:
- Скачать кочевой бинар и сделать его исполняемым:
$ wget https://releases.hashicorp.com/nomad/1.0.5/nomad_1.0.5_linux_amd64.zip $ unzip nomad_1.0.5_linux_amd64.zip $ mv nomad /usr/local/bin/
- Создать каталог конфигураций и каталог данных:
$ sudo mkdir --parents /opt/nomad $ sudo mkdir --parents /opt/data/redis $ sudo mkdir --parents /etc/nomad.d $ sudo chmod 700 /etc/nomad.d $ sudo chmod 700 /opt/data $ sudo touch /etc/nomad.d/nomad.hcl $ sudo touch /etc/nomad.d/server.hcl
- Добавьте эту конфигурацию в
/etc/nomad.d/Nomad.hcl
Файл конфигурации
datacenter = "dc1" data_dir = "/opt/nomad"
- Добавьте эту конфигурацию в
/etc/nomad.d/server.hcl
Файл конфигурации
acl { enabled = true } server { enabled = true bootstrap_expect = 1 } bind_addr = "$SERVER_PUBLIC_IP" addresses { http = "$SERVER_PUBLIC_IP" rpc = "$SERVER_PRIVATE_IP" serf = "$SERVER_PRIVATE_IP" } advertise { http = "$SERVER_PUBLIC_IP:4646" rpc = "$SERVER_PRIVATE_IP:4647" serf = "$SERVER_PRIVATE_IP:4648" }
- Создайте файл сервиса Nomad
$ sudo touch /etc/systemd/system/nomad.service
- Добавьте эту конфигурацию в файл службы Nomad
/etc/systemd/system/nomad.service
[Unit] Description=Nomad Documentation=https://nomadproject.io/docs/ [Service] ExecStart=/usr/local/bin/nomad agent -config /etc/nomad.d Restart=on-failure RestartSec=2 [Install] WantedBy=multi-user.target
- Начать кочевник
sudo systemctl enable nomad sudo systemctl start nomad sudo systemctl status nomad
- Общие секреты ACL
$ nomad acl bootstrap -address=http://$SERVER_PUBLIC_IP:4646 Accessor ID = a8b724ef-b5eb-21c0-1a68-b0d3616e1e62 Secret ID = 07fe0ee6-59bc-8ea0-aeeb-9b4e9edcb555 Name = Bootstrap Token Type = management Global = true Policies = n/a Create Time = 2021-05-10 21:05:21.498072284 +0000 UTC Create Index = 10 Modify Index = 10 $ export NOMAD_TOKEN=07fe0ee6-59bc-8ea0-aeeb-9b4e9edcb555
Затем мы запустим клиент, выполнив следующие шаги:
- Скачать кочевой бинар и сделать его исполняемым:
$ wget https://releases.hashicorp.com/nomad/1.0.5/nomad_1.0.5_linux_amd64.zip $ unzip nomad_1.0.5_linux_amd64.zip $ mv nomad /usr/local/bin/
- Создать каталог конфигураций и каталог данных:
$ sudo mkdir --parents /opt/nomad $ sudo mkdir --parents /opt/data/redis $ sudo mkdir --parents /etc/nomad.d $ sudo chmod 700 /etc/nomad.d $ sudo chmod 700 /opt/data $ sudo touch /etc/nomad.d/nomad.hcl $ sudo touch /etc/nomad.d/client.hcl
- Добавьте эту конфигурацию в
/etc/nomad.d/Nomad.hcl
Файл конфигурации
datacenter = "dc1" data_dir = "/opt/nomad"
- Добавьте эту конфигурацию в
/etc/nomad.d/client.hcl
Файл конфигурации
client { enabled = true servers = ["$SERVER_PRIVATE_IP:4647"] host_volume "redis_data" { path = "/opt/data/redis" read_only = false } } plugin "docker" { config { volumes { enabled = true selinuxlabel = "z" } } }
- Создайте файл сервиса Nomad
$ sudo touch /etc/systemd/system/nomad.service
- Добавьте эту конфигурацию в файл службы Nomad
/etc/systemd/system/nomad.service
[Unit] Description=Nomad Documentation=https://nomadproject.io/docs/ [Service] ExecStart=/usr/local/bin/nomad agent -config /etc/nomad.d Restart=on-failure RestartSec=2 [Install] WantedBy=multi-user.target
- Начать кочевник
sudo systemctl enable nomad sudo systemctl start nomad sudo systemctl status nomad
Плагины CNI в кочевнике
Nomad использует плагины CNI, когда используется мостовая сеть. Для установки плагинов CNI:
$ curl -L -o cni-plugins.tgz https://github.com/containernetworking/plugins/releases/download/v0.8.0/cni-plugins-linux-amd64-v0.8.0.tgz $ mkdir -p /opt/cni/bin $ tar -C /opt/cni/bin -xzf cni-plugins.tgz
job "clivern" { datacenters = ["dc1"] group "services" { network { port "toad0_srv" { static = 8080 } port "toad1_srv" { static = 8081 } } task "toad0" { driver = "docker" config { image = "clivern/toad:release-0.2.4" labels = { "com.clivern.service" = "toad" "com.clivern.service_type" = "web" } ports = ["toad0_srv"] command = "./toad" args = [ "--port", "${NOMAD_PORT_toad0_srv}", ] } env = { IS_STATEFUL = "false", TOAD0_ADDR = "${NOMAD_HOST_ADDR_toad0_srv}", TOAD1_ADDR = "${NOMAD_HOST_ADDR_toad1_srv}", } resources { network { mbits = 10 } } } task "toad1" { driver = "docker" config { image = "clivern/toad:release-0.2.3" labels = { "com.clivern.service" = "toad" "com.clivern.service_type" = "web" } ports = ["toad1_srv"] command = "./toad" args = [ "--port", "${NOMAD_PORT_toad1_srv}", ] } env = { IS_STATEFUL = "false", TOAD0_ADDR = "${NOMAD_HOST_ADDR_toad0_srv}", TOAD1_ADDR = "${NOMAD_HOST_ADDR_toad1_srv}", } resources { network { mbits = 10 } } } } }
Рекомендации:
Оригинал: «https://dev.to/clivern/getting-started-with-hashicorp-nomad-58a2»