当您在应对突发流量,进行业务的快速水平扩容时,或者启动大量ECI Pod进行Job任务处理时,可能会遇到可用区对应规格实例库存不足或者指定的交换机IP耗尽等特殊情况,从而导致Pod创建失败,影响业务。此时,您可以采用指定多可用区的方式来创建ECI Pod(即ECI实例),以提高实例创建的成功率。
前提条件
已在要使用的专有网络VPC下创建多个不同可用区的交换机。
背景信息
创建ECI实例时,可以通过指定多个交换机来指定了多个可用区,系统会随机把请求分散到所有指定的可用区中,来分散压力,如果在某一个可用区遇到没有库存的情况,会自动切换到下一个可用区继续尝试创建。
指定多可用区(交换机)时,需注意以下限制:
- 指定的交换机必须属于同一个VPC。 
- 最多可以指定10个交换机。 
您可以配合使用多可用区和多规格的方式来创建实例,提高实例的创建成功率。
配置说明
配置多可用区时,您可以根据需要选择为集群或者为特定ECI Pod进行配置:
- 集群:为集群指定多个交换机,对集群内的所有ECI Pod生效。 
- ECI Pod:在创建ECI Pod时指定多个交换机,仅对该ECI Pod生效。 
新建集群配置
创建集群前,建议您在要使用的专有网络VPC下创建多个不同可用区的交换机。创建集群时,您可以配置多个交换机来实现多可用区功能。下图以在容器服务管理控制台创建ACK Serverless集群为例。

已有集群配置
根据VK(ack-virtual-node组件)的版本,您可以通过以下方式来配置多可用区。
- VK版本为v2.0.0.90-15deb126e-aliyun及以上,请修改eci-profile。 
- VK版本低于v2.0.0.90-15deb126e-aliyun,请修改环境变量。 
修改eci-profile
您可以编辑名为eci-profile的ConfigMap,追加vswitch ID到data.vSwitchIds字段来实现多可用区。方式如下:
- 编辑eci-profile。 - kubectl edit cm -n kube-system eci-profile
- 修改 - vSwitchIds字段值。- 追加vSwitch ID,多个vSwitch ID之间采用半角逗号(,)分隔。 - data: enableClusterIp: "true" enableHybridMode: "false" enablePrivateZone: "false" resourceGroupId: "" securityGroupId: sg-2ze0b9o8pjjzts4h**** selectors: "" vSwitchIds: vsw-2zeet2ksvw7f14ryz****,vsw-2ze94pjtfuj9vaymf**** vpcId: vpc-2zeghwzptn5zii0w7****
- 修改完成后,保存退出。 
修改环境变量
建议您升级VK到最新版本,以便使用新功能。
根据您部署VK的方式,您可以更新Deployment或者StatefulSet的环境变量ECI_VSWITCH的值,来实现多可用区。以Deployment为例,方式如下:
- 编辑Deployment。 - kubectl -n kube-system edit deployment/virtual-node-controller
- 修改环境变量 - ECI_VSWITCH。- 追加vSwitch ID到环境变量 - ECI_VSWITCH的value中。多个vSwitch ID之间采用半角逗号(,)分隔。- - name: ECI_VSWITCH value: vsw-bp1xpiowfm5vo8o3c****,vsw-bp1rkyjgr1xwoho6k****
- 修改完成后,保存退出。 
ECI Pod配置
您可以在Pod metadata中添加Annotation来指定多可用区,相关配置项如下:
- k8s.aliyun.com/eci-vswitch:指定多个交换机实现多可用区。 说明- 如果ECI Pod添加了 - k8s.aliyun.com/eci-vswitch的Annotation,则该Pod挂载云盘动态存储卷时,不支持使用- WaitForFirstConsumer类型的StorageClass。
- k8s.aliyun.com/eci-schedule-strategy:配置多可用区调度策略。可配置为 - VSwitchOrdered或者- VSwitchRandom。两种策略的说明如下表所示。说明- 如果没有配置多可用区调度策略,默认采用VSwitchRandom策略。 - 调度策略 - 调度说明 - VSwitchOrdered(按指定顺序调度) - 如果ECI Pod挂载了云盘,云盘所属可用区必须和Pod一致,不符合的可用区会被过滤。 
- 按照指定的顺序尝试创建资源,当第一个可用区没有库存时,尝试使用第二个,以此类推,直至资源创建成功。 
 - VSwitchRandom( 库存最优策略调度) - 如果ECI Pod挂载了云盘,云盘所属可用区必须和Pod一致,不符合的可用区会被过滤。 
- 由阿里云根据库存最优的调度策略选择合适的交换机(对应可用区)。 
- 如果ECI Pod指定了规格,优先调度到有该规格对应预留实例券的可用区。 
- 优先调度到存储性能较好的可用区。以下老的可用区调度优先级靠后。 - cn-beijing-e、cn-beijing-d 
- cn-shenzhen-a、cn-shenzhen-b、cn-shenzhen-c 
- cn-hangzhou-b、cn-hangzhou-e、cn-hangzhou-f 
- cn-shanghai-a、cn-shanghai-c 
 
 
- Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。 
- 仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。 
配置示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-vswitch: "vsw-bp1xpiowfm5vo8o3c****,vsw-bp1rkyjgr1xwoho6k****"    # 指定多个交换机ID
        k8s.aliyun.com/eci-schedule-strategy: "VSwitchOrdered"   # 配置多可用区调度策略
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80后续步骤
如果您采用NAT网关来连接公网,配置多可用区(即多个交换机)后,您需要检查SNAT条目配置是否仍满足需求。
例如:如果原有SNAT条目粒度为交换机粒度,则配置多个交换机后,您需要增加新增交换机对应的条目,保证新交换机下的ECI实例可以访问公网。
