开发者社区 问答 正文

Swarm 集群 应用管理 高可用性调度


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

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


Note
部署约束只对新创建容器生效,对老容器变更配置时不起作用。


在下面的示例中,服务至少要部署在两个可用区中。
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:39:57 1516 分享 版权
阿里云 AI 助理回答

在您提供的示例中,展示了如何使用阿里云容器服务来部署一个具有高可用性要求的服务。具体配置如下:

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

这段YAML配置描述了一个名为nnn的服务,它基于nginx:latest镜像运行,并且定义了以下特性:

  1. 端口暴露:服务会暴露443(TCP)和80(TCP)端口,以便外部可以访问。
  2. 环境变量设置:通过environment部分设置了环境变量availability:az==2,这表明该服务的容器应当至少被调度到两个不同的可用区中。这样即使某个可用区发生故障,服务依然能够继续提供访问。
  3. 服务规模:通过标签aliyun.scale: '8'指定了服务实例的数量为8,意味着会有8个容器实例运行以支持此服务,进一步增强了服务的可用性和负载均衡能力。
  4. 重启策略restart: always确保了无论容器因何种原因退出,都会自动重启,保证服务持续运行。
  5. 数据持久化:通过volumes挂载了/var/cache/nginx目录,这通常用于保持Nginx的缓存或其他可写数据,确保服务重启时这些数据不会丢失。

请注意,如注释所述,这样的部署约束仅对新创建的容器生效。如果要对已有的老容器应用这些变化,可能需要重新部署服务或采取其他操作。此外,实际部署时还需确保集群中的确有足够多的不同可用区以及资源来满足部署需求,否则容器创建可能会失败。

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