开发者社区 问答 正文

Swarm 集群 服务编排 高可用性调度


为了使应用有更高的可用性,容器服务支持将同一个服务的容器调度在不同的可用区(zone)里。当某个可用区故障时,应用依然能够提供服务。
您可以在编排文件中通过环境变量指定对可用区的选择,有以下两种格式。

  • availability:az==3
    服务至少分布在 3 个可用区中;如果当前集群没有 3 个可用区,或机器资源不够导致无法分布在 3 个可用区,容器创建会失败。
  • availability:az==~3
    服务尽可能分布在 3 个可用区中;无法满足时依然可以成功创建。

在下面的示例中,服务至少要部署在两个可用区中。
nnn:
  expose:
    - 443/tcp
    - 80/tcp
  image: 'nginx:latest'
  environment:
    - 'availability:az==2'
  labels:
    aliyun.scale: '8'
  restart: always
  volumes:
    - /var/cache/nginx


展开
收起
青蛙跳 2018-08-23 18:25:42 1536 分享 版权
阿里云 AI 助理回答

在阿里云容器服务中,为了确保应用的高可用性,通过编排文件(如 YAML 文件)来定义服务部署时对可用区(Zone)的选择是一个很好的策略。您提供的示例代码片段展示了如何配置一个服务以至少在两个不同的可用区中部署容器实例。下面是对该配置的详细解析:

nnn:
  expose:
    - 443/tcp
    - 80/tcp
  image: 'nginx:latest'
  environment:
    - 'availability:az==2' # 这一行指定了服务至少需要分布在2个可用区
  labels:
    aliyun.scale: '8' # 指定服务的副本数量为8
  restart: always
  volumes:
    - /var/cache/nginx

在这个配置中,environment 部分设置了一个环境变量 availability:az==2,这表示你希望该服务的容器至少被调度到2个不同的可用区里。这意味着阿里云容器服务会尝试将这些容器分布到集群中不同的可用区,以此来提高服务的容错能力和可用性。如果集群包含少于2个可用区,或者资源不足以在2个可用区中部署所有容器,则容器的创建可能会失败,这是由于您设定了严格的可用区分布要求。

如果希望服务尽可能分布在指定数量的可用区但不做强制要求,可以使用 availability:az==~2 格式,这样即使资源有限或可用区不足,容器创建仍会继续,只是可能无法达到理想的分布状态。

此外,labels 中的 aliyun.scale: '8' 表示这个服务需要保持8个副本运行,结合前面的可用区分配规则,系统会尽量将这些副本均匀地分布在至少2个可用区内,从而实现负载均衡和故障隔离。

最后,通过 expose 指定了服务对外开放的端口(443和80),restart: always 确保了容器在遇到故障时自动重启,以及通过 volumes 挂载了本地目录 /var/cache/nginx 到容器内部,用于持久化 Nginx 的缓存数据。

综上所述,这样的配置有助于构建一个既灵活又能抵抗单点故障的高可用服务环境。

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