Service update failure thresholds and rollback

This adds support for two enhancements to swarm service rolling updates:

- Failure thresholds: In Docker 1.12, a service update could be set up
  to either pause or continue after a single failure occurs. This adds
  an --update-max-failure-ratio flag that controls how many tasks need to
  fail to update for the update as a whole to be considered a failure. A
  counterpart flag, --update-monitor, controls how long to monitor each
  task for a failure after starting it during the update.

- Rollback flag: service update --rollback reverts the service to its
  previous version. If a service update encounters task failures, or
  fails to function properly for some other reason, the user can roll back
  the update.

SwarmKit also has the ability to roll back updates automatically after
hitting the failure thresholds, but we've decided not to expose this in
the Docker API/CLI for now, favoring a workflow where the decision to
roll back is always made by an admin. Depending on user feedback, we may
add a "rollback" option to --update-failure-action in the future.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This commit is contained in:
Aaron Lehmann 2016-09-02 14:12:05 -07:00 committed by Tibor Vass
parent 3ba4b59233
commit 8c03c1201b
4 changed files with 78 additions and 67 deletions

View File

@ -1809,9 +1809,12 @@ _docker_service_update() {
--restart-delay --restart-delay
--restart-max-attempts --restart-max-attempts
--restart-window --restart-window
--rollback
--stop-grace-period --stop-grace-period
--update-delay --update-delay
--update-failure-action --update-failure-action
--update-max-failure-ratio
--update-monitor
--update-parallelism --update-parallelism
--user -u --user -u
--workdir -w --workdir -w

View File

@ -1108,6 +1108,8 @@ __docker_service_subcommand() {
"($help)--stop-grace-period=[Time to wait before force killing a container]:grace period: " "($help)--stop-grace-period=[Time to wait before force killing a container]:grace period: "
"($help)--update-delay=[Delay between updates]:delay: " "($help)--update-delay=[Delay between updates]:delay: "
"($help)--update-failure-action=[Action on update failure]:mode:(pause continue)" "($help)--update-failure-action=[Action on update failure]:mode:(pause continue)"
"($help)--update-max-failure-ratio=[Failure rate to tolerate during an update]:fraction: "
"($help)--update-monitor=[Duration after each task update to monitor for failure]:window: "
"($help)--update-parallelism=[Maximum number of tasks updated simultaneously]:number: " "($help)--update-parallelism=[Maximum number of tasks updated simultaneously]:number: "
"($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" "($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users"
"($help)--with-registry-auth[Send registry authentication details to swarm agents]" "($help)--with-registry-auth[Send registry authentication details to swarm agents]"
@ -1185,6 +1187,7 @@ __docker_service_subcommand() {
"($help)*--container-label-rm=[Remove a container label by its key]:label: " \ "($help)*--container-label-rm=[Remove a container label by its key]:label: " \
"($help)*--group-rm=[Remove previously added user groups from the container]:group:_groups" \ "($help)*--group-rm=[Remove previously added user groups from the container]:group:_groups" \
"($help)--image=[Service image tag]:image:__docker_repositories" \ "($help)--image=[Service image tag]:image:__docker_repositories" \
"($help)--rollback[Rollback to previous specification]" \
"($help -)1:service:__docker_complete_services" && ret=0 "($help -)1:service:__docker_complete_services" && ret=0
;; ;;
(help) (help)

View File

@ -12,36 +12,38 @@ Usage: docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Create a new service Create a new service
Options: Options:
--constraint value Placement constraints (default []) --constraint value Placement constraints (default [])
--container-label value Service container labels (default []) --container-label value Service container labels (default [])
--endpoint-mode string Endpoint mode (vip or dnsrr) --endpoint-mode string Endpoint mode (vip or dnsrr)
-e, --env value Set environment variables (default []) -e, --env value Set environment variables (default [])
--group-add value Add additional user groups to the container (default []) --group-add value Add additional user groups to the container (default [])
--help Print usage --help Print usage
-l, --label value Service labels (default []) -l, --label value Service labels (default [])
--limit-cpu value Limit CPUs (default 0.000) --limit-cpu value Limit CPUs (default 0.000)
--limit-memory value Limit Memory (default 0 B) --limit-memory value Limit Memory (default 0 B)
--log-driver string Logging driver for service --log-driver string Logging driver for service
--log-opt value Logging driver options (default []) --log-opt value Logging driver options (default [])
--mode string Service mode (replicated or global) (default "replicated") --mode string Service mode (replicated or global) (default "replicated")
--mount value Attach a mount to the service --mount value Attach a mount to the service
--name string Service name --name string Service name
--network value Network attachments (default []) --network value Network attachments (default [])
-p, --publish value Publish a port as a node port (default []) -p, --publish value Publish a port as a node port (default [])
--replicas value Number of tasks (default none) --replicas value Number of tasks (default none)
--reserve-cpu value Reserve CPUs (default 0.000) --reserve-cpu value Reserve CPUs (default 0.000)
--reserve-memory value Reserve Memory (default 0 B) --reserve-memory value Reserve Memory (default 0 B)
--restart-condition string Restart when condition is met (none, on-failure, or any) --restart-condition string Restart when condition is met (none, on-failure, or any)
--restart-delay value Delay between restart attempts (default none) --restart-delay value Delay between restart attempts (default none)
--restart-max-attempts value Maximum number of restarts before giving up (default none) --restart-max-attempts value Maximum number of restarts before giving up (default none)
--restart-window value Window used to evaluate the restart policy (default none) --restart-window value Window used to evaluate the restart policy (default none)
--stop-grace-period value Time to wait before force killing a container (default none) --stop-grace-period value Time to wait before force killing a container (default none)
--update-delay duration Delay between updates --update-delay duration Delay between updates
--update-failure-action string Action on update failure (pause|continue) (default "pause") --update-failure-action string Action on update failure (pause|continue) (default "pause")
--update-parallelism uint Maximum number of tasks updated simultaneously (0 to update all at once) (default 1) --update-max-failure-ratio value Failure rate to tolerate during an update
-u, --user string Username or UID (format: <name|uid>[:<group|gid>]) --update-monitor duration Duration after each task update to monitor for failure (default 0s)
--with-registry-auth Send registry authentication details to Swarm agents --update-parallelism uint Maximum number of tasks updated simultaneously (0 to update all at once) (default 1)
-w, --workdir string Working directory inside the container -u, --user string Username or UID (format: <name|uid>[:<group|gid>])
--with-registry-auth Send registry authentication details to Swarm agents
-w, --workdir string Working directory inside the container
``` ```
Creates a service as described by the specified parameters. You must run this Creates a service as described by the specified parameters. You must run this

View File

@ -12,43 +12,46 @@ Usage: docker service update [OPTIONS] SERVICE
Update a service Update a service
Options: Options:
--args string Service command args --args string Service command args
--constraint-add value Add or update placement constraints (default []) --constraint-add value Add or update placement constraints (default [])
--constraint-rm value Remove a constraint (default []) --constraint-rm value Remove a constraint (default [])
--container-label-add value Add or update container labels (default []) --container-label-add value Add or update container labels (default [])
--container-label-rm value Remove a container label by its key (default []) --container-label-rm value Remove a container label by its key (default [])
--endpoint-mode string Endpoint mode (vip or dnsrr) --endpoint-mode string Endpoint mode (vip or dnsrr)
--env-add value Add or update environment variables (default []) --env-add value Add or update environment variables (default [])
--env-rm value Remove an environment variable (default []) --env-rm value Remove an environment variable (default [])
--group-add value Add additional user groups to the container (default []) --group-add value Add additional user groups to the container (default [])
--group-rm value Remove previously added user groups from the container (default []) --group-rm value Remove previously added user groups from the container (default [])
--help Print usage --help Print usage
--image string Service image tag --image string Service image tag
--label-add value Add or update service labels (default []) --label-add value Add or update service labels (default [])
--label-rm value Remove a label by its key (default []) --label-rm value Remove a label by its key (default [])
--limit-cpu value Limit CPUs (default 0.000) --limit-cpu value Limit CPUs (default 0.000)
--limit-memory value Limit Memory (default 0 B) --limit-memory value Limit Memory (default 0 B)
--log-driver string Logging driver for service --log-driver string Logging driver for service
--log-opt value Logging driver options (default []) --log-opt value Logging driver options (default [])
--mount-add value Add or update a mount on a service --mount-add value Add or update a mount on a service
--mount-rm value Remove a mount by its target path (default []) --mount-rm value Remove a mount by its target path (default [])
--name string Service name --name string Service name
--publish-add value Add or update a published port (default []) --publish-add value Add or update a published port (default [])
--publish-rm value Remove a published port by its target port (default []) --publish-rm value Remove a published port by its target port (default [])
--replicas value Number of tasks (default none) --replicas value Number of tasks (default none)
--reserve-cpu value Reserve CPUs (default 0.000) --reserve-cpu value Reserve CPUs (default 0.000)
--reserve-memory value Reserve Memory (default 0 B) --reserve-memory value Reserve Memory (default 0 B)
--restart-condition string Restart when condition is met (none, on-failure, or any) --restart-condition string Restart when condition is met (none, on-failure, or any)
--restart-delay value Delay between restart attempts (default none) --restart-delay value Delay between restart attempts (default none)
--restart-max-attempts value Maximum number of restarts before giving up (default none) --restart-max-attempts value Maximum number of restarts before giving up (default none)
--restart-window value Window used to evaluate the restart policy (default none) --restart-window value Window used to evaluate the restart policy (default none)
--stop-grace-period value Time to wait before force killing a container (default none) --rollback Rollback to previous specification
--update-delay duration Delay between updates --stop-grace-period value Time to wait before force killing a container (default none)
--update-failure-action string Action on update failure (pause|continue) (default "pause") --update-delay duration Delay between updates
--update-parallelism uint Maximum number of tasks updated simultaneously (0 to update all at once) (default 1) --update-failure-action string Action on update failure (pause|continue) (default "pause")
-u, --user string Username or UID (format: <name|uid>[:<group|gid>]) --update-max-failure-ratio value Failure rate to tolerate during an update
--with-registry-auth Send registry authentication details to Swarm agents --update-monitor duration Duration after each task update to monitor for failure (default 0s)
-w, --workdir string Working directory inside the container --update-parallelism uint Maximum number of tasks updated simultaneously (0 to update all at once) (default 1)
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
--with-registry-auth Send registry authentication details to Swarm agents
-w, --workdir string Working directory inside the container
``` ```
Updates a service as described by the specified parameters. This command has to be run targeting a manager node. Updates a service as described by the specified parameters. This command has to be run targeting a manager node.