Планировщик `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/24kube
стручки на 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
,
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