首页 文章

`dask-kubernetes`调度程序 - AWS上的worker

提问于
浏览
2

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

根据 dask-kubernetes docs中的示例,我在AWS上运行了一个 kube 集群,并且(在单独的AWS机器上)启动了 notebook 与本地 dask.distributed 调度程序 . 调度程序在 kube 集群上启动了许多工作程序,但它无法连接到所述工作程序,因为这些工作程序位于不同的网络上:内部网络 .

网络设置如下所示:

  • 笔记本服务器运行在192.168.0.0/24上

  • kube 群集EC2实例也在192.168.0.0/24上
    169 kube pods on 100.64.0.0/16

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

工作人员能够连接到调度程序,但在调度程序中,我收到表单错误

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

我不是在寻找可以做的事情列表,我正在寻找建议的方法来设置它,特别是与 dask.distributed 有关 .

我使用 kops 设置了 kube 集群 .

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

1 回答

  • 0

    我通常在Kubernetes集群中使用dask-kubernetes,但显然这对每个人来说并不理想 .

    网络可以变化 . 我的猜测是,Kubernetes网络看不到默认选择的IP地址 . 如果您有一个工作人员可以连接的地址,您可以在 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提出问题

相关问题