春色满园关不住,带你体验阿里云 Knative
作者 | 元毅
導讀:Knative 是基于 Kubernetes 的開源 Serverless 應用編排框架。阿里云 Knative 在社區 Knative 基礎之上,與阿里云產品進行了深度的融合,給你帶來最純粹的容器化 Serverless 體驗。
?
關于 Knative
?
Knative 是基于 Kubernetes 的開源 Serverless 應用編排框架。實際上 Knative 包含的不單單是 Workload,它還有 Kubernetes 原生的流程編排引擎和完備的事件系統。Knative 目標是基于 Kubernetes 提供應用 Serverless 工作負載編排的標準化。Knative 核心模塊主要包括事件驅動框架 Eventing 和部署工作負載的 Serving。
?
1. Serverless 服務引擎 - Serving
?
Knative Serving 核心能力就是其簡潔、高效的應用托管服務,這也是其支撐 Serverless 能力的基礎。當然作為 Serverless Framework 就離不開按需分配資源的能力,Knative 可以根據應用的請求量在高峰時期自動擴容實例數,當請求量減少以后自動縮容實例數,可以非常自動化地幫助您節省成本。
?
Serving 還提供了流量管理能力和靈活的灰度發布能力。流量管理能力可以根據百分比切分流量,灰度發布能力可以根據流量百分比進行灰度。
?
1)簡單的應用模型
?
提供了極簡的應用模型 - Knative Service ,同時滿足服務部署、服務訪問以及灰度發布的能力。可以用下面的公式表述:Knative Service = 工作負載(Deployment)+ 服務訪問( Service )+ 灰度流量( Ingress )。
?
應用模型如下圖
- Service:對 Serverless 應用模型的抽象,通過 Service 管理應用的生命周期;
- Configuration:用于配置應用期望的信息。每次更新 Service 就會更新 Configuration;
- Revision:Configuration 的每次更新都會創建一個快照,用來做版本管理;
- Route:將請求路由到 Revision,并可以向不同的 Revision 轉發不同比例的流量。
?
-
應用托管
- Kubernetes 是面向 IaaS 管理的抽象,通過 Kubernetes 直接部署應用需要維護的資源比較多;
- 通過 Knative Service 一個資源就能定義應用的托管。
-
流量管理
- Knative 通過 Gateway 結果應用流量,然后可以對流量按百分比進行分割,這為這為彈性、灰度等基礎能力做好了基礎。
?
- 灰度發布
- 支持多版本管理,應用同時有多個版本在線提供服務很容易實現;
- 不同版本可以設置不同的流量百分比,對灰度發布等功能實現起來很容易。
?
- 彈性
- Knative 幫助應用節省成本的核心能力是彈性,在流量增加的時候自動擴容,容,流量下降的時候自動縮容;
- 每一個灰度的版本都有自己的彈性策略,并且彈性策略和分配到當前版本的流量流量是相關聯的。Knative 會根據分配過來的流量多少進行擴容或者縮容的決策。
2)豐富的彈性策略
?
作為 Serverless 框架,其核心能力就是自動彈性,Knative 中提供了豐富的彈性策略:
- 基于流量請求的自動擴縮容 - KPA
- 基于 CPU、Memory 的自動擴縮容 - HPA
- 支持定時 + HPA 的自動擴縮容策略
- 事件網關,提供請求與 Pod 1 對 1 處理能力
?
2. Serverless 事件驅動框架 - Eventing
?
事件驅動是 Serverless 的標配,在 Knative 中同樣提供了事件驅動框架 - Eventing。
?
Knative 的 Eventing 提供了完整的事件模型,可以很容易地接入各個外部系統的事件。事件接入以后通過 CloudEvent 標準在內部流轉。
?
在 Knative Eventing 提供兩種事件轉發方式:
?
- 事件源直接轉發到服務;
- 事件源轉發到 Broker / Trigger ,然后通過過濾轉發到服務。
對于在使用過程中究竟應該使用哪種方式進行轉發呢?其實很簡單,Broker / Trigger 模型是基于底層消息系統實現的,對于像 Github、Gitlab、K8s APIserver 這樣的事件源來說,需要對消息事件進行緩沖處理、保證消息傳輸可靠性,那么我們建議通過事件源轉發到 Broker / Trigger 進行事件流轉。
?
對于事件源本身就是消息系統來說,像 MNS、Kafka、RocketMQ來說,使用事件源直接轉發到服務更為高效。
?
講到這里,就不得不提 Knative 的事件源。我把它比喻成事件驅動引擎,Knative Eventing 正是通過這些事件源驅動事件流轉。
?
Knative 社區提供了豐富的事件源,如 Kafka、GitHub 等。此外還接入消息云產品事件源,如 MNS、RocketMQ 等。
阿里云 Knative
?
阿里云 Knative 在社區原生的 Knative 之上,與阿里云資源體系進行了全方位的整合,提供了更為豐富的能力以及云產品級別的支持。
?
1. 與阿里云產品融合
?
- 豐富的消息云產品事件源:Kafka 、MNS 、RocketMQ
- 服務訪問:SLB
- 存儲:NAS 、云盤等
- 可觀測性:日志服務、ARMS
- IaaS 資源:ECS 、ECI
2. 天然集成阿里云 K8s 生態
?
- 支持阿里云標準版 Kubernetes,專有版 Kubernetes;
- 支持阿里云 Serverless Kubernetes(ASK), 并且在 ASK 中將 Knative 管控組件全托管,為用戶節省了資源以及運維成本。
一個例子
?
接下來以一個發送彈幕的示例來介紹一下如何玩轉阿里云 Knative。先看一下效果:
?
架構示意圖:
?
流程說明:
- 用戶通過彈幕 Web 服務發送彈幕到阿里云 Kafka;
- Kafka Source 事件源監聽到彈幕消息,然后發送到彈幕消息處理服務;
- 彈幕消息處理服務接收到消息,然后自動彈性擴容實例進行消息處理,并將處理完成的消息發送給彈幕服務;
- 最后彈幕通過 Web 服務界面展示給用戶;
總結
?
最后我們總結一下阿里云 Knative 能給我們帶來哪些能力:
?
- 服務部署低門檻、易上手
- Serverless 按需使用資源
- 事件驅動與消息云產品無縫對接
- 天然集成阿里云 K8s 生態
- 與阿里云產品打通
希望這些能力能給你帶來真正的按需使用,降低運維、資源使用成本的訴求,這也是 Serverless 思想理念所追求的目標。
總結
以上是生活随笔為你收集整理的春色满园关不住,带你体验阿里云 Knative的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云边缘容器服务、申通 IoT 云边端
- 下一篇: Seata 新特性,APM 支持 Sky