Docker swarm集群节点服务更新(2)

我们用redis做为基础进行,进行部署,使用dockerhub的image,和(1)结构一样Screenshot.png

更新

创建一个服务

[root@DS-VM-Node117-117-linuxea ~]# docker service create
> --replicas 3
> --name redis
> --update-delay 10s
> marksugar/redis:1
4bv0yd0rylekh6i7t3efswy8t
[root@DS-VM-Node117-117-linuxea ~]#

--update-delay标志配置服务任务或任务集之间的更新之间的时间延迟。您可以将时间描述T为秒Ts,分钟Tm或小时数的组合Th。0m30s表示10分30秒的延迟

查看节点信息

[root@DS-VM-Node117-117-linuxea ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dda61442874f marksugar/redis:1 "/start.sh" 4 minutes ago Up 4 minutes 6379/tcp, 26379/tcp redis.2.0oq4tgo5016im6pyy8eigyed0
[root@DS-VM-Node98-linuxea /data/rds]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8368afff7aae marksugar/redis:1 "/start.sh" 4 minutes ago Up 4 minutes 6379/tcp, 26379/tcp redis.1.bmyko14s690hogqrlff8db130
[root@DS-VM-Node98 /data/rds]#
[root@DS-VM-Node114-linuxea ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a835f7ec1c78 marksugar/redis:1 "/start.sh" 5 minutes ago Up 4 minutes 6379/tcp, 26379/tcp redis.3.cpo3lss13l9vt7s9rqxi5pszb

检查redis服务

[root@DS-VM-Node117-117-linuxea ~]# docker service inspect --pretty redis
ID: 4bv0yd0rylekh6i7t3efswy8t
Name: redis
Mode: Replicated
Replicas: 3
Placement:
UpdateConfig:
Parallelism: 1
Delay: 10s
On failure: pause
ContainerSpec:
Image: marksugar/redis:1
Resources:

更新

迭代到redis:2

[root@DS-VM-Node117-117-linuxea ~]# docker service update --image marksugar/redis:2 redis
redis
  • 默认情况下,调度程序应用滚动更新如下:
  • 停止第一个任务
  • 计划已停止任务的更新。
  • 启动更新任务的容器。
  • 如果任务的更新返回RUNNING,等待指定的延迟时间,然后启动下一个任务。
  • 如果在更新期间的任何时间任务返回FAILED,则暂停更新。

查看滚动更新信息

[root@DS-VM-Node117-117-linuxea ~]# docker service inspect --pretty redis
ID: 4bv0yd0rylekh6i7t3efswy8t
Name: redis
Mode: Replicated
Replicas: 3
Update status:
State: completed
Started: 4 minutes ago
Completed: 2 minutes ago
Message: update completed
Placement:
UpdateConfig:
Parallelism: 1
Delay: 10s
On failure: pause
ContainerSpec:
Image: marksugar/redis:2
Resources:

观察动作完成度

[root@DS-VM-Node117-117-linuxea ~]# docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
9nv4wbflniq85iowfhpuqeow6 redis.1 marksugar/redis:2 DS-VM-Node117-117-linuxea.cluster.com Running Running 22 seconds ago
bmyko14s690hogqrlff8db130 _ redis.1 marksugar/redis:1 DS-VM-Node98.cluster.com Shutdown Shutdown less than a second ago
1rrmo8ekz7soaytpwx7hbd1kp redis.2 marksugar/redis:2 DS-VM-Node98.cluster.com Running Running less than a second ago
0oq4tgo5016im6pyy8eigyed0 _ redis.2 marksugar/redis:1 DS-VM-Node117-117-linuxea.cluster.com Shutdown Shutdown 44 seconds ago
28ox09frhbyjvfotual17p03j redis.3 marksugar/redis:2 DS-VM-Node117-117-linuxea.cluster.com Ready Ready 9 seconds ago
cpo3lss13l9vt7s9rqxi5pszb _ redis.3 marksugar/redis:1 DS-VM-Node114.cluster.com Shutdown Running 21 minutes ago
[root@DS-VM-Node117-117-linuxea ~]#

如果失败而暂停这需要重新启动暂停的更新服务 docker service update redis

更新完成

等待几分钟后滚动更新完成:

[root@DS-VM-Node117-117-linuxea ~]# docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
9nv4wbflniq85iowfhpuqeow6 redis.1 marksugar/redis:2 DS-VM-Node117-117-linuxea.cluster.com Running Running about a minute ago
bmyko14s690hogqrlff8db130 _ redis.1 marksugar/redis:1 DS-VM-Node98.cluster.com Shutdown Shutdown less than a second ago
1rrmo8ekz7soaytpwx7hbd1kp redis.2 marksugar/redis:2 DS-VM-Node98.cluster.com Running Running less than a second ago
0oq4tgo5016im6pyy8eigyed0 _ redis.2 marksugar/redis:1 DS-VM-Node117-117-linuxea.cluster.com Shutdown Shutdown 2 minutes ago
28ox09frhbyjvfotual17p03j redis.3 marksugar/redis:2 DS-VM-Node117-117-linuxea.cluster.com Running Running about a minute ago
cpo3lss13l9vt7s9rqxi5pszb _ redis.3 marksugar/redis:1 DS-VM-Node114.cluster.com Shutdown Shutdown less than a second ago
[root@DS-VM-Node117-117-linuxea ~]#

排除

如果此时我需要保留一个节点不被更新,这可以排除

drain

[root@DS-VM-Node117-linuxea ~]# docker node update --availability drain DS-VM-Node117.cluster.com
DS-VM-Node117.cluster.com

在查看已经被排除,不会被更新

[root@DS-VM-Node117-linuxea ~]# docker node inspect --pretty DS-VM-Node117.cluster.com
ID: as4u4yh1h5h84y06h2etad4yb
Hostname: DS-VM-Node117.cluster.com
Joined at: 2017-07-28 05:16:16.888583447 +0000 utc
Status:
State: Ready
Availability: Drain
Manager Status:
Address: 10.10.240.117:2377
Raft Status: Reachable
Leader: Yes
Platform:
Operating System: linux
Architecture: x86_64
Resources:
CPUs: 1
Memory: 3.858 GiB
Plugins:
Network: bridge, host, null, overlay
Volume: local
Engine Version: 1.12.3
[root@DS-VM-Node117-linuxea ~]#

可以看出117被分离,并没有更新到117机器上

[root@DS-VM-Node117-linuxea ~]# docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
361rt5z5scr3i4ezx3c5fmkmg redis.1 marksugar/redis:1 DS-VM-Node98.cluster.com Running Running less than a second ago
2gxzej0b0zjnlz9qcqs2f02ym redis.2 marksugar/redis:1 DS-VM-Node98.cluster.com Running Running less than a second ago
36kam6gq0x72s6443v8o3awub redis.3 marksugar/redis:1 DS-VM-Node114.cluster.com Running Starting less than a second ago

active

[root@DS-VM-Node117-linuxea ~]# docker node update --availability active DS-VM-Node117.cluster.com
DS-VM-Node117.cluster.com
[root@DS-VM-Node117 ~]# docker node inspect --pretty DS-VM-Node117.cluster.com
ID: as4u4yh1h5h84y06h2etad4yb
Hostname: DS-VM-Node117.cluster.com
Joined at: 2017-07-28 05:16:16.888583447 +0000 utc
Status:
State: Ready
Availability: Active
Manager Status:
Address: 10.10.240.117:2377
Raft Status: Reachable
Leader: Yes
Platform:
Operating System: linux
Architecture: x86_64
Resources:
CPUs: 1
Memory: 3.858 GiB
Plugins:
Network: bridge, host, null, overlay
Volume: local
Engine Version: 1.12.3