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值将导致所有任务并行回滚。