Docker Swarm 学习手札 – 记忆角落

Docker Swarm 学习手札

/ 0评 / 0

Docker Swarm 学习手札

Docker Swarm 节点介绍

运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。

节点分为管理 (manager) 节点和工作 (worker) 节点。

管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leaderleader 通过 raft 协议实现。

工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。

img

Docker Swarm 服务和任务介绍

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

服务 (Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:

两种模式通过 docker service create--mode 参数指定。

img

搭建 Swarm 集群

[root@owy-bd-c16-21 ~]# docker swarm --help 

Usage:  docker swarm COMMAND
Commands:
  ca          Display and rotate the root CA # 显示和轮转root的ca
  init        Initialize a swarm # 初始化集群
  join        Join a swarm as a node and/or manager # 加入集群
  join-token  Manage join tokens # 获取令牌
  leave       Leave the swarm # 退出集群
  unlock      Unlock swarm 
  unlock-key  Manage the unlock key
  update      Update the swarm  # 更新集群

初始化集群

格式:docker swarm init

[root@owy-bd-c16-21 ~]# docker swarm init --help
Usage:  docker swarm init [OPTIONS]
Options:
      --advertise-addr string                  Advertised address (format: <ip|interface>[:port])
      --autolock                               Enable manager autolocking (requiring an unlock key to start a stopped manager)
      --availability string                    Availability of the node ("active"|"pause"|"drain") (default "active")
      --cert-expiry duration                   Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
      --data-path-addr string                  Address or interface to use for data path traffic (format: <ip|interface>)
      --data-path-port uint32                  Port number to use for data path traffic (1024 - 49151). If no value is set or is set to 0, the default port (4789) is used.
      --default-addr-pool ipNetSlice           default address pool in CIDR format (default [])
      --default-addr-pool-mask-length uint32   default address pool subnet mask length (default 24)
      --dispatcher-heartbeat duration          Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
      --external-ca external-ca                Specifications of one or more certificate signing endpoints
      --force-new-cluster                      Force create a new cluster from current state
      --listen-addr node-addr                  Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
      --max-snapshots uint                     Number of additional Raft snapshots to retain
      --snapshot-interval uint                 Number of log entries between Raft snapshots (default 10000)
      --task-history-limit int                 Task history retention limit (default 5)

在已经安装好 Docker 的主机上执行如下命令:

执行 docker swarm init 命令的节点自动成为管理节点。

如果你的 Docker 主机有多个网卡,拥有多个 IP,必须使用 --advertise-addr 指定 IP

docker swarm init --advertise-addr 10.228.237.108

[root@owy-bd-c16-21 ~]# docker swarm init --advertise-addr 10.228.237.108
Swarm initialized: current node (soz5k82c0kn8045ia9izfiy2o) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-0ezupkgyc2vppqlaym2koemfgwm4q4tw8tije1g9kxqmovl5au-2oofp2scwaqzohdqhsaxcd2w0 10.228.237.108:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

获取令牌,并加入

在manager机器执行,让其他服务器加入

# 获取工作者令牌
docker swarm join-token worker

# 获取管理者令牌
docker swarm join-token manager

离开集群

工作节点:docker swarm leave

管理节点默认是不允许离开集群的,网上说可通过docker swarm leave -f 退出,但是会造成很大的错误.因此我自个测试时先把 管理节点降为工作节点:docker node demote 服务id,在进行退出集群....

[root@owy-bd-c16-21 ~]# docker node --help 

Usage:  docker node COMMAND

Manage Swarm nodes

Commands:
  demote      Demote one or more nodes from manager in the swarm # 从管理节点降级为工作节点
  inspect     Display detailed information on one or more nodes # 显示详情信息
  ls          List nodes in the swarm # 查询列表
  promote     Promote one or more nodes to manager in the swarm # 从工作节点升级为管理节点
  ps          List tasks running on one or more nodes, defaults to current node # 查询运行任务
  rm          Remove one or more nodes from the swarm # 删除节点
  update      Update a node # 更新节点

查看集群信息:

在管理节点使用 docker node ls 查看集群。

[root@owy-bd-c16-21 ~]# docker node ls
ID                            HOSTNAME        STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
kapqvw15476aswk9fiq7my6wv     owy-bd-c16-18   Ready     Active         Reachable        20.10.11
fokja54a2tyimuxdtoongawb2     owy-bd-c16-19   Ready     Active                          20.10.11
wdg0tl5qct8ibzqfio4t2l0xb     owy-bd-c16-20   Ready     Active                          20.10.11
soz5k82c0kn8045ia9izfiy2o *   owy-bd-c16-21   Ready     Active         Leader           20.10.11

部署Swarm 服务

[root@owy-bd-c16-21 ~]# 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 #更新服务

新建服务

类似docker run的命令...

docker service create -p 8881:80 --name nginx nginx:latest

docker service create --replicas 3 -p 8881:80 --name nginx nginx:latest

查看服务

使用 docker service ls 来查看当前 Swarm 集群运行的服务。

[root@owy-bd-c16-21 ~]# docker service ls
ID             NAME      MODE         REPLICAS   IMAGE          PORTS
o6lnarmuzjwc   nginx     replicated   1/1        nginx:latest   *:8881->80/tcp

使用 docker service ps 来查看某个服务的详情。

[root@owy-bd-c16-21 ~]# docker service ps nginx
ID             NAME          IMAGE          NODE            DESIRED STATE   CURRENT STATE             ERROR                              PORTS
1swm97itvxxr   nginx.1       nginx:latest   owy-bd-c16-18   Running         Running 14 minutes ago      

使用 docker service logs 来查看某个服务的日志。

服务伸缩

我们可以使用 docker service scale 对一个服务运行的容器数量进行伸缩。

当业务处于高峰期时,我们需要扩展服务运行的容器数量。

docker service scale nginx=5

当业务平稳时,我们需要减少服务运行的容器数量。

docker service scale nginx=2

删除服务

使用 docker service rm 来从 Swarm 集群移除某个服务。

docker service rm nginx

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注