Я использую Docker Swarm, который охватывает несколько центров обработки данных. Swarm работает в «виртуальном частном облаке».
Один из центров обработки данных, участвующих в настройке, имеет несколько более медленное соединение, чем другие. Я бы хотел, чтобы в этом центре обработки данных не планировалась услуга, особенно чувствительная к задержкам.
lowlatency
для всех узлов, кроме узлов в "медленном" центре обработки данных, обслуживание может быть запланировано там. В конце концов, это просто предпочтение.Есть ли способ каким-то образом ограничить службу определенными узлами, но разрешить Docker запланировать службу на других узлах, если предпочтительные узлы недоступны?
Нет, это не встроенная функция в Swarm Mode.
Единственная доступная в настоящее время настройка размещения - это распределение рабочей нагрузки по значениям метки. Это используется, чтобы избежать планирования всех реплик в одной зоне доступности, например все рабочие нагрузки в одной стойке, центре обработки данных и т. д. Нет предпочтения размещения, которое действовало бы как мягкое ограничение.
Другой доступный вариант в планировании роя - это ограничение, и это жесткое ограничение. Рабочие нагрузки не будут планироваться на узлах, которые не соответствуют ограничению, даже если это означает, что их нигде нельзя запланировать, а служба остается отключенной.
Самое близкое, что вы можете подойти к желаемой цели, - это запустить дополнительный процесс для обнаружения сбоев во всех других центрах обработки данных и отрегулировать ограничение для вашей службы, однако я подозреваю, что это будет иметь две соответствующие проблемы. Во-первых, при отключении других центров обработки данных вы, вероятно, потеряли кворум с вашими менеджерами, никаких действий по планированию не произойдет, а команды для любого работающего менеджера не будут выполнены из-за потери лидера. Во-вторых, если у вас есть кворум, узлы в оставшемся центре обработки данных, скорее всего, станут избыточными из-за перепланирования других рабочих нагрузок. Это известно как проблема громадного стада, которая требует установки требований к процессору и памяти для ваших контейнеров. Эти требования будут препятствовать планированию новых заданий на узле, чтобы избежать дальнейшего простоя и не дать вашей измененной службе найти узел с емкостью.