2017-09-14 109 views
1

我的目标是在一组3个linux(ubuntu)物理工作站上建立一个docker swarm,并在其上运行dask群集。Docker群集节点无法检测群集中另一主机的服务

$ docker --version 
Docker version 17.06.0-ce, build 02c1d87 

我能够初始化码头群并将所有机器添加到群中。

cordoba$ docker node ls 
ID       HOSTNAME STATUS AVAILABILITY MANAGER STATUS 
j8k3hm87w1vxizfv7f1bu3nfg  box1  Ready  Active    
twg112y4m5tkeyi5s5vtlgrap  box2  Ready  Active    
upkr459m75au0vnq64v5k5euh * box3  Ready  Active    Leader 

然后,我在Leader框上运行docker stack deploy -c docker-compose.yml dask-cluster

这里是docker-compose.yml

version: "3" 

services: 

    dscheduler: 
    image: richardbrks/dask-cluster 
    ports: 
    - "8786:8786" 
    - "9786:9786" 
    - "8787:8787" 
    command: dask-scheduler 
    networks: 
     - distributed 
    deploy: 
     replicas: 1 
     restart_policy: 
     condition: on-failure 
     placement: 
     constraints: [node.role == manager] 

    dworker: 
    image: richardbrks/dask-cluster 
    command: dask-worker dscheduler:8786 
    environment: 
     - "affinity:container!=dworker*" 
    networks: 
     - distributed 
    depends_on: 
     - dscheduler 
    deploy: 
     replicas: 3 
     restart_policy: 
     condition: on-failure 

networks: 
    distributed: 

这里是richardbrks/dask-cluster

# Official python base image 
FROM python:2.7  
# update apt-repository 
RUN apt-get update 
# only install enough library to run dask on a cluster (with monitoring) 
RUN pip install --no-cache-dir \ 
    psutil \ 
    dask[complete]==0.15.2 \ 
    bokeh 

当我部署的群中,dworker节点不在同一台机器上dscheduler 不知道是什么dscheduler是。我ssh'd到这些节点之一,看env, 和dscheduler不在那里。我也试着ping dscheduler,并得到了“ping:unknown host”。

我以为码头应该提供一个基于服务发现的内部dns ,以便调用dscheduler将带我到dschedler节点的地址。

有没有设置我的电脑,我失踪了?或者是我的任何文件丢失了什么?

所有这些代码也位于https://github.com/MentalMasochist/dask-swarm

+0

您能否介绍一下您如何尝试访问其他服务?你在dworker容器里面做吗? – herm

+0

@herm是的。我使用'dworker'节点运行的计算机上,使用'docker ps'获取运行容器的id,然后键入'docker exec -ti /bin/bash'来进入节点。那是我试图ping'dscheduler'的地方。 – Rich

+0

你很混淆术语。群中的一个节点是一台计算机。与码头执行你输入一个容器,而不是一个节点。您使用了错误的名字,但做了正确的事情:) – herm

回答

0

dask或码头群没有任何问题。问题是路由器固件不好。在我回到之前版本的路由器固件之后,集群工作正常。

0

根据群this issue

Because of some networking limitations (I think related to virtual IPs), the ping tool will not work with overlay networking. Are you service names resolvable with other tools like dig?

个人而言,我总是可以从一个服务连接到其他使用卷曲。你的设置看起来是正确的,你的服务应该能够沟通。


FYI取决于群


更新2不支持:我认为你不使用的端口。 Servicename不是港口的替代品。您需要使用端口,因为容器在内部知道它。

+0

我安装并在容器中运行挖掘,但得到了一个'NXDOMAIN'错误,意味着它找不到主机。您的问题链接显示了无法连接其他主机上的其他服务的其他一些可能的原因。我会阅读这个问题,看看他们的任何建议是否能解决我的问题。另外,谢谢你通知我有关'depends_on'。 – Rich

+0

Tarun Lalwani确认您的撰写文件是正确的。你用来连接容器的确切命令是什么?对于curl,它应该是: curl http:// dscheduler:8786/path – herm

+0

容器dworker应该从compose文件中的命令'dask-worker dscheduler:8786'连接到dscheduler,其中dscheduler应该是调度程序和8786是端口。这回答了你的问题了吗? – Rich