目标
在我的 LAN 上使用静态 IP 在 swarm 中运行单个 haproxy 容器,如果节点出现故障,该容器将重新创建。从本质上讲,它类似于指向 haproxy 的 VIP,但不需要 swarm 之外的外部负载均衡器。
什么有效 - 本地 macvlan
示例:在两个节点上创建 macvlan 网络,在 node1 上运行容器,停止容器,然后在 node2 上运行容器。haproxy 容器使用相同的静态 IP 创建,可在 LAN 上访问。
什么不起作用 - swarm macvlan
示例:将 macvlan 网络范围设置为 swarm,然后部署堆栈。容器对网络不可见。
示例中使用的文件
码头工人-compose.yml:
version: "3.2"
networks:
vlan0:
external: true
services:
haproxy:
image: haproxy:2.3.2-alpine
container_name: haproxy
volumes:
- ./data:/usr/local/etc/haproxy:ro
environment:
- TZ=America/Los_Angeles
restart: always
networks:
vlan0:
ipv4_address: 192.168.0.201
localnet.sh(停止堆栈/删除网络/将网络重新创建为本地/本地运行容器的脚本):
#!/bin/bash
docker service rm haproxy_haproxy
docker-compose down
docker network rm vlan0
docker network create -o parent=eth0 --subnet 192.168.0.0/24 --gateway 192.168.0.1 --driver macvlan --scope local vlan0
docker-compose up
swarmnet.sh(删除容器和网络的脚本/将网络重新创建为 swarm/作为 swarm 堆栈运行):
#!/bin/bash
docker service rm haproxy_haproxy
docker-compose down
docker network rm vlan0
docker network create -o parent=eth0 --subnet 192.168.0.0/24 --gateway 192.168.0.1 --driver macvlan --scope swarm vlan0
docker stack deploy -c docker-compose.yml haproxy
是否可以在集群模式下运行具有静态 macvlan IP 的单个容器?
任何帮助表示赞赏。
编辑:我已经能够让 macvlan 地址正常工作,但是 docker swarm 不遵守 ipv4_address 字段来静态容器。我理解这种情况的原因(副本等不在同一个 IP 上),但在这种情况下,由于它是单个容器,它不会发生。我发现这里讨论了这个问题:https ://forums.docker.com/t/docker-swarm-1-13-static-ips-for-containers/28060/