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。
相關概念
概念 | 說明 |
彈性容器實例ECI(Elastic Container Instance) | 阿里云彈性容器實例ECI是面向容器的無服務器彈性計算服務,提供免運維、強隔離、快速啟動的容器運行環境。使用ECI無需購買和管理底層ECS服務器,讓您更加關注在容器應用而非底層基礎設施的維護工作。您可按需創建ECI,僅為容器配置的資源付費(按量按秒計費)。更多信息,請參見什么是彈性容器實例和計費概述。 |
虛擬節點(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所在的節點是否符合預期。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在容器組頁面上方,選擇istio-system命名空間,查看網關Pod所在的節點是否符合預期。
若網關Pod所在的節點為目標節點,表明為ASM網關設置節點親和性和容忍度成功。