首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务不会在码头群节点上启动

服务不会在码头群节点上启动
EN

Stack Overflow用户
提问于 2019-10-27 14:15:02
回答 1查看 483关注 0票数 0

我想在码头群中部署带有故障转移、Patroni和HAProxy (类似于单个入口点)的HAProxy。

我有码头-复合车-

代码语言:javascript
复制
version: "3.7"

services:
    etcd1:
        image: patroni
        networks:
          - test
        env_file:
          - docker/etcd.env
        container_name: test-etcd1
        hostname: etcd1
        command: etcd -name etcd1 -initial-advertise-peer-urls http://etcd1:2380


    etcd2:
        image: patroni
        networks:
          - test
        env_file:
          - docker/etcd.env
        container_name: test-etcd2
        hostname: etcd2
        command: etcd -name etcd2 -initial-advertise-peer-urls http://etcd2:2380

    etcd3:
        image: patroni
        networks:
          - test
        env_file:
          - docker/etcd.env
        container_name: test-etcd3
        hostname: etcd3
        command: etcd -name etcd3 -initial-advertise-peer-urls http://etcd3:2380

    patroni1:
        image: patroni
        networks:
          - test
        env_file:
          - docker/patroni.env
        hostname: patroni1
        container_name: test-patroni1
        environment:
            PATRONI_NAME: patroni1
        deploy:
          placement:
            constraints: [node.role == manager]
#              - node.labels.type == primary
#              - node.role == manager

    patroni2:
        image: patroni
        networks:
          - test
        env_file:
          - docker/patroni.env
        hostname: patroni2
        container_name: test-patroni2
        environment:
            PATRONI_NAME: patroni2
        deploy:
          placement:
            constraints: [node.role == worker]
#              - node.labels.type != primary
#              - node.role == worker

    patroni3:
        image: patroni
        networks:
          - test
        env_file:
          - docker/patroni.env
        hostname: patroni3
        container_name: test-patroni3
        environment:
            PATRONI_NAME: patroni3
        deploy:
          placement:
            constraints: [node.role == worker]
#              - node.labels.type != primary
#              - node.role == worker

    haproxy:
        image: patroni
        networks:
          - test
        env_file:
          - docker/patroni.env
        hostname: haproxy
        container_name: test-haproxy
        ports:
            - "5000:5000"
            - "5001:5001"
        command: haproxy

networks:   
  test:
    driver: overlay
    attachable: true

并使用以下命令将该服务部署到停靠群中:

代码语言:javascript
复制
docker stack deploy --compose-file docker-compose.yml test

当我使用这个命令时,我的服务正在创建,但是服务patroni2patroni3不会在其他节点上启动,这些节点的角色是worker。他们根本就不开始!

我希望看到我的服务部署在所有节点上(3 -一个管理器和两个工作人员),这些节点都存在于码头群中,但是如果我删除约束,所有的服务都会在一个节点上启动,当我在群集中部署docker-compose.yml时。

也许这个服务看不到我的网络,尽管我使用docker正式文档来部署它。

EN

回答 1

Stack Overflow用户

发布于 2019-10-27 16:15:58

使用不同的服务名称,码头将不会尝试将容器分散到多个节点,并将返回到满足需求的最少使用的节点,在该节点中,最少使用的是由调度容器的数量来衡量的。

您可以尝试使用相同的服务名称和3个副本来解决这个问题。这将需要对它们进行相同的定义。要实现这个功能,您可以利用一些特性,首先是etcd.tasks将解析到每个etcd服务容器的各个ip地址。第二个是服务模板,它可以用于向主机名、卷挂载和env变量的设置中注入{{.Task.Slot}}之类的值。挑战在于最后的列表可能不会给出您想要的内容,这是唯一地处理来自其他副本的每个副本的方法。主机名似乎可以工作,但不幸的是,它在docker的DNS实现中没有解决问题(而且实现起来也不容易,因为可以创建一个容器,它具有在docker部署后更改主机名的功能)。

留给您的选项是在特定节点上运行的在每个服务上配置约束。这并不理想,而且降低了这些服务的容错能力。如果有很多节点可以分成3组,那么使用节点标签就可以解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58580180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档