现在谈谈我的两个问题:

现在谈谈我的两个问题:

我有几台服务器。每台服务器都有很多用于 HTTPS 的 docker-compose 项目,这些项目使用一个自动发现 HTTPS 反向代理。

几天前我在 youtube 上发现,Swarm 非常容易设置,并且可以让我在这些机器之间移动容器,而不会产生大量的停机时间。

现在谈谈我的两个问题:

1.) 同步配置和 letsencrypt 证书

我创建了一个配置:

版本:'3.2'

服务:
  nginx的:
    图片:myFancyImage
    网络:
      - 网络
    重启:总是
    部署:
      模式:全局
    端口:
      - 目标:80
        已发布:81 # 用于测试
        协议:tcp
        模式:入口
      - 目标:443
        已发布:444 # 用于测试
        协议:tcp
        模式:入口
    卷:
      -mainnginx-www:/var/www
      -mainnginx-letsencrypt:/etc/letsencrypt
      -mainnginx-sites-enabled:在/etc/nginx/sites-enabled/

卷:
  主nginx-www:
  主nginx-letsencrypt:
  mainnginx-站点已启用:

网络:
  网站:
    外部的:
      名称:web1

并通过以下方式部署服务:

docker stack deploy --compose-file docker-compose.yml mainnginx

现在,两台机器上我的反向代理实例都运行并安装了三个卷,但它们只是本地的,而不是共享的。

当然,我可以使用 NFS 来同步它们,但这里的最佳做法是什么?NFS 看起来不干净。我读到过某处,docker 正在从管理器挂载,但事实并非如此...

你是如何解决这个问题的?

2.)使用 Swarm 网络与本地容器协同工作

我为我的主代理创建了一个网络:

docker network create --opt encrypted --attachable --driver overlay web1

并将我的一个本地项目从 server1 添加到网络,如演示文稿中所示。

然后,我尝试从我的服务器 1 反向代理和我的服务器 2 反向代理进行连接,以 ping 我的项目容器,但只能从服务器 1 执行此操作。服务器 2 发现了正确的 IP,但既没有 ping 也没有 pon 。它只是等待。

我做错了什么?这根本就不是我的想法吗?

答案1

与您的第一个问题相关。虽然 Swarm 确实易于设置,并允许您创建容器的副本和更多内容,但 Swarm 中不包含卷共享功能。您说得对,卷未安装在管理器中。每个容器都会在其运行的每个工作主机上安装一个卷,并且这些卷不会在 Swarm 中共享。

您应该查看有关卷插件的 Docker 文档。从文档中可以看出,“卷插件可能使 Docker 卷能够跨多个 Docker 主机持久保存”。因此,如果您希望在群集主机之间共享相同的卷,那么您必须选择最适合您环境的卷插件,从中选择一个插件列表

正如您所提到的,卷插件的替代方案当然可以是与 NFS、GlusterFS 或 Ceph 共享数据,其中 Swarm 中的工作节点应该共享卷的挂载点。我建议您阅读此文章关于卷持久性和卷共享,虽然它已经过时并且与 Swarm 没有直接关系,但它提供了有价值的信息,并讨论了提到的两种策略:卷插件和数据共享。请注意,文章中提到了 Flocker,但 Flocker 已停产,尽管它在这里被分叉了https://github.com/ScatterHQ/flocker)。由于 ServerFault 不是基于观点的,因此我没有包含我的偏好,我只是提到了针对您的问题的现有策略。

关于你的第二个问题。得益于覆盖网络,Swarm 确实允许你互连位于不同工作主机的容器。我使用负载均衡器和反向代理,可以完美地连接其他容器。你在其中一个 Swarm 管理器中创建网络,你的工作主机将被修改,以便创建相同的网络并应用防火墙规则。如果你遇到问题,我建议你遵循Swarm 教程这样您就可以看到它正在运行或检测设置中的问题。我用它来进行故障排除。

相关内容