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网关设置节点亲和性和容忍度成功。