我一直在尝试使用dask.distributed
设置kubernetes
群集。设置kube
集群本身非常简单,我目前正在努力解决的问题是我无法让本地调度程序连接到worker。工作人员可以连接到调度程序,但是他们在kube
网络内通告了kube
网络外部运行的调度程序无法访问的地址。
根据dask-kubernetes
文档中的示例,我在AWS上运行了kube
群集,并且(在单独的AWS计算机上)启动了notebook
本地dask.distributed
调度程序。调度程序在kube
群集上启动了许多工作程序,但由于工作人员位于不同的网络上,因此无法连接到所述工作人员:内部kube
网络。
网络设置如下所示:
kube
群集EC2实例也在192.168.0.0/24 kube
pods on 100.64.0.0/16 dask
调度程序在192.168.0.0/24
上运行但dask
工作人员在100.64.0.0/16
上运行 - 如何连接这两个?我是否应该在kube
窗格中运行调度程序,编辑路由表,尝试找出主机上工作人员的IP地址?
工作人员能够连接到调度程序,但是在调度程序中我得到了表单错误
distributed.scheduler - 错误 - 无法连接到worker'tcp://100.96.2.4:40992':在3.0 s后尝试连接到'tcp://100.96.2.4:40992'超时:connect()没有及时完成
我不是在寻找我可以做的可能事情的列表,我正在寻找推荐的设置方式,特别是与{ {1}}。
我使用dask.distributed
设置了kube
群集。
答案 0 :(得分:0)
我通常在Kubernetes集群中使用dask-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
提出问题