LXC Docker Swarm 叢集架設
Docker Swarm Mode 是 Docker Engine 內建的容器編排(Container Orchestration)工具。簡單來說,它允許你將多台安裝了 Docker 的主機整合在一起,形成一個「集群」(Cluster),並將這個集群視為單一的虛擬 Docker 主機來管理。
這讓開發者從管理「單一容器」進階到管理「服務(Service)」,實現高可用性與負載平衡。
運行環境
這裡使用PVE的LXC 三台主機做設定,建立特權LXC 並且功能勾選巢狀(nesting)
確認三台主機都安裝Docker
一台為managers 二台workers
managers 10.0.0.150
workers-1 10.0.0.151
workers-2 10.0.0.152
初始化Swarm
在managers主機執行初始化設定,--advertise-addr輸入你的對外IP
--default-addr-pool如果不設定,Swarm 預設使用 10.0.0.0/8 這個超大範圍的私有網段來分配 IP 給 Overlay 網路
跟本次測試主機網路衝突故手動指定
docker swarm init --advertise-addr 10.0.0.150 --default-addr-pool 10.20.0.0/16
初始化設定後會出現token,在其他workers主機加入此token
docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx 10.0.0.150:2377
加入後可以看到所有節點
root@docker-1:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
x46rx0e108vhrxe354xom40w8 * docker-1 Ready Active Leader 29.0.2
j96spq2xa7lx7oaw0qfhdava3 docker-2 Ready Active 29.0.2
v7flruyfi6glooxdasvx3a9n0 docker-3 Ready Active 29.0.2
由於在LXC內建立的Overlay網路會有不轉發問題,須將ingress網路開啟轉發
nsenter --net=/run/docker/netns/ingress_sbox sysctl -w net.ipv4.ip_forward=1
可以使用GitHub 製作的DockerSwarmLXC腳本,監控所有Docker網路並開啟轉發
部屬Portainer和Agent
使用Portainer來管理Swarm,每台主機都要安裝Agent來蒐集資訊,可以使用官方腳本來安裝
curl -L https://downloads.portainer.io/ce-lts/portainer-agent-stack.yml -o portainer-agent-stack.yml
這邊Portainer使用中文版本,故修改portainer-agent-stack.yml設定
version: '3.2'
services:
agent:
image: portainer/agent:lts
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
portainer:
image: 6053537/portainer-ce:latest
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9443:9443"
- "9000:9000"
- "8000:8000"
volumes:
- portainer_data:/data
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
attachable: true
volumes:
portainer_data:
docker stack deploy -c portainer-agent-stack.yml portainer
部屬後可以看到Portainer和Agent在執行
root@docker-1:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a157c104fdc 6053537/portainer-ce:latest "/portainer -H tcp:/…" About an hour ago Up About an hour 8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, [::]:9443->9443/tcp portainer_portainer.1.ofwefrgf28mgc9s78ulpm8l45
2b0713e79ea3 portainer/agent:lts "./agent" About an hour ago Up About an hour 0.0.0.0:9001->9001/tcp, [::]:9001->9001/tcp portainer_agent.x46rx0e108vhrxe354xom40w8.8pf2g1dy8gwsaq9tazf1vcr1r
網頁上輸入https://ip:9443登入Portainer可以看到Swram資訊


No comments to display
No comments to display