为了使应用有更高的可用性,容器服务支持将同一个服务的容器调度在不同的可用区(zone)里。当某个可用区故障时,应用依然能够提供服务。
您可以在编排文件中通过环境变量指定对可用区的选择,有以下两种格式。
nnn:
expose:
- 443/tcp
- 80/tcp
image: 'nginx:latest'
environment:
- 'availability:az==2'
labels:
aliyun.scale: '8'
restart: always
volumes:
- /var/cache/nginx
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云容器服务中,为了确保应用的高可用性,通过编排文件(如 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 的缓存数据。
综上所述,这样的配置有助于构建一个既灵活又能抵抗单点故障的高可用服务环境。