Docker学习笔记(八)Docker Swarm集群

Swarm使用GO语言开发完成,是docker容器管理工具之一,和swarm一起的还有machine和compose。Swarm是一套docker容器集群管理工具,Swarm使用标准的docker
API接口作为其前端访问的入口,各种docker client均可与其通讯。 Swarm分为以下几个部分:
1、Swarm:集群的管理和编排是使用嵌入到docker引擎的SwarmKit,可在docker初始化时启动swarm模式,或加入到已存在的swarm;
2、Node:一个节点是已加入到swarm的docker实例,当部署应用到集群,会提交服务定义到管理节点,接着Manager管理节点调度任务到worker节点,manager节点还执行维护集群的状态的编排和集群管理功能,worker节点接受并执行来自manager节点的任务。通常,manager节点也可以是worker节点,worker节点会报告当前状态给manager节点。
3、service:服务是在 worker节点上要执行任务的定义,他在工作节点上执行,当你创建服务时,需要指定容器镜像。
4、task:任务是在docker容器中执行的命令Manager节点根据指定数量的任务副本分配任务给worker节点task是server的执行实体。

下面开始实验创建swarm集群:

一、实验环境:

操作系统IP主机名swarm角色
CentOS7192.168.1.3swarmmanager
CentOS7192.168.1.4swarm01node
CentOS7192.168.1.5swarm02node

二、配置环境

1、安装docker并配置开机启动,及配置加速器:
2、修改docker监听端口:

vim /usr/lib/systemd/system/docker.service

在ExecStart加入:

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

3、重启docker:

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

三、安装Swarm

1、下载swarm镜像:

docker pull swarm

2、初始化Swarm集群:
在192.168.1.3上执行:

[root@swarm ~]# docker swarm init --advertise-addr  192.168.1.3
Swarm initialized: current node (ka6kyetddfq2sss6ks6veoxlp) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-3xisgjfqmlovis15jhkrxrkui417xjeytmkp2g2ybckzn4pumf-59k05oign6ne3bae4swu5io5y 192.168.1.3:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

这就创建了一个swarm集群,上面标黄的意思为:加入一个worker节点到这个swarm,执行下面这行命令:

docker swarm join --token SWMTKN-1-3xisgjfqmlovis15jhkrxrkui417xjeytmkp2g2ybckzn4pumf-59k05oign6ne3bae4swu5io5y 192.168.1.3:2377

这个token是全球唯一的,不会重复的。
如果需要添加一个manager节点到这个集群,使用docker swarm join-token manager命令来查看具体命令,如:

[root@localhost ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-007g3ba4sp1gr9pq75xgccsgjfvcp2cxtsv2q8d4z3p0irls6z-0o5ql2fuutn33mpylwyauazp7 192.168.1.3:2377

3、只需要在需要成为manager节点的主机上执行下面这台命令就可以了:

docker swarm join --token SWMTKN-1-007g3ba4sp1gr9pq75xgccsgjfvcp2cxtsv2q8d4z3p0irls6z-0o5ql2fuutn33mpylwyauazp7 192.168.1.3:2377

4、如果找不到接入集群的命令了,可以执行下列命令找出:

[root@localhost ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-007g3ba4sp1gr9pq75xgccsgjfvcp2cxtsv2q8d4z3p0irls6z-1irecgw4sbapydxcna3wb7b91 192.168.1.3:2377

5、、查看swarm集群状态:

[root@swarm ~]# docker node list
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ka6kyetddfq2sss6ks6veoxlp *   swarm               Ready               Active              Leader              19.03.2
kxsyv3cttqeiodgj8k87cjq2q     swarm01             Ready               Active                                  19.03.2
6tsqxx07gicv81gt7vtxmwt81     swarm02             Ready               Active                                  19.03.2

可以看出,192.168.1.3节点为leader,管理节点。

6、Docker Swarm可视化管理
在集群中的manager节点上运行 portainer服务,映射端口为9000,可以通过访问IP:9000进入可视化页面:

docker service create \
--name portainer \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
-H unix:///var/run/docker.sock

7、在集群中的manager节点上运行可视化的visualizer服务,可以非常直观的显示整个Swarm集群的信息、状态、运行的容器等:

docker service create \
--name=viz \
--publish=8088:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
manomarks/visualizer

四 Swarm基本使用:

1、docker swarm基本命令:

docker node: 用来管理swarm节点;
docker service:用来管理swarm服务;
docker stack:用来管理swarm堆栈;
docker swarm:管理swarm;

2、docker node命令

先查看docker node有哪些命令

[root@swarm ~]# docker node --help
Usage:	docker node COMMAND
Manage Swarm nodes
Commands:
  demote:降级节点
  inspect:查看节点的详细信息
  ls:查看集群中的节点
  promote:升级节点
  ps:查看节点当前执行的任务
  rm:从集群中删除节点
  update:更新节点

(1)将192.168.1.4和192.168.1.5加入swarm集群:
将192.168.1.4作为worker节点加入集群

[root@swarm01 ~]# docker swarm join --token SWMTKN-1-3xisgjfqmlovis15jhkrxrkui417xjeytmkp2g2ybckzn4pumf-59k05oign6ne3bae4swu5io5y 192.168.1.3:2377
This node joined a swarm as a worker.

将192.168.1.5作为manager节点加入集群:

[root@localhost ~]# docker swarm join --token SWMTKN-1-007g3ba4sp1gr9pq75xgccsgjfvcp2cxtsv2q8d4z3p0irls6z-0o5ql2fuutn33mpylwyauazp7 192.168.1.3:2377
This node joined a swarm as a manager.

1、集群节点升降级:

升级:

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

查看节点状态:

降级:

[root@swarm ~]# docker node demote swarm01
Manager swarm01 demoted in the swarm.

查看节点状态:

(3)改变节点角色这一点和上面类似:
将swarm02改为普通worker节点:

[root@swarm ~]# docker node update swarm02 --role worker
swarm02

查看集群状态:

将swarm01升为manager节点:
[root@swarm ~]# docker node update swarm01 --role manager
swarm01
查看集群状态:

2、退出docker swarm集群:

在节点上执行:

[root@swarm02 ~]# docker swarm leave
Node left the swarm.

在manager上执行命令,删除推出集群的节点信息:

[root@swarm ~]# docker node rm swarm02
swarm02

再次查看集群状态,swarm02节点已经不存在了:

那可不可以对未退出集群的节点进行删除操作呢?

[root@swarm ~]# docker node rm swarm01
Error response from daemon: rpc error: code = FailedPrecondition desc = node kxsyv3cttqeiodgj8k87cjq2q is not down and can't be removed

通过实验可以看出,是不可以的。

3、查看集群中节点上的任务:

[root@swarm ~]# docker node ps 

或指定主机名:

[root@swarm ~]# docker node ps swarm

3、docker service命令

先查看docker service有哪些基本命令:

[root@swarm ~]# docker service --help
Usage:	docker service COMMAND
Commands:
  create      Create a new service
  inspect     Display detailed information on one or more services
  logs        Fetch the logs of a service or task
  ls          List services
  ps          List the tasks of one or more services
  rm          Remove one or more services
  rollback    Revert changes to a service's configuration
  scale       Scale one or multiple replicated services
  update      Update a service
Run 'docker service COMMAND --help' for more information on a command.

1、docker service cerate命令:

docker service create命令参数较多,不一一列举,需要详细了解可使用
docker service create --help
查看所有参数。本次只介绍常用参数:
–name 自定义服务名称
–publish 映射端口号,可简写-p
–replicas 运行实例个数
比如我们创建web服务,运行3个实例,使用nginx镜像,命名为web,映射端口80:80:

[root@master ~]# docker service create --name web --replicas=3 --publish 80:80 nginx
bg5qftsbnghibmugdmfq0b3aq
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged

标黄的实例状态会从prepare转换为ready,再转换为starting,最后转换为running。只有running状态才是正常的。

2、docker service ls

创建完成后,可使用docker service ls查看当前运行了哪些服务:

[root@master ~]# docker service ls
ID           NAME    MODE   REPLICAS      IMAGE      PORTS
bg5qftsbnghi  web     replicated   3/3            nginx:latest    *:80->80/tcp

3、docker service ps

需要查看服务运行状态,可以使用docker service ps +服务ID查看。比如上面我们可以看到web服务的ID为bg5qftsbnghi,如下:

[root@master ~]# docker service ps bg5qftsbnghi

4、docker service update

update常用参数有以下:
–publish-add参数指添加或者更新一个对外端口
–publish-rm参数指添加或者更新一个对外端口
–image参数指更新镜像
–hostname 更新或指定容器名称
–force 指强制更新,即使本次更新没有任何改变
例,将上面web服务映射端口删除:

[root@master ~]# docker service ls
ID         NAME   MODE   REPLICAS   IMAGE     PORTS
bg5qftsbnghi   web   replicated   3/3       nginx:latest   *:80->80/tcp
[root@master ~]# docker service update web --publish-rm 80:80
web
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 
 [root@master ~]# docker service ls
ID        NAME      MODE  REPLICAS         IMAGE      PORTS
bg5qftsbnghi  web    replicated      3/3             nginx:latest     

增加80端口映射:

[root@master ~]# docker service ls
ID        NAME      MODE  REPLICAS         IMAGE      PORTS
bg5qftsbnghi  web    replicated      3/3             nginx:latest        
[root@master ~]# docker service update web --publish-rm 80:80
web
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 
[root@master ~]# docker service ls
ID         NAME   MODE   REPLICAS   IMAGE     PORTS
bg5qftsbnghi   web   replicated   3/3       nginx:latest   *:80->80/tcp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dustin.Hoffman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值