腾讯云 Lighthouse 服务器 Docker 容器跨主机通信原创
本帖最后由 ixff 于 2024-4-25 13:06 编辑这个编辑器格式太不友好了,原文地址 https://cloud.tencent.com/developer/article/2412318
之前一直在向大家介绍基于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集群:
```shell
docker swarm init
```
如果没有记住加入集群的`token`,可以通过以下命令重新获取:
```shell
docker swarm join-token worker
```
## 其他节点分别加入`Swarm`集群
在其他节点上执行加入Swarm集群的命令。假设已经获得了加入集群的`token`,然后在各节点上执行如下命令:
```shell
docker swarm join --token SWMTKN-1-tokenxxxxxxx 10.0.0.11:2377
```
确保将`token`替换为实际获得的值,并将IP地址替换为dnode0节点的IP地址。
## 在节点上创建网络
在Swarm集群中,可以创建overlay网络以实现容器间的跨主机通信。在主节点上执行以下命令:
```shell
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网络上互相通信。在各节点上执行如下命令:
```shell
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集群中的不同节点上互相通信。
关注了,最近正在学习k3s,这个技术还挺好玩的
页:
[1]