在docker群中的特定节点上运行docker容器
我有一个jenkins管道,它在NUC服务器上构建和运行各种容器。 此NUC与另一个NUC位于群集(群)上。 我最近在我的设置和集群上添加了几个raspberry PI,所以现在我想知道是否有办法命令Jenkins在在docker群中的特定节点上运行docker容器,docker,jenkins,docker-swarm,Docker,Jenkins,Docker Swarm,我有一个jenkins管道,它在NUC服务器上构建和运行各种容器。 此NUC与另一个NUC位于群集(群)上。 我最近在我的设置和集群上添加了几个raspberry PI,所以现在我想知道是否有办法命令Jenkins在x86_x64或armhf设备上部署 我尝试了在其他问题上找到的-e约束:node=解决方案,但没有成功 我从指向另一个节点的x86_x64节点和指向armhf节点的x86_x64节点尝试了上述命令 我不想将这些容器作为服务运行,也不关心任何负载平衡器,我只想在特定的体系结构上运行容
x86_x64或armhf
设备上部署
我尝试了在其他问题上找到的-e约束:node=
解决方案,但没有成功
我从指向另一个节点的x86_x64
节点和指向armhf
节点的x86_x64
节点尝试了上述命令
我不想将这些容器作为服务运行,也不关心任何负载平衡器,我只想在特定的体系结构上运行容器(
x86_x64或armhf
,取决于我要部署的内容)为什么不想使用服务?服务是我们在Swarm中协调事物的方式<代码>docker容器…将仅在单个主机上启动/停止/检查/操作内容。既然您已经设置了swarm群集,为什么不使用服务呢?您不能对容器使用约束,只能对服务使用约束
话虽如此,对服务使用约束似乎是一个好办法。
您可以在中了解有关服务约束的更多信息。
以下是一些有关约束如何匹配节点或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==
而不是node==
您还需要从服务定义deploy
策略中更新restart\u策略
键,以防止在第一个容器成功终止其进程后启动新容器
将其包装在一起您需要这样的东西:
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
docker节点将使用键arch
和以下值之一进行标记:
- armhf
- armv7l
- i386
- x86_64
- hosts: swarm
tasks:
- name: Add label to node specifying architecture
docker_node:
hostname: "{{ inventory_hostname }}"
labels:
arch: "{{ ansible_architecture }}"