ASM Serverless網關是基於虛擬節點和ECI提供的一種Serverless網關形態,用於支撐各種彈性和免節點營運的情境。本文介紹如何使用ASM Serverless網關支撐彈性業務情境。
前提條件
已添加ACK叢集(包括ACK基礎版、ACK Pro版和ACK專有版)到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。
說明ACK Serverless叢集在ASM控制台建立ASM網關時即為ECI Pod,無需執行本文操作。關於建立網關的操作,請參見建立入口網關服務。
已部署ack-virtual-node組件。具體操作,請參見通過部署ACK虛擬節點群組件建立ECI Pod。
相關概念
概念 | 說明 |
Elastic Container Instance(Elastic Container Instance) | 阿里雲Elastic Container Instance是面向容器的無伺服器彈性計算服務,提供免營運、強隔離、快速啟動的容器運行環境。使用ECI無需購買和管理底層ECS伺服器,讓您更加關注在容器應用而非底層基礎設施的維護工作。您可按需建立ECI,僅為容器配置的資源付費(按量按秒計費)。更多資訊,請參見什麼是Elastic Container Instance和計費概述。 |
虛擬節點(Virtual Node) | 適合運行在有明顯的波峰波穀計算特徵的情境,協助您極大地降低計算成本,提升計算彈性效率。 |
汙點(Taint) | 作用於節點上,使節點可以排斥一類特定的Pod。 ACK叢集中的Virtual Node預設都會打上汙點 |
容忍度(Toleration) | 作用於Pod上,允許調度器將該Pod調度到帶有對應汙點的節點上。 若您需要在ACK叢集中使Pod可以使用ECI彈性資源,請配置以下
說明 汙點和容忍度相互配合,可用於避免Pod被分配到不合適的節點上。每個節點都可以應用一個或多個汙點。
更多資訊,請參見taint-and-toleration。 |
節點親和性(nodeAffinity) | 規定Pod調度時的軟需求或者偏好,且在這種偏好不被滿足時成功調度該Pod到其他節點。 |
步驟一:添加標籤至節點
執行以下命令,擷取叢集的節點名稱。
kubectl get nodes
執行以下命令,將標籤添加到目標節點。
# 命令格式。 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能夠被分配到指定的節點上。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在入口網關頁面右側,單擊目標網關對應的查看YAML。
在編輯對話方塊的
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個
matchExpressions
。weight
的值為相對值,優先使用較大值。weight
為20
的配置表示調度Pod使用ECI資源;weight
為80
的配置表示調度Pod到指定Label的ECS節點上。requiredDuringSchedulingIgnoredDuringExecution
調度器只有在規則被滿足的時候才能執行調度。該參數關聯2個
matchExpressions
,分別表示調度Pod到指定Label的ECS節點上、調度Pod使用ECI資源。tolerations
表示容忍汙點
virtual-kubelet.io/provider=alibabacloud:NoSchedule
,使Pod可以使用ECI資源。查看網關的Pod所在的節點是否符合預期。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在容器組頁面上方,選擇istio-system命名空間,查看網關Pod所在的節點是否符合預期。
若網關Pod所在的節點為目標節點,表明為ASM網關設定節點親和性和容忍度成功。