之前一直在向大家介绍基于k3s实现的腾讯云Lighthouse集群使用方法,也有声音表示k8s太重了,能不能更轻量一些?答案当然是:可以!
今天,本文将探讨如何利用腾讯云Lighthouse服务器,在 Docker 应用镜像上创建一个 Swarm 集群的,并实现容器跨主机通信的能力。
概念解析
Swarm 是 Docker 官方提供的容器编排工具之一,用于管理多个 Docker 主机上运行的容器。它允许将多个 Docker 主机组成一个集群,并通过统一的接口来管理这些主机上的容器。Swarm 提供了高可用性、伸缩性和容错性,使得在生产环境中部署和管理容器化应用变得更加简单和可靠。
Overlay 网络是 Docker 提供的一种网络模型,采用了多种技术来实现容器间的通信,其中包括了本文中将使用的 VXLAN(Virtual Extensible LAN)技术,VXLAN 可以将容器的数据包封装在 UDP 数据包中,并在底层网络中传输,从而实现跨主机的容器通信。
环境配置
节点名 | 节点IP | 节点服务 |
---|---|---|
dnode0 | 10.0.0.11 | 重装为 Docker 应用镜像, 并初始化Swarm集群 |
dnode1 | 10.0.0.12 | 重装为 Docker 应用镜像 |
dnode2 | 10.0.0.13 | 重装为 Docker 应用镜像 |
在配置过程中,请确保将每个节点的hostname
设置为不同的值,本例分别设置为 dnode0、dnode1、dnode2,并放行防火墙所需的端口:
- TCP端口2376:用于安全的 Docker 客户端通信,这对于Docker Machine(用于编排Docker的主机)的正常运行是必需的。
- TCP端口2377:用于Docker Swarm或集群中节点之间的通信,只需要在管理节点上打开。
- UDP端口4789:用于覆盖网络流量(容器入口网络)。
- TCP和UDP端口7946:用于节点之间的通信(容器网络发现)。
初始化Swarm
集群服务
在dnode0
节点上执行以下命令来初始化Swarm集群:
docker swarm init
如果没有记住加入集群的token
,可以通过以下命令重新获取:
docker swarm join-token worker
其他节点分别加入Swarm
集群
在其他节点上执行加入Swarm集群的命令。假设已经获得了加入集群的token
,然后在各节点上执行如下命令:
docker swarm join --token SWMTKN-1-tokenxxxxxxx 10.0.0.11:2377
确保将token
替换为实际获得的值,并将IP地址替换为dnode0节点的IP地址。
在节点上创建网络
在Swarm集群中,可以创建overlay网络以实现容器间的跨主机通信。在主节点上执行以下命令:
docker network create --driver overlay --subnet=172.22.0.0/24 --gateway=172.22.0.1 --attachable ovnet
这将创建一个名为ovnet
的overlay网络,其中包括了一个子网范围为172.22.0.0/24
,并指定网关为172.22.0.1
。
测试跨主机网络连通性
在各个节点上创建容器,这些容器可以在overlay网络上互相通信。在各节点上执行如下命令:
docker run -it --rm --network ovnet --ip 172.22.0.5 alpine docker run -it --rm --network ovnet --ip 172.22.0.6 alpine docker run -it --rm --network ovnet --ip 172.22.0.7 alpine
这些命令将分别在overlay网络上创建了三个容器,它们分别具有IP地址为172.22.0.5
、172.22.0.6
和172.22.0.7
,并且它们可以在Swarm集群中的不同节点上互相通信。
文章思路来自 若海の技术写真,有问题请留言。