之前一直在向大家介绍基于k3s实现的腾讯云Lighthouse集群使用方法,也有声音表示k8s太重了,能不能更轻量一些?答案当然是:可以!

今天,本文将探讨如何利用腾讯云Lighthouse服务器,在 Docker 应用镜像上创建一个 Swarm 集群的,并实现容器跨主机通信的能力。

概念解析

Swarm 是 Docker 官方提供的容器编排工具之一,用于管理多个 Docker 主机上运行的容器。它允许将多个 Docker 主机组成一个集群,并通过统一的接口来管理这些主机上的容器。Swarm 提供了高可用性、伸缩性和容错性,使得在生产环境中部署和管理容器化应用变得更加简单和可靠。

Overlay 网络是 Docker 提供的一种网络模型,采用了多种技术来实现容器间的通信,其中包括了本文中将使用的 VXLAN(Virtual Extensible LAN)技术,VXLAN 可以将容器的数据包封装在 UDP 数据包中,并在底层网络中传输,从而实现跨主机的容器通信。

环境配置

节点名节点IP节点服务
dnode010.0.0.11重装为 Docker 应用镜像, 并初始化Swarm集群
dnode110.0.0.12重装为 Docker 应用镜像
dnode210.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.5172.22.0.6172.22.0.7,并且它们可以在Swarm集群中的不同节点上互相通信。

文章思路来自 若海の技术写真,有问题请留言。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐