Рубрики
Uncategorized

Начало работы с hashicorp nomad

Основная настройка (не рекомендуется): Загрузите бинар Nomad и сделайте исполнение: $ wget … Tagged с Docker, DevOps, MicroServices, Kubernetes.

Базовая настройка (не рекомендуется):

  • Скачать кочевой бинар и сделать его исполняемым:
$ 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»