當您在應對突發流量,進行業務的快速水平擴容時,或者啟動大量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:指定多個交換機實現多可用區。
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實例可以訪問公網。