Планировщик `dask-kubernetes '- рабочий на AWS

Я пытался создать dask.distributed кластер с использованием kubernetes, Настройка kube Сам кластер довольно прост, проблема, с которой я сейчас борюсь, заключается в том, что я не могу подключить локальный планировщик к рабочим. Работники могут подключаться к планировщику, но они объявляют адрес внутри kube сеть, которая не доступна планировщику, работающему вне kube сеть.

Следуя примерам из dask-kubernetes документы я получил kube кластер работает на AWS и (на отдельной машине AWS) запустил notebook с местным dask.distributed планировщик. Планировщик запускает ряд рабочих на kube кластер, но он не может подключиться к указанным работникам, потому что работники находятся в другой сети: внутренняя kube сеть.

Настройка сети выглядит следующим образом:

  • сервер ноутбука работает на 192.168.0.0/24
  • kube экземпляры кластера EC2 также 192.168.0.0/24
  • kube стручки на 100.64.0.0/16

dask планировщик работает 192.168.0.0/24 но dask рабочие на 100.64.0.0/16 - как мне соединить два? Должен ли я запустить планировщик также в kube pod, редактировать таблицы маршрутизации, пытаться выяснить IP-адреса хост-машин на рабочих?

Работники могут подключаться к планировщику, но в планировщике я получаю ошибки вида

distrib.scheduler - ОШИБКА - Не удалось подключиться к работнику 'tcp://100.96.2.4:40992': Превышено время ожидания попытки подключения к 'tcp: //100.96.2.4: 40992' через 3,0 с: connect() не удалось закончить вовремя

Я не ищу список возможных вещей, которые я мог бы сделать, я ищу рекомендуемый способ его настройки, особенно в отношении dask.distributed,

Я настроил kube кластер с использованием kops,

https://dask-kubernetes.readthedocs.io/en/latest/

1 ответ

Обычно я использовал dask-kubernetes из кластера Kubernetes, хотя, очевидно, это не идеально для всех.

Сети могут отличаться. Я предполагаю, что выбранный по умолчанию IP-адрес не виден вашей сети Kubernetes. Если у вас есть адрес, к которому ваши сотрудники могут подключиться, вы можете указать его в ip= Ключевой аргумент.

cluster = KubeCluster(ip='scheduler-address-visible-to-workers')

Если есть сетевой интерфейс, который вы знаете, чтобы быть видимым, то вы можете обобщить это следующим образом:

from distributed.utils import get_ip_interface
ip = get_ip_interface('eth0')  # replace eth0 with your visible network interface

В системах на основе UNIX вы обычно можете найти список подходящих интерфейсов с ifconfig команда. Вы можете просмотреть в этом списке адрес, который похож на адреса, которые вы видите на рабочих.

Если ни то, ни другое невозможно, я рекомендую поднять проблему по адресу https://github.com/dask/dask-kubernetes/issues/new

Другие вопросы по тегам