前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker部署Swarm集群

Docker部署Swarm集群

作者头像
全栈程序员站长
发布2022-06-29 17:18:14
7190
发布2022-06-29 17:18:14
举报
文章被收录于专栏:全栈程序员必看

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

代码语言:javascript
复制
[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

代码语言:javascript
复制
[root@localhost ~]# hostname node1
[root@localhost ~]# bash
[root@node1 ~]# 

192.168.1.30

代码语言:javascript
复制
[root@localhost ~]# hostname node1
[root@localhost ~]# bash
[root@node2 ~]# 

免密登录


192.168.1.10

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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集群端口

代码语言:javascript
复制
[root@swarm-manage ~]# firewall-cmd --add-port=2377/tcp

节点加入集群


node1(192.168.1.20)

代码语言:javascript
复制
[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)

代码语言:javascript
复制
[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就是集群的管理节点

代码语言:javascript
复制
[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

删除集群节点


代码语言:javascript
复制
docker node rm 节点ID

节点提权


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

代码语言:javascript
复制
[root@swarm-manage ~]# docker node promote node2
Node node2 promoted to a manager in the swarm.

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

代码语言:javascript
复制
[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

代码语言:javascript
复制
[root@swarm-manage ~]# docker node demote node2

查看管理节点


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

代码语言:javascript
复制
[root@swarm-manage ~]# docker info
...
  Node Address: 192.168.1.10
  Manager Addresses:
   192.168.1.10:2377
...

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


swarm-manage(192.168.1.10)

下载完成后,运行

代码语言:javascript
复制
[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集群运行后,那个容器副本运行在哪台主机节点上

在这里插入图片描述
在这里插入图片描述

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年6月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Swarm介绍
  • 搭建swarm集群
    • 主机名更改
      • 免密登录
        • 初始化swarm集群
          • 节点加入集群
            • 删除集群节点
              • 节点提权
                • 节点降权
                  • 查看管理节点
                    • 下载图形化显示工具的镜像
                    相关产品与服务
                    容器镜像服务
                    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档