在了解了 Kubernetes 的基礎架構後,這次我們來探討一個建立在其之上的強大 Serverless 框架:Knative。它將開發者從繁瑣的基礎設施管理中解放出來,專注於程式碼本身。
Knative 是一個開源的 Kubernetes 附加元件 (Add-on),用於建構、部署和管理現代化的 Serverless 工作負載。它並非要取代 Kubernetes,而是擴展 Kubernetes,提供了一組更高階的抽象化原語 (Primitives),旨在標準化和簡化 Serverless 應用程式的開發與部署流程。
其核心價值主張是:讓開發者只關心業務邏輯,而將服務的自動擴展 (Auto-scaling)、網路路由和事件觸發等複雜性交給平台處理。
Knative 主要由兩個獨立且可插拔的核心組件構成:
Knative Serving 的目標是部署和服務 Serverless 應用程式和函式。它最引人注目的特性是請求驅動 (Request-Driven) 的計算模型,能夠根據流量需求自動擴展 Pod 數量,甚至在沒有流量時縮容至零 (Scale to Zero),從而極大地節省了運算資源成本。
主要特性:
核心資源 (CRDs):
ksvc): 這是開發者主要操作的頂層資源,它自動管理一個應用的 Route 和 Configuration,簡化了部署流程。Revision,並定義流量分配策略。Configuration 的變更都會觸發一個新的 Revision。Configuration 的一個不可變的時間點快照。每個 Revision 都代表了一份特定的程式碼和配置組合。Knative Eventing 提供了一套標準化的基礎設施,用於建構事件驅動架構。它旨在實現服務間的鬆耦合 (Loosely Coupled),讓事件的生產者 (Producers) 和消費者 (Consumers) 彼此獨立,無需直接感知對方的存在。
工作流程: 它採用了發布/訂閱 (Publish/Subscribe) 模型,事件從來源 (Source) 進入系統,被發送到一個稱為代理 (Broker) 的事件中心,然後觸發器 (Trigger) 根據過濾規則將事件分發給一個或多個目標消費者 (Sink)。
核心資源 (CRDs):
ApiServerSource 可以監聽 Kubernetes API 事件,KafkaSource 可以從 Kafka 主題中拉取訊息。Broker 與事件消費者連接起來,並可以定義過濾規則 (Filter),只有符合條件的事件才會被傳遞給目標。理解它們的關係至關重要:Knative 將 Kubernetes 的能力進行了封裝和簡化。
當您創建一個 Knative Service 時,Knative 的控制器 (Controller) 會在背景將這個高階定義轉換成一系列底層的 Kubernetes 資源,例如:
Deployment: 用於管理 Pod。Service (K8s Service): 用於叢集內部網路。Ingress: 用於外部流量接入。HorizontalPodAutoscaler (HPA): 用於標準的 CPU/記憶體擴展。Knative Pod Autoscaler (KPA): 用於基於請求的擴展。開發者只需維護一份簡單的 Knative YAML 文件,Knative 就會自動處理這些複雜的底層資源配置和生命週期管理。
Build 組件已被獨立出來,發展成為一個更通用的 CI/CD 專案 Tekton。Tekton 專注於在 Kubernetes 上構建、測試和部署應用,與 Knative 能夠完美整合。總之,Knative 結合了 Serverless 的簡易性、事件驅動的靈活性以及 Kubernetes 的強大功能和可控性,是雲端原生時代下構建現代化應用的理想平台。