3

我想使用新的 docker swarm mode在我的笔记本电脑 (x86_64) 和 Raspberry Pis (armhf) 集群上测试我的分布式算法。

经过一堆配置,我可以成功创建 swarm 集群,由一个管理节点(笔记本电脑)和 N+1 个工作节点(N rasps,加上我的笔记本电脑)组成。它看起来像这样:

laptop$ docker swarm init --advertise-addr 192.168.10.1
raspi1$ docker swarm join --token <TOKEN> 192.168.10.1:2377
# [...]
raspiN$ docker swarm join --token <TOKEN> 192.168.10.1:2377

现在,我为我的项目构建了两个镜像:一个 x86_64 镜像 ( my_project:x86_64) 和一个 armhf 镜像 ( my_project:armhf)。我真的很喜欢这种新的 swarm 模式的节点/服务架构,因为创建 M(准)独立节点正是我想要的,但是如何使用docker service create ...命令将正确的图像提供给正确的节点呢?

据我所知,docker service create只取一张图片作为参数!我在这里看到我可以给每个节点一个标签,并要求服务只使用具有这个特定标签的节点,但这不是我想要的。我最终会管理两个按架构划分的任务集群,这会粉碎我利用 swarm 模式的调度程序和调度程序的愿望。

我是他追求便携性的可悲极客,这就是我!

PS:注意,这有标签“docker-swarm-mode”,而不是“docker-swarm”标签,因为docker swarmdocker swarm mode是两个不同的东西。

4

2 回答 2

2

Adrien,这里的 Docker 船长。

目前,您无法创建根据容器调度的节点拉取不同图像的服务。

但是,您可以做一个 hack,即在两种架构的 docker 映像中捆绑一个静态二进制文件,并在 entrypoint.sh 中根据底层架构决定调用哪个二进制文件。

另一方面,您可以为每个架构创建两个服务这一事实并不是很糟糕。应用程序的 Arm 和 x86_64 版本可能需要根据硬件规格进行不同的扩展,另外一个好处是您还可以根据底层硬件应用不同的内存/cpu 限制。

如果您使用 --network 选项将它们放在同一个网络中,这些服务仍然能够相互通信,因此您可以控制它们相互之间的交互方式。

希望这有助于解决您当前的问题。如果您仍在评估替代方案,请随时与我联系。

于 2016-12-16T00:03:44.123 回答
0

考虑到这一点,我认为有一种方法可以通过在任何地方运行 armhf 图像并模拟其中的一些来执行您想要的操作,但会降低性能和开销。

查看图像 hypriot/qemu-register - 它的来源位于https://github.com/hypriot/qemu-register - 并通读它直到您了解它在做什么。本质上,它允许您在 x86 机器上模拟 armhf 和 aarch64 二进制文件。然后,您可以在整个集群中运行单个映像。

我知道这并不完全符合您的要求 - 并且其他人正在研究其他解决方案 - 但这可能仍然有用。

于 2016-12-26T15:05:36.437 回答