ASM Serverless网关就是基于虚拟节点和ECI提供的一种Serverless 网关形态,充分支撑各种弹性和免节点运维场景的用户诉求。
相关概念
- 阿里云弹性容器实例ECI是面向容器的无服务器弹性计算服务,提供免运维、强隔离、快速启动的容器运行环境。使用ECI无需购买和管理底层ECS服务器,让您更加关注在容器应用而非底层基础设施的维护工作。您可按需创建ECI,仅为容器配置的资源付费(按量按秒计费)。
- 虚拟节点Virtual Node非常适合运行在有着明显的波峰波谷计算特征的场景,帮助用户极大降低计算成本,提升计算弹性效率。
- 污点(Taint):作用于节点上, 它能使节点能够排斥一类特定的Pod。ACK集群中的Virtual Node默认都会打上污点virtual-kubelet.io/provider=alibabacloud:NoSchedule,以避免您在不知情的情况下使用ECI弹性资源。
- 容忍度(Toleration):容忍度应用于Pod上。容忍度允许调度器将该Pod调度到带有对应污点的节点上。在ACK集群中,需要配置以下Toleration来容忍污点virtual-kubelet.io/provider=alibabacloud:NoSchedule,才能让Pod使用ECI资源。
tolerations: - key: virtual-kubelet.io/provider operator: Equal value: alibabacloud effect: NoSchedule
- 污点和容忍度相互配合,可以用来避免Pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的Pod,是不会被该节点接受的。如果将容忍度应用于Pod 上,则表示这些Pod 可以(但不要求)被调度到具有匹配污点的节点上。
- 节点亲和性(nodeAffinity):规定了Pod调度时的软需求或者偏好,且在这种偏好不被满足时成功调度该Pod到其他节点。
前提
- 如果已经是ASK集群, 无需执行以下步骤, 在ASM控制台创建ASM网关时即为ECI Pod。
- 以下步骤适应于ACK集群(包括ACK标准版、ACK Pro版以及ACK专有版), 同时需要部署ack-virtual-node组件。具体操作,请参见部署ack-virtual-node组件。
操作步骤
步骤一:添加标签到节点
执行 kubectl get nodes 命令获取集群的节点名称。选择一个你要增加标签的节点,然后执行 kubectl label nodes = 命令将标签添加到你所选择的节点上。
比如,
kubectl label nodes node1 mykey4pod=asmgateway
步骤二:添加污点到节点
使用命令 kubectl taint 给节点增加一个 污点。比如,
kubectl taint nodes node1 mykey=myvalue:NoSchedule
给节点 node1 增加一个污点,它的 key 是 mykey,value 是 myvalue,effect 是 NoSchedule。这表示只有拥有和这个污点相匹配的容忍度 的Pod 才能够被分配到 node1 这个节点。
步骤三:为ASM网关设置节点亲和性和容忍度
1) 首先, 在ASM网关中配置nodeAffinity参数, 使ASM网关的Pod分布到指定的节点上。配置tolerations参数与上面例子中使用 kubectl taint 命令创建的污点相匹配。这样可以使得网关的Pod 能够被分配到指定的节点上。
具体操作如下:
- 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关。
- 在入口网关页面,在对应网关的右侧菜单栏内, 单击查看YAML。
- 在弹出的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
说明:
- 配置的preferredDuringSchedulingIgnoredDuringExecution关联2个matchExpressions, 其中weight为20的指调度Pod使用ECI资源, weight为80的指调度Pod到指定Label的ECS节点上。此外, weight值20和80是相对值, 优先使用较大值的情况。
- 配置的requiredDuringSchedulingIgnoredDuringExecution关联2个matchExpressions, 与上述类似, 分别指调度Pod到指定Label的ECS节点上以及调度Pod使用ECI资源。
- 配置的Toleration来容忍污点virtual-kubelet.io/provider=alibabacloud:NoSchedule,才能让Pod使用ECI资源。