全部产品
容器服务

滚动更新

更新时间:2017-09-11 16:28:27   分享:   

模板版本的支持

Compose V1/V2 Compose V3
aliyun.rolling_updates 标签
aliyun.rolling_updates.parallelism
Compose 中的 update_config 一节。该功能由 swarm mode 原生提供,可设置更新的批量、间隔时间、失败后的动作等。

Compose V1/V2

updates

更新某个服务时,如果该服务包括超过一个以上容器(使用 scale 标签定义),在第 n 个容器更新成功后,再去做第 n+1 个容器的更新,以此来最小化停止服务时间。

编排示例:

部署 WordPress 服务,通过scale标签指定部署 2 个容器,使用rolling_updates标签可以使 WordPress 对外停止服务的时间最小化。

  1. web:
  2. image: wordpress
  3. ports:
  4. - 80
  5. restart: always
  6. links:
  7. - 'db:mysql'
  8. labels:
  9. aliyun.logs: /var/log
  10. aliyun.routing.port_80: http://wordpress
  11. aliyun.rolling_updates: 'true'
  12. aliyun.scale: '2'
  13. db:
  14. image: mariadb
  15. environment:
  16. MYSQL_ROOT_PASSWORD: example
  17. restart: always
  18. labels:
  19. aliyun.logs: /var/log/mysql

parallelism

您可以使用 parallelism 标签定义 rolling_updates 每次并行更新的容器数量。

注意:此标签必须和 rolling_update 配合使用,单独使用无效。

取值:

  • 默认值为 1,即每次只更新一个容器。
  • 当其值大于 1 的时候,rolling_updates 过程中,每次会以 parallelism 定义的值来并行更新相应个数的容器,实现批量更新。
  • 当定义值无效时,默认为 1。

    注意:为了确保始终有容器在提供服务,建议 parallelism 定义的值小于服务包含的容器数。

编排示例:

下面的示例部署 Nginx 服务,通过 scale 标签部署 3 个容器,使用 rolling_updatesparallelism 标签定义每次以 2 个容器为单位来进行批量更新。

  1. web:
  2. image: nginx:latest
  3. restart: always
  4. environment:
  5. - "reschedule:on-node-failure"
  6. ports:
  7. - 80
  8. labels:
  9. aliyun.scale: "3"
  10. aliyun.rolling_updates: 'true'
  11. aliyun.rolling_updates.parallelism: "2"

Compose V3

设置如何更新服务。

字段解释:

  • parallelism:每次并行更新的容器数量。
  • delay:更新不同组容器之间的时间间隔。
  • failure_action:某一更新失败时,系统如何操作。可以为 continue (失败后,继续更新下一批容器),回滚(回滚到更新前的状态),或者 pause(失败后,停止更新服务),默认为 pause。
  • monitor:更新任务完成后监控多长时间来检测更新是否失败。单位可以为 ns、us、ms、s、m、h。默认为 0s,更新完成后立即检查更新是否失败。
  • max_failure_ratio:每次更新允许的失败占比。

编排示例:

  1. version: '3'
  2. services:
  3. vote:
  4. image: wordpress:4
  5. depends_on:
  6. - mysql
  7. deploy:
  8. replicas: 2
  9. update_config:
  10. parallelism: 2
  11. delay: 10s
本文导读目录
本文导读目录
以上内容是否对您有帮助?