天天看點

春色滿園關不住,帶你體驗阿裡雲 Knative關于 Knative阿裡雲 Knative一個例子總結

春色滿園關不住,帶你體驗阿裡雲 Knative關于 Knative阿裡雲 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 )。

應用模型如下圖

春色滿園關不住,帶你體驗阿裡雲 Knative關于 Knative阿裡雲 Knative一個例子總結
  • 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 ,然後通過過濾轉發到服務。
春色滿園關不住,帶你體驗阿裡雲 Knative關于 Knative阿裡雲 Knative一個例子總結

對于在使用過程中究竟應該使用哪種方式進行轉發呢?其實很簡單,Broker / Trigger 模型是基于底層消息系統實作的,對于像 Github、Gitlab、K8s APIserver 這樣的事件源來說,需要對消息事件進行緩沖處理、保證消息傳輸可靠性,那麼我們建議通過事件源轉發到 Broker / Trigger 進行事件流轉。

對于事件源本身就是消息系統來說,像 MNS、Kafka、RocketMQ來說,使用事件源直接轉發到服務更為高效。

講到這裡,就不得不提 Knative 的事件源。我把它比喻成事件驅動引擎,Knative Eventing 正是通過這些事件源驅動事件流轉。

Knative 社群提供了豐富的事件源,如 Kafka、GitHub 等。此外還接入消息雲産品事件源,如 MNS、RocketMQ 等。

阿裡雲 Knative

阿裡雲 Knative 在社群原生的 Knative 之上,與阿裡雲資源體系進行了全方位的整合,提供了更為豐富的能力以及雲産品級别的支援。

春色滿園關不住,帶你體驗阿裡雲 Knative關于 Knative阿裡雲 Knative一個例子總結

1. 與阿裡雲産品融合

  • 豐富的消息雲産品事件源:Kafka 、MNS 、RocketMQ
  • 服務通路:SLB
  • 存儲:NAS 、雲盤等
  • 可觀測性:日志服務、ARMS
  • IaaS 資源:ECS 、ECI

2. 天然內建阿裡雲 K8s 生态

  • 支援阿裡雲标準版 Kubernetes,專有版 Kubernetes;
  • 支援阿裡雲 Serverless Kubernetes(ASK), 并且在 ASK 中将 Knative 管控元件全托管,為使用者節省了資源以及運維成本。

一個例子

接下來以一個發送彈幕的示例來介紹一下如何玩轉阿裡雲 Knative。先看一下效果:

春色滿園關不住,帶你體驗阿裡雲 Knative關于 Knative阿裡雲 Knative一個例子總結

架構示意圖:

春色滿園關不住,帶你體驗阿裡雲 Knative關于 Knative阿裡雲 Knative一個例子總結

流程說明:

  • 使用者通過彈幕 Web 服務發送彈幕到阿裡雲 Kafka;
  • Kafka Source 事件源監聽到彈幕消息,然後發送到彈幕消息處理服務;
  • 彈幕消息處理服務接收到消息,然後自動彈性擴容執行個體進行消息處理,并将處理完成的消息發送給彈幕服務;
  • 最後彈幕通過 Web 服務界面展示給使用者;

總結

最後我們總結一下阿裡雲 Knative 能給我們帶來哪些能力:

  • 服務部署低門檻、易上手
  • Serverless 按需使用資源
  • 事件驅動與消息雲産品無縫對接
  • 天然內建阿裡雲 K8s 生态
  • 與阿裡雲産品打通

希望這些能力能給你帶來真正的按需使用,降低運維、資源使用成本的訴求,這也是 Serverless 思想理念所追求的目标。