赞
踩
作者:元毅、向先
Knative 是一款云原生、跨平台的开源 Serverless 应用编排框架,而抢占式实例是公有云中性价比较高的资源。Knative 与抢占式实例的结合可以进一步降低用户资源使用成本。本文介绍如何在 Knative 中使用抢占式实例。
抢占式实例是一种低成本竞价型实例,您可以对阿里云当前闲置的资源出价,获得资源后运行容器,直到出价低于市场价格或者库存不足等原因导致资源回收。
Knative 是一款基于 Kubernetes 的开源 Serverless 应用编排框架,其目标是制定云原生、跨平台的 Serverless 应用编排标准。Knative 主要功能包括基于请求的自动弹性、缩容到 0、多版本管理、基于流量的灰度发布、函数部署以及事件驱动等。
Knative 中提供了 Serverless 工作负载:Knative Service,可以基于请求自动扩缩容 Pod,使用抢占式实例的话只需要配置相应的 Pod 注解即可。而在 Virtual Node 根据 Pod 的注解自动申请对应的 ECI 资源规格。当前 Virtual Node 提供了抢占式实例自动替换能力,可以更加自动化的使用抢占式实例。
Knative 结合抢占式实例的优势:
由于 ECI 抢占式实例在市场价格高于出价或实例规格库存不足时会被回收。因此,使用 ECI 抢占式实例在带来经济性的同时,也带来了应用稳定性的挑战。为尽量避免 ECI 抢占式实例回收导致的业务中断,容器服务 Virtual Node 在 ECI 抢占式实例回收前,通过发出的 SpotToBeReleased Event 和 Pod Condition 来通知用户。可以基于这些通知,进行抢占实例的优雅退出和 Pod 轮转等处理。
可以通过设置 k8s.aliyun.com/eci-spot-strategy 注解,如 SpotAsPriceGo 策略表示系统自动出价,跟随当前市场实际价格。创建后,可以稳定使用 1 小时,超出 1 小时保护期后,如果某一时刻的市场价格高于出价或实例规格库存不足,抢占式实例会被释放。在到达保护期之前,Virtual Node 会发出到期通知,然后会自动驱逐删除 Pod,然后 Knative 会自动创建新的抢占式实例 Pod,如果抢占成功,则继续通过抢占式实例提供服务。
如果想尽量保证服务的稳定性,避免申请抢占实例失败导致的服务受损。可以通过配置 k8s.aliyun.com/eci-spot-fallback: true,自动转为按量付费,以保证实例创建成功。
抢占式实例会在中断前 3 分钟发出 SpotToBeReleased Event,同时会更新 Pod Conditions 的 ContainerInstanceExpired 字段为 true。
Pod 的 Conditions 字段和 Events 字段显示如下。
为尽量避免 ECI 抢占式实例回收导致的业务中断,虚拟节点提供了可配置的 ECI 抢占式实例优雅下线的功能。您可以为抢占型 Pod 配置 annotations k8s.aliyun.com/eci-spot-release-strategy: api-evict。
那么当虚拟节点接收到 SpotToBeReleased Event 时,则会调用 Eviction API 来驱逐该抢占式实例。API 发起的驱逐将遵从您的 PodDisruptionBudgets 和 terminationGracePeriodSeconds 配置。使用 API 创建 Eviction 对象,类似于对 Pod 执行策略控制的 DELETE 操作。
抢占式实例创建成功后,在保护期内可以正常运行。超出保护期后,如果市场价格高于出价或者资源库存不足,抢占式实例会被释放。可以通过以下信息了解抢占式实例的释放情况。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning SpotToBeReleased 3m32s kubelet, eci Spot ECI will be released in 3 minutes
LAST SEEN TYPE REASON OBJECT MESSAGE
3m39s Warning SpotToBeReleased pod/pi-frmr8 Spot ECI will be released in 3 minutes
NAME READY STATUS RESTARTS AGE
pi-frmr8 1/1 BidFailed 0 3h5m
Status: Failed
Reason: BidFailed
Message: The pod is spot instance, and have been released at 2020-04-08T12:36Z
在 Knative Service 中添加 Annotation 来创建抢占式实例。相关 Annotation 如下:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。