【问题标题】:Run a docker container on a specific node in a docker swarm在 docker swarm 中的特定节点上运行 docker 容器
【发布时间】:2019-05-03 16:09:10
【问题描述】:

我有一个 jenkins 管道,它在 NUC 服务器上构建和运行各种容器。 此 NUC 与另一个 NUC 位于集群 (Swarm) 上。 我最近在我的设置和那个集群上添加了几个树莓派,所以现在我想知道是否有一种方法可以命令 Jenknis 部署在x86_x64 or armhf 设备上。

我尝试了在其他问题上找到的-e constraint:node==<node_name> 解决方案,但没有运气。

我从一个 x86_x64 节点指向另一个节点以及从一个 x86_x64 节点指向一个 armhf 节点尝试了上述命令

我不想将这些容器作为服务运行,我不关心任何负载均衡器,我只想在特定架构上运行容器(x86_x64 or armhf 取决于我想要部署的内容)

【问题讨论】:

    标签: docker jenkins docker-swarm


    【解决方案1】:

    您不能对容器使用约束,只能对服务使用。

    话虽如此,对服务使用约束似乎是一个不错的方法。 您可以在official documentation 中了解有关服务约束的更多信息。 以下是一些关于约束如何匹配节点或 Docker 引擎标签的示例:

    # Node ID
    node.id==2ivku8v2gvtg4
    
    # Node hostname
    node.hostname!=node-2
    
    # Node role
    node.role==manager
    
    # Node labels
    node.labels.security==high
    
    # Docker Engine's labels
    engine.labels.operatingsystem==ubuntu 14.04
    

    如果你想匹配一个特定的主机名,你需要使用node.hostname==<hostname> 而不是node==<hostname>

    您还需要更新服务定义 deploy 策略中的 restart_policy 键,以防止在第一个容器成功终止其进程后启动新容器。

    将它们包装在一起,您需要这样的东西:

    version: "3.7"
    services:
      myapp:
        image: <my_image>
        deploy:
          placement:
            constraints:
              - node.labels.arch == x86_64
          restart_policy:
            condition: on-failure
            delay: 5s
            max_attempts: 3
            window: 120s
    

    当然,您可以为每个 Swarm 节点添加标签。 Ansible 及其模块docker-node 非常适合此目的。这是一个示例剧本:

    - hosts: swarm
      tasks:
        - name: Add label to node specifying architecture 
          docker_node:
            hostname: "{{ inventory_hostname }}"
            labels:
              arch: "{{ ansible_architecture }}"
    

    您的 docker 节点将使用键 arch 和以下值之一标记:

    • armhf
    • armv7l
    • i386
    • x86_64

    【讨论】:

      【解决方案2】:

      您为什么不想使用服务?服务是我们在 Swarm 中编排事物的方式。 docker container ... 只会在单个主机上启动/停止/检查/操作。既然您已经设置了一个 swarm 集群,为什么不使用服务呢?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 2019-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多