0
点赞
收藏
分享

微信扫一扫

Docker(六)----Swarm搭建Docker集群

做个橙梦 2022-04-30 阅读 55
java后端

一、什么是Swarm

Swarm这个项目名称特别贴切。在Wiki的解释中,Swarm behavior是指动物的群集行为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavior。

Swarm项目正是这样,通过把多个Docker Engine聚集在一起,形成一个大的docker-engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。

Swarm 特点

▲对外以Docker API接口呈现,这样带来的好处是,如果现有系统使用Docker Engine,则可以平滑将Docker Engine切到Swarm上,无需改动现有系统。
▲Swarm对用户来说,之前使用Docker的经验可以继承过来。非常容易上手,学习成本和二次开发成本都比较低。同时Swarm本身专注于Docker集群管理,非常轻量,占用资源也非常少。 *“Batteries included but swappable”,简单说,就是插件化机制,Swarm中的各个模块都抽象出了API,可以根据自己一些特点进行定制实现。
▲Swarm自身对Docker命令参数支持的比较完善,Swarm目前与Docker是同步发布的。Docker的新功能,都会第一时间在Swarm中体现。

Docker自诞生以来,其容器特性以及镜像特性给DevOps爱好者带来了诸多方便。然而在很长的一段时间内,Docker只能在单host上运行,其跨host的部署、运行与管理能力颇受外界诟病。跨host能力的薄弱,直接导致Docker容器与host的紧耦合,这种情况下,Docker容器的灵活性很难令人满意,容器的迁移、分组等都成为很难实现的功能点。

Swarm是Docker公司在2014年12月初新发布的容器管理工具。和Swarm一起发布的Docker管理工具还有Machine以及Compose。

Swarm是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信,Swarm几乎全部用Go语言来完成开发。

二、Swarm 关键概念

**1)Swarm
**
集群的管理和编排是使用嵌入到 docker 引擎的 SwarmKit,可以在 docker 初始化时启动 swarm 模式或者加入已存在的 swarm

**2)Node
**
一个节点(node)是已加入到 swarm 的 Docker 引擎的实例 当部署应用到集群,你将会提交服务定义到管理节点,接着 Manager

管理节点调度任务到 worker 节点,manager 节点还执行维护集群的状态的编排和群集管理功能,worker 节点接收并执行来自

manager 节点的任务。通常,manager 节点也可以是 worker 节点,worker 节点会报告当前状态给 manager 节点

**3)服务(Service)
**
服务是要在 worker 节点上要执行任务的定义,它在工作者节点上执行,当你创建服务的时,你需要指定容器镜像

**4)任务(Task)
**
任务是在 docekr 容器中执行的命令,Manager 节点根据指定数量的任务副本分配任务给 worker 节点

——————————————————————————————————–

docker swarm:集群管理,子命令有 init, join, leave, update。(docker swarm –help 查看帮助)

docker service:服务创建,子命令有 create, inspect, update, remove, tasks。(docker service–help 查看帮助)

docker node:节点管理,子命令有 accept, promote, demote, inspect, update, tasks, ls, rm。(docker node –help 查看帮助)

node 是加入到 swarm 集群中的一个 docker 引擎实体,可以在一台物理机上运行多个 node,node 分为:

manager nodes,也就是管理节点

worker nodes,也就是工作节点

1)manager node 管理节点:执行集群的管理功能,维护集群的状态,选举一个 leader 节点去执行调度任务。

2)worker node 工作节点:接收和执行任务。参与容器集群负载调度,仅用于承载 task。

3)service 服务:一个服务是工作节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令。

service 是运行在 worker nodes 上的 task 的描述,service 的描述包括使用哪个 docker 镜像,以及在使用该镜像的容器中执行什么命令。

4)task 任务:一个任务包含了一个容器及其运行的命令。task 是 service 的执行实体,task 启动 docker 容器并在容器中执行任务。

三、环境准备

2.1、所用版本如下

centos 7

dockerDocker version 18.03.1-ce, build 9ee9f40

swaram18.03.1-ce

这里用两台机器来搭建,分别如下:

swarm01192.168.182.110

swarm02 192.168.182.111

2.2、安装docker

每台机器上都需要安装Docker

yum search docker
yum install -y docker
systemctl start docker
systemctl status docker

**2.3、加入开机自启
**

systemctl enable docker

2.4、更改docker的镜像源

安装好之后,更改docker的镜像源,修改或新增 /etc/docker/daemon.json

vi /etc/docker/daemon.json

修改成如下:

{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
或
{ 
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] 
}

然后重启

systemctl restart docker.service

**2.5、修改主机名
**

然后分别修改两台机器的主机名,更改成swarm01,swarm02

hostnamectl set-hostname swarm01

2.6、关闭SELinux

[root@swaram01 ~]# getenforce
Disabled
[root@swaram01 ~]# /usr/sbin/sestatus -v
SELinux status:                 disabled

修改

vi /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled

注意: 设置后需要重启才能生效

2.7、编辑hosts文件

vi /etc/hosts

设置两台主机的对应关系

192.168.182.110 swarm01
192.168.182.111 swarm02

2.8、关闭防火墙

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

2.9、修改docker监听端口

Swarm是通过监听2375端口进行通信的,所以在使用Swarm进行集群管理之前,需要设置一下2375端口的监听。所有主机节点docker开启2375监听,docker版本不同,配置方式不一样

vim  /lib/systemd/system/docker.service

在ExecStart加入:

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

**3.0、重启docker服务
**

systemctl daemon-reload    ##使配置文件生效
systemctl restart docker

四、Swarm安装和集群创建

**3.1、Swarm镜像下载
**

在两台机器上分别安装Swarm

[root@swarm01 fendo]# docker pull swarm
Using default tag: latest
latest: Pulling from library/swarm
dd72058debf0: Pull complete 
cb543654edaf: Pull complete 
44212202dc6d: Pull complete 
Digest: sha256:c97a27b020ae4439432c842769d8e731661d5987962e33004114e4aba9d03b4c
Status: Downloaded newer image for swarm:latest
[root@swarm01 fendo]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
swarm               latest              59c0df55980b        6 months ago        15.8MB

3.2、初始化Swarm

[root@swarm01 fendo]# docker swarm init --advertise-addr  192.168.182.110
Swarm initialized: current node (zeisswb5lm92gj8rsng9pxzxd) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-043bhcd0voztnsui79l1rg0pyu4xq1q5x188jeyvppplt2rvnk-6diwivwlc14aipcji90tms4ua 192.168.182.110:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。

其中,–advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

**3.3、添加集群节点
**

然后在swaram02机器上执行以下命令

[root@swaram02 fendo]# docker swarm join --token SWMTKN-1-5vqq9j2bwq5rllsubg49cs16440v2ixkngvf25e5688i86c8qf-eawa9w8wf2m5mu9e6ovmhjuyy 192.168.182.110:2377

加入到集群中去:

3.4、查看集群节点

[root@swarm01 fendo]# docker node list
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
j4o241rnbz6rq2k6204s635lb     swaram02            Ready               Active                                  18.03.1-ce
k1itretyzjwzskezlkhdc7wkj *   swarm01             Ready               Active              Leader              18.03.1-ce
举报

相关推荐

0 条评论