Dim*_*mos 1 jenkins docker docker-swarm
我有一个詹金斯管道,它在 NUC 服务器上构建和运行各种容器。此 NUC 与另一个 NUC 位于集群 (Swarm) 上。我最近在我的设置和该集群上添加了几个树莓派,所以现在我想知道是否有一种方法可以命令 Jenknis 在x86_x64 or armhf设备上部署。
我尝试了-e constraint:node==<node_name>在其他问题上找到的解决方案,但没有运气。
x86_x64我尝试了从一个节点指向另一个节点以及从一个x86_x64节点指向另一个armhf节点的上述命令
我不想将这些容器作为服务运行,也不关心任何负载均衡器,我只想在特定架构上运行容器(x86_x64 or armhf取决于我想要部署的内容)
您不能对容器使用约束,只能对服务使用约束。
话虽这么说,对服务使用限制似乎是一个好方法。您可以在官方文档中了解有关服务限制的更多信息。以下是关于约束如何匹配节点或 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
Run Code Online (Sandbox Code Playgroud)
如果你想匹配特定的主机名,你需要使用node.hostname==<hostname>而不是node==<hostname>
您还需要更新restart_policy服务定义deploy策略中的密钥,以防止在第一个容器成功终止其进程后启动新容器。
将它们全部包装在一起,您需要类似的东西:
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
Run Code Online (Sandbox Code Playgroud)
当然,您可以自行决定为每个 Swarm 节点添加标签。Ansible 及其模块docker-node非常适合此目的。这是一个示例剧本:
- hosts: swarm
tasks:
- name: Add label to node specifying architecture
docker_node:
hostname: "{{ inventory_hostname }}"
labels:
arch: "{{ ansible_architecture }}"
Run Code Online (Sandbox Code Playgroud)
您的 docker 节点将标有密钥arch 和以下值之一:
| 归档时间: |
|
| 查看次数: |
7012 次 |
| 最近记录: |