2

我一直在尝试dask.distributed使用kubernetes. 设置kube集群本身非常简单,我目前正在努力解决的问题是我无法让本地调度程序连接到工作人员。Worker 可以连接到调度程序,但它们会在网络内部通告一个地址,而在kube网络外部运行的调度程序无法访问该地址kube

按照dask-kubernetes文档中的示例,我得到了一个kube在 AWS 上运行的集群,并且(在单独的 AWS 机器上)notebook使用本地dask.distributed调度程序启动了一个。调度程序在集群上启动了许多工作人员kube,但它无法连接到这些工作人员,因为工作人员位于不同的网络上:内部kube网络。

网络设置如下所示:

  • 在 192.168.0.0/24 上运行的笔记本服务器
  • kube集群 EC2 实例也在 192.168.0.0/24
  • kube100.64.0.0/16 上的豆荚

dask调度程序运行192.168.0.0/24dask工作人员正在运行-100.64.0.0/16我如何连接两者?我是否也应该在kubepod 中运行调度程序、编辑路由表、尝试找出主机在工作人员上的 IP 地址?

工作人员能够连接到调度程序,但在调度程序中我得到了一个错误的形式

Distributed.scheduler - 错误 - 无法连接到工作人员 'tcp://100.96.2.4:40992':在 3.0 秒后尝试连接到 'tcp://100.96.2.4:40992' 时超时:connect() 没有及时完成

我不是在寻找我可以做的事情的列表,而是在寻找推荐的设置方式,特别是与dask.distributed.

kube使用kops.

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

4

1 回答 1

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提出问题

于 2018-03-12T11:44:41.173 回答