Как распределить распределения равномерно с помощью разделов в кластере кочевников (драйвер raw_exe c) - PullRequest
0 голосов
/ 31 января 2020

В производственной среде (с использованием 10-ти узлового кластера) «алгоритм упаковки бина» nomad вызывает большие проблемы с использованием системы.

Возможное решение - использовать следующие правила / политики:

1. Отдельные хосты

Вариант использования: в основном для нескольких слушателей tcp / udp за LoadBalancer. Это работает нормально, и именно то, что вы ожидаете.

2. Ограничение ресурсов

Via nomad-client conf as follows:

    client {
      enabled       = true
      cpu_total_compute = 12000
      reserved {
                cpu = 3000
                memory = 33000
                disk = 1

        }
      network_speed = 10000
      servers = ["127.0.0.1:4647"]
      options {
        "driver.raw_exec.enable" = "1"
      }

     }

Painful and limiting

3. Раздел Spread

Sounds promising but could not get it to work using NOMAD-SDK.

Nomad java SDK 0.9.0-SNAPSHOT не поддерживает раздел Spread через API. Вместо этого можно использовать метод "addUnmappedProperty" для добавления пользовательских JSON структур / массивов.

 Job jobSpec = nomadContext.getJob();
    List<Object> spreads = new ArrayList<>();
    Map<String, Object> spreadStanza = new HashMap<>();
    spreadStanza.put("Attribute", "${node.unique.id}");
    spreadStanza.put("Weight", 100);
   // spreadStanza.put("SpreadTarget", null);
    spreads.add(spreadStanza);
    jobSpec.addUnmappedProperty("Spreads", spreads);


    for(TaskGroup taskGroup: jobSpec.getTaskGroups()){
        taskGroup.addUnmappedProperty("Spreads", spreads);
    }

Но, к сожалению, не удалось заставить его работать, распределение распределения не показано в подробный статус задания:

В другом примере используется простая спецификация задания hcl, развернутая с помощью параметров командной строки:

 job "sleep" {
  datacenters = ["dc1"]
  spread {
    attribute = "${node.unique.id}"
     weight    = 100
  }

  group "example" {
   count=10
   spread {
    attribute = "${node.unique.id}"
     weight    = 100
  }


    task "server" {
      driver = "raw_exec"

      config {
        command = "/bin/sleep"
        args = [
          "500"
        ]
      }

      resources {
        network {
          mbits = 10
        }
      }
    }
  }
}

В этом случае показывается распределение распределения

кочевник алло c статус -вербоз 1feb7476

Node                                  job-anti-affinity  node-reschedule-penalty  node-affinity  allocation-spread  binpack  final score
4c4e3bb2-9568-3f5d-3a8c-fd056f258ed0  -0.4               0                        0              0.667              0.896    0.387
4b36b048-a24b-e0e9-a789-625764fcfa70  -0.5               0                        0              -0.667             0.901    -0.0886

Я ценю любую помощь.

Спасибо.

1 Ответ

0 голосов
/ 22 февраля 2020

Старайтесь применять спред только один раз, не на уровне работы и не на уровне группы.

...