Docker Swarm 服务滚动更新说明

一些操作命令:

docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6
docker service inspect --pretty redis
docker service update --image redis:3.0.7 redis
docker service inspect --pretty redis

docker service ps redis

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                 ERROR               PORTS
ntuft6c7zjnz        redis.1             redis:3.0.7         mysqlmaster         Running             Running about a minute ago                        
fo4nmykfpx59         \_ redis.1         redis:3.0.6         mysqlmaster         Shutdown            Shutdown about a minute ago                       
esjyranoorjw        redis.2             redis:3.0.7         mysqlslave          Running             Running 27 seconds ago                            
ob3ffpp3kzs0         \_ redis.2         redis:3.0.6         mysqlslave          Shutdown            Shutdown 59 seconds ago                           
bj75ybp1r6n6        redis.3             redis:3.0.7         mysqlslave          Running             Running 10 seconds ago                            
vdbcqeyo2ebe         \_ redis.3         redis:3.0.6         mysqlslave          Shutdown            Shutdown 13 seconds ago

您可以在服务部署时配置滚动更新策略。

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

默认情况下,调度程序一次更新1个任务。 您可以传递 --update-parallelism 标志来配置调度程序同时更新的最大服务任务数。

默认情况下,当对单个任务的更新返回 RUNNING 状态时,调度程序会安排另一个任务进行更新,直到更新所有任务。 如果在更新期间任何时候任务返回 FAILED,则调度程序会暂停更新。 您可以使用 docker service create 或 docker service update 的 --update-failure-action 标志来控制行为。

在下面的示例服务中,调度程序一次最多应用2个副本。当更新的任务返回 RUNNING 或者 FAILED 时,调度程序在停止下一个任务更新之前等待10秒钟:

$ docker service create \
--replicas 10 \
--name my_web \
--update-delay 10s \
--update-parallelism 2 \
--update-failure-action continue \
alpine

--update-max-failure-ratio 在更新之前,该标志控制在更新之前哪部分任务可能会失败,因为整体被视为失败。例如,--update-max-failure-ratio 0.1 --update-failure-action pause 在10%的任务更新失败后,更新将暂停。

如果任务未启动,或者在 --update-monitor 标志指定的监视时间段内停止运行,则认为单个任务更新失败。默认值为 --update-monitor 30s,这意味着任务在其开始后30秒内失败的任务计入服务更新失败阈值,并且在此之后的失败不计入。

如果更新失败,则自动回滚

您可以通过以下方式来配置服务:如果对服务的更新导致重新部署失败,则该服务可以自动回滚到以前的配置。这有助于保护服务可用性。您可以在创建或更新服务时设置以下一个或多个标志。如果您未设置值,则使用默认值。

选项              	            默认	    描述
---------------------------------------------------------------------------------
--rollback-delay	            0s	            在回滚下一个任务之前回滚任务之后要等待的时间量。0在第一个回滚任务部署完成后立即回滚第二个任务的方法值。
--rollback-failure-action	    pause	    当任务无法回滚时,无论是要pause还是continue试图回滚其他任务。
--rollback-max-failure-ratio	    0	            在回滚期间容忍的故障率,指定为介于0和1之间的浮点数。例如,给定5个任务,故障率.2会容忍一个任务无法回滚。0的值的实例没有故障被容忍,而值1实例的任何数量的故障容忍。
--rollback-monitor	            5s	            每个任务回滚之后的持续时间以监视失败。如果任务在此时间段过去之前停止,则认为回滚失败。
--rollback-parallelism	            1	            并行回滚的最大任务数。默认情况下,一次回滚一个任务。一个0值将导致所有任务并行回滚。
posted @ 2021-08-20 14:17  Varden  阅读(700)  评论(0编辑  收藏  举报