Serverless Kubernetes 落地实践
?作者:元毅
導讀
Kubernetes 作為當今云原生業界標準,具備良好的生態以及跨云廠商能力。Kubernetes 很好的抽象了 IaaS 資源交付標準,使得云資源交付變的越來越簡單,與此同時用戶期望更多的聚焦于業務自身,做到面向應用交付,Serverless 理念也因此而生。那么如何通過原生 Kubernetes 提供 Serverless 能力?如何借力豐富的云原生社區生態?這里給大家介紹一下我們在 Serverless Kubernetes 上的落地實踐。本文將從以下 3 個方面展開介紹:
- 為什么要做Serverless Kubernetes
- 如何實現Serverless Kubernetes
- Serverless Kubernetes 落地實踐
為什么要做 Serverless Kubernetes
Kubernetes
眾所周知,Kubernetes 是一款開源容器化編排系統,用戶使用 Kubernetes 可以做到降低運維成本、提高運維效率,并且提供標準化 API,某種意義就是避免被云廠商綁定,進而形成了以 Kubernetes 為核心的云原生生態??梢哉f Kubernetes 已然成為了云原生業界事實標準。
Serverless 與 Kubernetes
那么我們回到 Serverless 上面來,Serverless 的核心理念在于讓開發者更聚焦業務邏輯,減少對基礎設施的關注。那么我們如何在云原生業界標準之上做 Serverless,Kubernetes 是否也能做到更專注于應用業務邏輯。
Kubernetes 做 Serverless 有哪些優勢
我們來看一下 Kubernetes 做 Serverless 有什么優勢。先看一下 Kubernetes 特性包括哪些:
- 容器化
- 統一 IaaS 資源交付
- CI/CD 持續集成部署
- 跨云廠商
- 豐富的生態
- 面向應用管理
而對應于 Serverless 來說
- 事件驅動:Kubernetes 支持 job 類型、并圍繞 Kubernetes 提供豐富的事件源
- 按需使用:Kubernetes 本身支持 hpa 彈性能力
- 免運維、高可用:Kubernetes 可以通過容器化、統一資源交付很好的支持。
結合這些來看 Kubernetes 實現 serverless,天然具備優勢。
如何實現 Serverless Kubernetes
在 Kubernetes 上實現 Serverless 主要做到一下兩點:
第一:向下如何讓用戶減少對基礎設施的關注;
第二:線上如何更聚焦業務應用。
這里我們通過 Serverless Framework ,聚焦業務應用,進一步抽象 Kubernetes 資源,提供按需使用自動彈性的能力。通過 IaaS 資源免運維,減少對基礎設施的關注,做到節點免運維。
那么 IaaS 資源免運維,我們是如何做的呢?
減少對基礎設置的關注:IaaS 免運維
原生的 Kubernetes 節點資源需要用戶自行維護,為了降低用戶維護節點成本,我們提供了托管節點池,幫助用戶維護節點的生命周期,但用戶還是需要對托管節點池策略進行維護,更近一步在 Serverless Kubernetes 中通過虛擬節點結合彈性容器實例 ECI,讓用戶徹底擺脫對 IaaS 的運維。
Serverless Kubernetes IaaS 資源免運維包括:
- 基于容器,安全隔離、高移植
- 無服務器管理:無需容量規劃,對服務器免運維
- 彈性擴容:秒級擴容,無限容器
- 按需付費,更高資源利用率
向下我們通過虛擬節點結合 ECI 實現了 IaaS 資源免運維,那么向上如何聚焦業務邏輯呢?其實就是以應用為核心。
聚焦業務邏輯:以應用為核心
圍繞應用來看,無非我們要解這些問題:
- 應用部署
- 灰度發布
- 流量管理
- 自動彈性
- 可觀測性以及應用的多版本管理
那么有開箱即用的方案去解嗎?答案是 Knative。
Knative 是什么
Knative 是基于 Kubernetes 之上提供的一款開源 Serverless 應用框架,幫助用戶部署和管理現代化的 Serverless 工作負載,打造企業級 Serverless 平臺。
Knative 具備如下優勢:
- 在幾秒鐘內建立可擴展、安全、無狀態的服務。
- 具有更高級別 Kubernetes 應用抽象的 API。
- 可插拔組件,讓您可以使用自己的日志記錄和監控、網絡和服務網格。
- 在 Kubernetes 運行的任何地方都可以運行 Knative,無需擔心供應商鎖定。
- 開發者無縫體驗,支持 GitOps、DockerOps、ManualOps 等。
- 支持常用工具和框架,例如 Django、Ruby on Rails、Spring 等。
Knative 主要包括 2 大核心模塊:Serving 和 Eventing
Serving 提供了 Service 應用模型,支持基于流量的灰度發布、版本管理、縮容到 0 以及自動彈性。
Eventing 提供事件驅動能力。支持豐富的事件源,以及用于事件流轉、過濾的 Broker/Trigger 模型。
為什么是 Knative
那么我們為什么選擇 Knative 呢?
根據 CNCF 2020 中國云原生調查報告,Knative 已經成為 Kubernetes 上最廣泛安裝的無服務器。
另外 Knative 社區近期也發起了一項統計:當前哪些云廠商或企業在提供或者使用 Knative。我們可以看到,幾乎所有的大廠都支持或者集成 Knative, 如阿里云、谷歌云、IBM、Red Hat 等,并且大部分都提供了生產級別能力(Production),這些跡象表明越來越多的用戶擁抱 Knative。
此外近期 Knative 已申請成為 CNCF 孵化項目,這無疑讓 Knative 開發者為之興奮。
Knative 落地挑戰、應對與效果
從開源到產品化落地,必然會面對一些挑戰。Knative 產品化落地主要面對如下挑戰:
- 管控組件多,運維復雜
- 0 到 1 冷啟動問題
- 流量請求 1 對 1 分發
那么我們如何來應對呢?
我們提供組件托管,幫助用戶節省資源及運維成本;當請求為 0 時,縮容到低規格保留實例,實現請求 0 到 1 免冷啟動,做到成本可控;提供自研事件網關,做到流量的精準控制。
Serverless Kubernetes 落地實踐
落地方案
結合上述介紹,向上通過 Serverless Framewok Knative 更聚焦業務應用,向下通過虛擬節點減少對基礎設施的關注。這就是我們Serverless Kubernetes 落地方案:圍繞 Kubernetes api, 下線集成云產品的能力,包括消息事件、彈性容器實例以及日志監控等。向上通過 Knative 圍繞應用為核心,提供事件驅動、自動彈性等能力。
典型應用場景
最后看一下我們有哪些落地場景,典型的應用場景及行業領域如圖:
落地實踐:異構資源,按需使用
- 客戶痛點
用戶希望通過 Serverless 技術按需使用資源,節省資源使用成本,簡化運維部署 。另外有 GPU 的業務訴求。希望使用容器化的 Serverless ,支持使用 GPU 資源,同時簡化應用運維部署(盡可能少的操作 Kubernetes deployment/svc/ingress/hpa等資源),IaaS 資源免運維。
- 解決方案
使用 Knative + ASK 作為 Serverless 架構。數據采集之后,通過服務網關訪問數據處理服務,數據處理服務根據請求量按需自動擴縮容。
落地實踐:事件驅動,精準分發
某客戶直播系統支持用戶在線互動。消息數據的處理主要有以下技術挑戰:
- 業務彈性波動,消息并發高。
- 互動實時響應,低延遲。
客戶選擇阿里云的 Knative 服務進行數據的彈性處理。應用實例數隨著業務波峰波谷實時擴容和縮容,真正做到了按需使用,實時彈性的云計算能力。整個過程完全自動化,極大的減少了業務開發人員在基礎設施上的心智負擔。
小結
我們回顧一下本文介紹的主要內容:首先介紹了為什么在 Kubernetes 提供 Serverless:
- Kubernetes 已成為云原生業界標準
- 面向標準 Kubernetes API 進行 Serverless 編程
然后我們如何實現 Serverless ?Kubernetes:
- IaaS 節點免運維
- Serverless Framework (Knative)
最后介紹了 2 個落地實踐場景:
- 異構資源,按需使用
- 事件驅動,精準分發
一句話:Serverless Kubernetes 基于 Kubernetes 之上,提供按需使用、節點免運維的 Serverless 能力,讓開發者真正實現通過 Kubernetes 標準化 API 進行 Serverless 應用編程,值得關注。
點擊??此處??,即可查看 1204 Serverless Developer Meetup 詳情!
總結
以上是生活随笔為你收集整理的Serverless Kubernetes 落地实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenKruise v1.0:云原生应
- 下一篇: 1.13 南京站 | 2022 开年 S