全部產品
Search
文件中心

Container Service for Kubernetes:建立多可用性區域的ECI Pod

更新時間:Jun 26, 2024

當您在應對突發流量,進行業務的快速水平擴容時,或者啟動大量執行個體進行Job任務處理時,可能會遇到可用性區域對應規格執行個體庫存不足或者指定的交換器IP耗盡等特殊情況,從而導致Pod建立失敗。此時,您可以採用指定多可用性區域的方式來建立ECI Pod(即ECI執行個體),以提高執行個體建立的成功率。

背景資訊

建立ECI執行個體時,可以通過指定多個交換器來選擇多個可用性區域,系統會隨機把請求分散到所有指定的可用性區域中,來分散壓力,如果在某個可用性區域遇到沒有庫存的情況,系統會自動切換到下一個可用性區域繼續嘗試建立。

指定多可用性區域(交換器)時,需注意以下限制:

  • 指定的交換器必須屬於同一個VPC。

  • 最多可以指定10個交換器。

您可以配合使用多可用性區域和多規格的方式來建立執行個體,以提高執行個體的建立成功率。

前提條件

已在要使用的Virtual Private Cloud下建立多個不同可用性區域的交換器。

配置說明

配置多可用性區域時,您可以根據需要選擇為叢集或者為特定ECI Pod進行配置:

  • 叢集:在建立叢集時、或者配置eci-profile為叢集指定多個交換器時,對叢集內的所有ECI Pod生效。

  • ECI Pod:在建立ECI Pod時,通過指定的annotation指定多個交換器,僅對該ECI Pod生效。且通過annotation指定的交換器優先順序高於eci-profile,即ECI Pod會優先調度到annotation指定的相關可用性區域。

建立叢集配置

建立叢集前,建議您在要使用的Virtual Private Cloud下建立多個不同可用性區域的交換器。建立叢集時,您可以配置多個交換器來實現多可用性區域功能。下圖以在Container Service管理主控台建立ACK Serverless叢集為例。

多可用性區域

已有叢集配置

您可以編輯名為eci-profile的ConfigMap,追加vswitch ID到data.vSwitchIds欄位來實現多可用性區域。方式如下:

  1. 編輯eci-profile。

    kubectl edit cm -n kube-system eci-profile
  2. 修改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****
  3. 修改完成後,儲存退出。

ECI Pod配置

您可以在Pod metadata中添加Annotation來指定多可用性區域,相關配置項如下:

  • k8s.aliyun.com/eci-vswitch:指定多個交換器實現多可用性區域。

  • k8s.aliyun.com/eci-schedule-strategy:配置多可用性區域調度策略。可配置為VSwitchOrdered或者VSwitchRandom。兩種策略的說明如下表所示。

    說明

    如果沒有配置多可用性區域調度策略,預設採用VSwitchRandom(隨機)策略。

    策略

    調度說明

    VSwitchOrdered(按指定順序)

    1. 如果ECI Pod掛載了雲端硬碟,雲端硬碟所屬可用性區域必須和Pod一致,不符合的可用性區域會被過濾。

    2. 按照指定的順序嘗試建立資源,當第一個可用性區域沒有庫存時,嘗試使用第二個,以此類推,直至資源建立成功。

    VSwitchRandom(隨機)

    1. 如果ECI Pod掛載了雲端硬碟,雲端硬碟所屬可用性區域必須和Pod一致,不符合的可用性區域會被過濾。

    2. 隨機打散指定的交換器(對應可用性區域)。

    3. 如果ECI Pod指定了規格,優先調度到有該規格對應預留執行個體券的可用性區域。

    4. 優先調度到儲存效能較好的可用性區域。以下老的可用性區域調度優先順序靠後:

      • 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執行個體可以訪問公網。

SNAT

相關文檔

ACK Serverless叢集的多可用性區域特性,不僅可以提高ECI執行個體的建立成功率,也可以高效地進行容器執行個體的調度管理。具體操作,請參見實現ECI Pod可用性區域打散以及親和調度