全部產品
Search
文件中心

Alibaba Cloud Service Mesh:使用ASM Serverless網關支撐彈性業務情境

更新時間:Jun 30, 2024

ASM Serverless網關是基於虛擬節點和ECI提供的一種Serverless網關形態,用於支撐各種彈性和免節點營運的情境。本文介紹如何使用ASM Serverless網關支撐彈性業務情境。

前提條件

相關概念

概念

說明

Elastic Container Instance(Elastic Container Instance)

阿里雲Elastic Container Instance是面向容器的無伺服器彈性計算服務,提供免營運、強隔離、快速啟動的容器運行環境。使用ECI無需購買和管理底層ECS伺服器,讓您更加關注在容器應用而非底層基礎設施的維護工作。您可按需建立ECI,僅為容器配置的資源付費(按量按秒計費)。更多資訊,請參見什麼是Elastic Container Instance計費概述

虛擬節點(Virtual Node)

適合運行在有明顯的波峰波穀計算特徵的情境,協助您極大地降低計算成本,提升計算彈性效率。

汙點(Taint)

作用於節點上,使節點可以排斥一類特定的Pod。

ACK叢集中的Virtual Node預設都會打上汙點virtual-kubelet.io/provider=alibabacloud:NoSchedule,以避免您在不知情的情況下使用ECI彈性資源。

容忍度(Toleration)

作用於Pod上,允許調度器將該Pod調度到帶有對應汙點的節點上。

若您需要在ACK叢集中使Pod可以使用ECI彈性資源,請配置以下tolerations來容忍汙點virtual-kubelet.io/provider=alibabacloud:NoSchedule。更多資訊,請參見通過部署ACK虛擬節點群組件建立ECI Pod

      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
說明

汙點和容忍度相互配合,可用於避免Pod被分配到不合適的節點上。每個節點都可以應用一個或多個汙點。

  • 若Pod不能容忍指定的汙點,將不會被節點接受,即Pod不能調度到具有匹配汙點的節點上。

  • 若Pod可以容忍指定的汙點,表示Pod可以(但不要求)被調度到具有匹配汙點的節點上。

更多資訊,請參見taint-and-toleration

節點親和性(nodeAffinity)

規定Pod調度時的軟需求或者偏好,且在這種偏好不被滿足時成功調度該Pod到其他節點。

步驟一:添加標籤至節點

  1. 執行以下命令,擷取叢集的節點名稱。

    kubectl get nodes
  2. 執行以下命令,將標籤添加到目標節點。

    # 命令格式。
    kubectl label nodes <node-name> <label-key>=<label-value>
    
    # 命令樣本。
    kubectl label nodes node1 mykey4pod=asmgateway

步驟二:添加汙點至節點

執行以下命令,為節點增加一個汙點。

kubectl taint nodes node1 mykey=myvalue:NoSchedule

該命令表示為節點node1增加一個汙點。其中,Key是mykey,Value是myvalue,Effect是NoSchedule,表示只有擁有和這個汙點相匹配的容忍度的Pod才能夠被分配到node1節點。

步驟三:為ASM網關設定節點親和性和容忍度

在ASM網關中配置nodeAffinity參數,使ASM網關的Pod分布到指定的節點上;配置tolerations參數與步驟二建立的汙點相匹配,使網關的Pod能夠被分配到指定的節點上。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

  3. 入口網關頁面右側,單擊目標網關對應的查看YAML

  4. 編輯對話方塊的spec欄位下,增加如下內容,然後單擊確定

       affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - preference:
                matchExpressions:
                  - key: type
                    operator: In
                    values:
                      - virtual-kubelet
              weight: 20
            - preference:
                matchExpressions:
                  - key: mykey4pod
                    operator: In
                    values:
                      - asmgateway
              weight: 80
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: mykey4pod
                    operator: In
                    values:
                      - asmgateway
              - matchExpressions:
                  - key: type
                    operator: In
                    values:
                      - virtual-kubelet
      tolerations:
        - effect: NoSchedule
          key: virtual-kubelet.io/provider
          operator: Equal
          value: alibabacloud
        - effect: NoSchedule
          key: mykey
          operator: Equal
          value: myvalue

    關鍵參數說明如下。關於參數的更多資訊,請參見Assigning Pods to Nodes

    參數

    說明

    preferredDuringSchedulingIgnoredDuringExecution

    調度器會嘗試尋找滿足對應規則的節點。若找不到匹配的節點,調度器仍然會調度該Pod。該參數關聯2個matchExpressionsweight的值為相對值,優先使用較大值。weight20的配置表示調度Pod使用ECI資源;weight80的配置表示調度Pod到指定Label的ECS節點上。

    requiredDuringSchedulingIgnoredDuringExecution

    調度器只有在規則被滿足的時候才能執行調度。該參數關聯2個matchExpressions,分別表示調度Pod到指定Label的ECS節點上、調度Pod使用ECI資源。

    tolerations

    表示容忍汙點virtual-kubelet.io/provider=alibabacloud:NoSchedule,使Pod可以使用ECI資源。

  5. 查看網關的Pod所在的節點是否符合預期。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 容器組

    3. 容器組頁面上方,選擇istio-system命名空間,查看網關Pod所在的節點是否符合預期。

      若網關Pod所在的節點為目標節點,表明為ASM網關設定節點親和性和容忍度成功。