2

我的目标是在一组 3 个 linux (ubuntu) 物理工作站上建立一个 docker swarm 并在其上运行一个dask集群。

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

我能够初始化 docker swarm 并将所有机器添加到 swarm 中。

cordoba$ docker node ls
ID                            HOSTNAME    STATUS    AVAILABILITY MANAGER STATUS
j8k3hm87w1vxizfv7f1bu3nfg     box1        Ready     Active              
twg112y4m5tkeyi5s5vtlgrap     box2        Ready     Active              
upkr459m75au0vnq64v5k5euh *   box3        Ready     Active              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

当我部署 swarm 时,dworker不在同一台机器上的节点dscheduler 不知道是什么dscheduler。我 ssh 进入这些节点之一并查看了 env,dscheduler但并不存在。我也尝试 ping dscheduler,并得到“ping:未知主机”。

我认为 docker 应该为服务发现提供一个基于内部 dns 的服务,这样调用dscheduler就会把我带到dschedler节点的地址。

我的电脑是否有一些我遗漏的设置?还是我的任何文件丢失了什么?

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

4

2 回答 2

0

根据群中的这个问题

由于一些网络限制(我认为与虚拟 IP 有关),ping 工具不适用于覆盖网络。您是否可以使用 dig 等其他工具解析服务名称?

就个人而言,我总是可以使用 curl 从一项服务连接到另一项服务。您的设置似乎正确,您的服务应该能够通信。


swarm 不支持 FYI 依赖


更新 2:我认为您没有使用该端口。Servicename 不能替代端口。您需要使用该端口,因为容器内部知道它。

于 2017-09-14T14:54:03.317 回答
0

dask 或 docker swarm 没有任何问题。问题是路由器固件不好。在我回到路由器固件的先前版本后,集群运行良好。

于 2017-09-25T19:32:45.943 回答