Docker部署Swarm集群

Docker部署Swarm集群

Swarm介绍


Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全部用Go语言来完成开发,上周五,4月17号,Swarm0.2发布,相比0.1版本,0.2版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。

Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。下面是Swarm的结构图:
在这里插入图片描述
在这里插入图片描述

搭建swarm集群

实验环境

IP 服务 备注
192.168.1.10 Docker(已安装) swarm-manage
192.168.1.20 Docker(已安装) swarm node1
192.168.1.30 Docker(已安装) swarm node2

实验步骤

主机名更改


为了方便实验的进行,对每台主机进行更改主机名和hosts文件的编写
192.168.1.10

[root@localhost ~]# vim /etc/hosts
# 添加
192.168.1.10 swarm-manage
192.168.1.20 node1
192.168.1.30 node2
[root@localhost ~]# hostname swarm-manage
[root@localhost ~]# bash
[root@swarm-manage ~]# 

192.168.1.20

[root@localhost ~]# hostname node1
[root@localhost ~]# bash
[root@node1 ~]# 

192.168.1.30

[root@localhost ~]# hostname node1
[root@localhost ~]# bash
[root@node2 ~]# 

免密登录


192.168.1.10

[root@swarm-manage ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:dVRC5qbjHlvEC/2YwOkMZddtz/tKvi5DHU9YYG9k7Tc root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|           .=.+.+|
|           + + =o|
|          + = .+=|
|         = O  oE=|
|        S B +. +=|
|         = =.=. o|
|          =.= o. |
|         . +oo  .|
|          o  +=o.|
+----[SHA256]-----+
[root@swarm-manage ~]# ssh-copy-id -i root@node1
[root@swarm-manage ~]# ssh-copy-id -i root@node2
[root@swarm-manage ~]# scp /etc/hosts/ root@node1:/etc/
[root@swarm-manage ~]# scp /etc/hosts/ root@node2:/etc

初始化swarm集群


默认情况下,当swarm集群初始化后,分配的swarm集群中的ip网段为10.0.0.0/8,如果想要去指定网段,也可以通过初始化时的命令进行指定。如下:

docker swarm init –default-addr-pool 10.20.0.0/16 –advertise-addr 192.168.1.10可以用来指定swarm集群使用的网段.

–default-addr-pool-mask-length 26:加长子网掩码,在16为的基础上加长到26位

命令行选项default-addr-pool 10.10.0.0/16表示Docker将从/16地址范围分配子网。如果–default-addr-pool-mask-len未指定或显式设置为24,则会生成256个/24个网络,形式为10.10.X.0/24。

swarm manage(192.168.1.10)

指定集群管理节点为192.168.1.10

[root@swarm-manage ~]# docker swarm init --advertise-addr 192.168.1.10
Swarm initialized: current node (ocu03ojg1j4nawgkr2mvo7eij) is now a manager.

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

    docker swarm join --token SWMTKN-1-5xgjcrmf5c6i0fjyc73gz5t9rtg5r4g2zd28ajh81ts36lvdde-bsglhwea30jdkmddqi6ky0s23 192.168.1.10:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@swarm-manage ~]# docker info | grep Swarm
 Swarm: active # 表示Swarm集群已经在运行了

初始化结束后,会有两条重要输出,第一条为如果要添加swarm node请在要加入集群的主机上执行docker swarm join –token SWMTKN-1-5xgjcrmf5c6i0fjyc73gz5t9rtg5r4g2zd28ajh81ts36lvdde-bsglhwea30jdkmddqi6ky0s23 192.168.1.10:2377

第二条为,如果要添加新的manage swarm,请在本机执行docker swarm join-token
manager,然后会重新报出一个token,用于以manage的身份加入集群。

放行swarm集群端口

[root@swarm-manage ~]# firewall-cmd --add-port=2377/tcp

节点加入集群


node1(192.168.1.20)

[root@node1 ~]# docker swarm join --token SWMTKN-1-5xgjcrmf5c6i0fjyc73gz5t9rtg5r4g2zd28ajh81ts36lvdde-bsglhwea30jdkmddqi6ky0s23 192.168.1.10:2377
This node joined a swarm as a worker.

node2(192.168.1.30)

[root@node2 ~]# docker swarm join --token SWMTKN-1-5xgjcrmf5c6i0fjyc73gz5t9rtg5r4g2zd28ajh81ts36lvdde-bsglhwea30jdkmddqi6ky0s23 192.168.1.10:2377
This node joined a swarm as a worker.

swarm-manage(192.168.1.10)

查看集群节点,MANAGER显示的Leader就是集群的管理节点

[root@swarm-manage ~]# docker node ls
ID                            HOSTNAME       STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
c7kao8526ogi7v9vatzwprxr2     node1          Ready     Active                          20.10.2
mz35p4jafi44afxuytt1ab1m0     node2          Ready     Active                          20.10.2
ocu03ojg1j4nawgkr2mvo7eij *   swarm-manage   Ready     Active         Leader           20.10.2

删除集群节点


docker node rm 节点ID

节点提权


将node2主机提升为manager,我在提权后总遇到报错,只要一提权,这台节点状态就是DOWN,查看日志发现是因为没有该主机没有放行2377端口

[root@swarm-manage ~]# docker node promote node2
Node node2 promoted to a manager in the swarm.

查看集群节点,Reachable也表示manager节点

[root@swarm-manage ~]# docker node ls
ID                            HOSTNAME       STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
c7kao8526ogi7v9vatzwprxr2     node1          Ready     Active                          20.10.2
mz35p4jafi44afxuytt1ab1m0     node2          Ready     Active         Reachable        20.10.2
ocu03ojg1j4nawgkr2mvo7eij *   swarm-manage   Ready     Active         Leader           20.10.2

节点降权


将node2主机从manager降为worker

[root@swarm-manage ~]# docker node demote node2

查看管理节点


只要是在swarm集群中的主机都可以看到swamr的管理节点ip

[root@swarm-manage ~]# docker info
...
  Node Address: 192.168.1.10
  Manager Addresses:
   192.168.1.10:2377
...

下载图形化显示工具的镜像


swarm-manage(192.168.1.10)

下载完成后,运行

[root@swarm-manage ~]# docker pull dockersamples/visualizer
[root@swarm-manage ~]# docker run -itd -p 8888:8080 -e HOST=192.168.1.11 \
-e PORT=8080 --volume /var/run/docker.sock:/var/run/docker.sock \
--name visualizer --restart always dockersamples/visualizer
[root@swarm-manage ~]# firewall-cmd --add-port=8888/tcp
success

访问验证http://192.168.1.10:8888

如图所示,集群三个节点都是绿色状态

方便用来查看swarm集群运行后,那个容器副本运行在哪台主机节点上
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101837.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号