开发者社区 问答 正文

Swarm 集群 服务编排 rolling_updates


更新某个服务时,如果该服务包括超过一个以上容器(使用 scale 标签定义),在第 n 个容器更新成功后,再去做第 n+1 个容器的更新,以此来最小化停止服务时间。
示例:
部署 WordPress 服务,通过scale标签指定部署 2 个容器,使用rolling_updates标签可以使 WordPress 对外停止服务的时间最小化。
web:
  image: wordpress
  ports:
    - 80
  restart: always
  links:
    - 'db:mysql'
  labels:
    aliyun.logs: /var/log
    aliyun.routing.port_80: http://wordpress
    aliyun.rolling_updates: 'true'
    aliyun.scale: '2'
db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: example
  restart: always
  labels:
    aliyun.logs: /var/log/mysql



parallelism


您可以使用 parallelism 标签定义 rolling_updates 每次并行更新的容器数量。
[font=PingFangSC, "] Note
此标签必须和 rolling_update 配合使用,单独使用无效。



取值:

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

  • 当定义值无效时,默认为 1。


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



示例:
下面的示例部署 Nginx 服务,通过 scale 标签部署 4 个容器,使用 rolling_updates 和 parallelism 标签定义每次以 2 个容器为单位来进行批量更新。
web:
  image: nginx:latest
  restart: always
  environment:
      - "reschedule:on-node-failure"
  ports:
      - 80
  labels:
    aliyun.scale: "4"
    aliyun.rolling_updates: 'true'
    aliyun.rolling_updates.parallelism: "2"




展开
收起
青蛙跳 2018-08-22 16:41:32 1536 分享 版权
阿里云 AI 助理回答

您已经很好地理解了如何在阿里云容器服务中使用滚动更新(rolling updates)策略来减少服务中断时间,特别是通过结合 aliyun.rolling_updatesaliyun.rolling_updates.parallelism 标签的使用。让我来总结和强调一下您的描述中的关键点:

  1. 滚动更新(Rolling Updates): 这是一种逐步更新服务中容器实例的策略,旨在确保在任何时刻都有可用的服务实例对外提供服务,从而最小化停机时间。

  2. aliyun.rolling_updates: 当此标签设置为 'true' 时,表示启用滚动更新策略。这适用于那些需要保持高可用性、不允许长时间中断的服务。

  3. aliyun.scale: 此标签定义了服务应部署的容器实例数量。例如,如果您设置为 '2',则会部署两个容器实例。

  4. aliyun.rolling_updates.parallelism: 这个标签允许您控制在一次滚动更新过程中同时更新的容器数量。默认情况下,这个值是 1,意味着每次只更新一个容器。但如您所示,可以将其设置为更大的数字,比如 "2",以实现并行更新,从而可能更快地完成整个更新过程,但同时要确保至少有一个容器仍在提供服务。

  5. 注意事项:

    • 确保 parallelism 的值小于或等于总容器数,以防止所有容器同时被更新导致服务完全不可用。
    • 使用 reschedule:on-node-failure 类似的环境变量或策略,可以在节点故障时自动重新调度容器,进一步增强服务的稳定性。

通过这样的配置,您可以有效地管理服务更新,确保即使在更新过程中也能维持服务的连续性和稳定性。这是在基于 Docker 容器的应用部署中,特别是在阿里云 Kubernetes 服务(ACK)或容器服务(如 Container Service for Swarm)上管理长期运行服务的一个重要实践。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答