當您在應對突發流量,進行業務的快速水平擴容時,或者啟動大量ECI Pod進行Job任務處理時,可能會遇到可用性區域對應規格執行個體庫存不足或者指定的交換器IP耗盡等特殊情況,從而導致Pod建立失敗,影響業務。此時,您可以採用指定多可用性區域的方式來建立ECI Pod(即ECI執行個體),以提高執行個體建立的成功率。
前提條件
已在要使用的Virtual Private Cloud下建立多個不同可用性區域的交換器。
背景資訊
建立ECI執行個體時,可以通過指定多個交換器來指定了多個可用性區域,系統會隨機把請求分散到所有指定的可用性區域中,來分散壓力,如果在某一個可用性區域遇到沒有庫存的情況,會自動切換到下一個可用性區域繼續嘗試建立。
指定多可用性區域(交換器)時,需注意以下限制:
指定的交換器必須屬於同一個VPC。
最多可以指定10個交換器。
您可以配合使用多可用性區域和多規格的方式來建立執行個體,提高執行個體的建立成功率。
配置說明
配置多可用性區域時,您可以根據需要選擇為叢集或者為特定ECI Pod進行配置:
叢集:為叢集指定多個交換器,對叢集內的所有ECI Pod生效。
ECI Pod:在建立ECI Pod時指定多個交換器,僅對該ECI Pod生效。
建立叢集配置
建立叢集前,建議您在要使用的Virtual Private Cloud下建立多個不同可用性區域的交換器。建立叢集時,您可以配置多個交換器來實現多可用性區域功能。下圖以在Container Service管理主控台建立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 Gateway來串連公網,配置多可用性區域(即多個交換器)後,您需要檢查SNAT條目配置是否仍滿足需求。
例如:如果原有SNAT條目粒度為交換器粒度,則配置多個交換器後,您需要增加新增交換器對應的條目,保證新交換器下的ECI執行個體可以訪問公網。