docker之swarm

一、swarm集群简介

  1. 目前涉及Docker集群的三个主要的技术:Swarm、Kubernetes、Mesos

  2. 跟集群管理有关的任何操作,都是在管理节点上操作的

  3. 一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader

  4. 所有节点都是任务执行节点,管理节点将服务 (service)下发至工作节点执行。

  5. 任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。

  6. 服务 (Services) 是指一组任务的集合,服务定义了任务的属性。

  7. 服务有两种模式:
    replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
    global services 每个工作节点上运行一个任务
    两种模式通过 docker service create 的 --mode 参数指定。

二、实验环境

前提:已经安装docker,并关闭防火墙

      IP         hostname 
192.168.199.201    node1
192.168.199.202    node2
192.168.199.203    node3

三、初始化swarm集群

在node1上操作,同时会成为管理节点

docker swarm init --advertise-addr 192.168.199.201

输出如下:

Swarm initialized: current node (z8a81qtm5iw57g5nfmhcpzs0u) is now a manager.

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

    docker swarm join --token SWMTKN-1-3t03fspt6n7tzj7hej66xbux3b0azb73k7f39agej0ptn8bcz4-57jkex3sbwcdgvtzg1pwnzjk2 192.168.199.201:2377

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

解析:

1、创建唯一集群token。
2、命令的输出包含了其它节点如何加入集群的命令。

四、加入到集群中

node2 && node 3 执行下面的命令
此时是作为工作节点加入的

docker swarm join --token SWMTKN-1-3t03fspt6n7tzj7hej66xbux3b0azb73k7f39agej0ptn8bcz4-57jkex3sbwcdgvtzg1pwnzjk2 192.168.199.201:2377

五、查看集群情况

这个只能在管理节点上执行

[root@node1 ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
z8a81qtm5iw57g5nfmhcpzs0u *   node1      Ready     Active         Leader           20.10.14
cukqso2qe8m66szbvi5mfuozj     node2      Ready     Active                          20.10.14
ql6ifeccwi5475vr5f6p3sd21     node3      Ready     Active                          20.10.14

六、提升工作节点为管理节点,冗余

在node1管理节点上执行:

docker node promote node_ID

可参考图示:

在这里插入图片描述

此时node2 和 node3也变成了管理节点
再次查看集群状态,node2 和 node3 的集群状态变成了“Reachable”
在这里插入图片描述

七、新建服务(命令行 or yml文件)

7.1 命令行直接新建

建议每次新建容器都加上 --name,好区分和查找

docker service create --replicas 1 --name my-nginx  nginx

图示:

在这里插入图片描述

查看运行的服务:

# 此命令只能在容器运行的节点上看到
docker node ps --filter name=my-nginx
OR
docker service ls | grep my-nginx
OR
docker service ps my-nginx

扩充容器为3个实例
这里看出有名字比较好操作

docker service scale my-nginx=3

图示:

在这里插入图片描述

再次查看

docker service ls | grep nginx

在这里插入图片描述

7.2 YML文件新建服务

编写docker-compose.yml
然后在docker-compose.yml同目录下,创建服务

docker stack deploy -c docker-compose.yml   ceshi_service

注意:
在有权限验证的docker私有Docker仓库,先要登录到私有仓库,
使用docker service创建容器还需要指定--with-registry-auth参数,否则无法创建容器

八、常用命令

8.1 列出集群中所有节点上正在运行的容器:

docker node ps --filter "desired-state=running" $(docker node ls -q)

8.2 节点降级为工作节点

docker node demote node_ID

8.3 删除节点

只有工作节点才能被删除

docker node rm  node_ID

8.4 离开集群

工作节点

docker swarm leave

管理节点先降级,然后离开,或者强制离开

docker swarm leave --force

8.5 添加新的节点

后续肯定忘记token,在管理节点上执行:

  1. 如果新节点作为管理节点加入:
docker swarm join-token manager
  1. 如果新节点作为工作节点加入:
docker swarm join-token worker

8.6 查看集群信息

docker info

8.7 停止某个服务并删除

docker service rm  service_NAME

8.8 查看所有服务

docker service ls

8.9 查看某个服务运行状态

docker service ps service_NAME

9.0 帮助

 docker service --help

9.1 节点降级为工作节点

docker  node  demote   node_ID

9.2 节点升级为管理节点

docker  node  promote   node_ID

9.3 新建swarm集群网络

docker network create --driver overlay network-name

9.4 更改节点的availablity状态

swarm集群中node的availability状态可以为active或者drain,
1.1:active状态下,node可以接受来自manager节点的任务分派;
1.2:drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)。

下线:(之前已经接受的任务也会转移到别的节点上)

docker node update --availability drain node_ID 

上线:

docker node update --availability active node_ID
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值