我已经使用标准的swarm文档设置了一个由1个管理器和2个工作节点组成的3节点群集(无法访问Internet)。
处于群集模式的群集管理器如何知道工作节点中存在的图像?
假设我在worker-node-1中有图像A,在worker-node-2中有图像B,在manager-node中没有图像。
现在如何使用管理器启动图像A的容器? 它将从管理器或节点1开始吗?
当我查询管理器中的图像列表时,是否会给出带有A和B的整个列表?
有人知道这是怎么回事吗? 我无法从文档中获取详细信息。
答案 0 :(得分:0)
Docker Swarm管理器节点可能是第二角色,但并非绝对必要。
图像部署策略通过docker-compose.yml
进行映射,该策略具有与特定服务有关的信息,例如目标节点,网络,主机名,卷等。因此,它将在指定的节点或最空的默认节点中开始。
Swarm Manager通过Docker网络与工作节点通信:
初始化集群或将Docker主机加入现有集群时,将在该Docker主机上创建两个新网络:
称为入口的覆盖网络,用于处理控制和数据 与群服务相关的流量。创建群服务时, 不要将其连接到用户定义的覆盖网络,而是连接到 默认情况下是入口网络
一个称为 docker_gwbridge,它将各个Docker守护程序连接到 其他守护程序加入集群。
在Swarm部署期间,其服务的映像将根据其部署策略传播到工作程序节点。
一旦管理者节点也成为工作者节点,管理器节点将包含图像(如果没有,请纠正我)。
答案 1 :(得分:0)
群集模式的默认配置是从注册表服务器提取图像,并使用固定来引用这些图像的唯一哈希。可以调整,但是没有内部机制可以在群集内分发图像。
对于离线环境,我建议群集可以访问的独立注册表服务器。您甚至可以在集群上运行它。将映像推送到那里,然后将服务器服务指向注册表以将其映像拉出。请参阅此文档,以获取有关运行独立注册表的详细信息,或运行许多第三方选项(例如Harbor)的任何方法:https://docs.docker.com/registry/
另一个选项是禁用图像固定,并手动将图像复制到您的每个群集节点。您需要在部署任何服务更改之前执行此操作。当您手动复制图像图层时,您还将失去重用它们的好处。由于它产生的所有这些问题,管理开销和错误风险,我建议您不要使用此选项。
答案 2 :(得分:0)
使用docker stack deploy
运行--with-registry-auth
命令,这将使工作人员可以访问所需的图像
默认情况下,Docker Swarm会在部署时从注册表中提取最新映像