Docker Swarm 维护模式

简介: Docker Swarm 维护模式

Docker Swarm 维护模式

文章目录

1. 创建集群

第一台执行:

$ docker swarm init
Swarm initialized: current node (qgowushrnwa87hul908vicsph) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-5kk5jzz8rnjh0wctnsdm19yuvnvayw6eik9k3udyg4pupkklbx-0opd5tey2uxdplbzibg9uw104 172.17.0.14:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

在第二台主机上执行下面的命令,将它作为一个worker添加到集群中。

token=$(ssh -o StrictHostKeyChecking=no 172.17.0.14 "docker swarm join-token -q worker") && docker swarm join 172.17.0.14:2377 --token $token

2. 部署服务

首先在两个集群模式节点上部署一个带有两个副本的HTTP服务器。部署将导致在每个节点上部署一个容器。

$ docker service create --name lbapp1 --replicas 2 -p 80:80 katacoda/docker-http-server
$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                                PORTS
ud5scjjdmsu2        lbapp1              replicated          2/2                 katacoda/docker-http-server:latest   *:80->80/tcp
$ docker ps
CONTAINER ID        IMAGE                                COMMAND             CREATED             STATUS              PORTS               NAMES
d584747866f1        katacoda/docker-http-server:latest   "/app"              45 

3. 开启维护模式

当需要维护时,正确管理流程以确保可靠性是很重要的。第一个操作是从负载平衡器中删除节点,并让所有活动会话都完成。这将确保没有请求被发送到主机。其次,需要重新部署系统上的工作负载,以确保容量得到维护。

Docker Swarm将在设置节点的可用性时为你管理这一点,设置可用性需要知道集群模式的IP。

$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
qgowushrnwa87hul908vicsph *   host01              Ready               Active              Leader              19.03.13
ksjozt8473y0vwpvsg2uxxyue     host02              Ready               Active                                  19.03.13
$ worker=$(docker node ls | grep -v "Leader" | awk '{print $1}' | tail -n1); echo $worker
ksjozt8473y0vwpvsg2uxxyue

通过更新节点来设置可用性

$ docker node update $worker --availability=drain
ksjozt8473y0vwpvsg2uxxyue

容器现在应该都运行在单个管理器节点上。

$ docker ps
CONTAINER ID        IMAGE                                COMMAND             CREATED             STATUS              PORTS               NAMES
342a28429e8c        katacoda/docker-http-server:latest   "/app"              33 seconds ago      Up 27 seconds       80/tcp              lbapp1.2.c1rpw4q1lnohsdi12eclvzn9f
d584747866f1        katacoda/docker-http-server:latest   "/app"              7 minutes ago       Up 7 minutes        80/tcp              lbapp1.1.qevzgg0osytfsp0l6jfqryrq1

当查看所有节点时,可用性将发生变化

$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
qgowushrnwa87hul908vicsph *   host01              Ready               Active              Leader              19.03.13
ksjozt8473y0vwpvsg2uxxyue     host02              Ready               Drain                                   19.03.13

4. 关闭维护模式

一旦完成了工作,节点应该可以用于未来的工作负载。这是通过设置可用性为活动。

$ docker node update $worker --availability=active
ksjozt8473y0vwpvsg2uxxyue

现在可用性又变回来了

$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
qgowushrnwa87hul908vicsph *   host01              Ready               Active              Leader              19.03.13
ksjozt8473y0vwpvsg2uxxyue     host02              Ready               Active                                  19.03.13

值得注意的是,Docker不会重新安排现有的工作负载。查看这些容器,您将看到它们仍然运行在单个主机上。

$ docker ps
CONTAINER ID        IMAGE                                COMMAND             CREATED             STATUS              PORTS               NAMES
342a28429e8c        katacoda/docker-http-server:latest   "/app"              2 minutes ago       Up 2 minutes        80/tcp              lbapp1.2.c1rpw4q1lnohsdi12eclvzn9f
d584747866f1        katacoda/docker-http-server:latest   "/app"              10 minutes ago      Up 9 minutes        80/tcp              lbapp1.1.qevzgg0osytfsp0l6jfqryrq1

相反,Swarm只会将新的工作负载安排到新可用的主机上。这可以通过扩展所需的副本数量进行测试。

$ docker service scale lbapp1=3
lbapp1 scaled to 3
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 

新容器将被调度到第二个节点。

参考:



相关文章
|
16天前
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
16 6
|
16天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
19 5
|
16天前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
13 5
|
17天前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
18 4
|
17天前
|
数据安全/隐私保护 Docker 容器
docker swarm创建网络
【10月更文挑战第15天】
10 1
|
2天前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
2天前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
|
2天前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
2天前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
2天前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。
下一篇
无影云桌面