摘要:華為云DTSE技術布道師張天陽結合沙箱容器發展歷程,介紹華為云多沙箱容器運行時 Kuasar 專案優勢,開啟多沙箱容器運行時上手實踐體驗,
本文分享自華為云社區《理論+實操,帶你了解多沙箱容器運行時Kuasar》,作者:華為云社區精選,
本期《多沙箱容器運行時Kuasar開發上手實踐》主題直播中,華為云DTSE技術布道師張天陽結合沙箱容器發展歷程,介紹華為云多沙箱容器運行時 Kuasar 專案優勢,為開發者演示 Kuasar 的安裝運行方式,開啟多沙箱容器運行時上手實踐體驗,
順勢而出的沙箱容器
2013年,docker 橫空出世,云計算進入容器時代,所謂的容器也就是運行在宿主機上的行程,通過 Namespace 和 Cgroup 技術進行隔離和限制,和主機共享內核,
2014年,kubernetes 開源并成為主流的容器編排工具,在 kubernetes 中,Pod 是一個或多個容器的集合,容器間可以共享網路和存盤,為此引入了 pause 容器來實作這一特性,
“與宿主機系統共享內核的容器,是存在著巨大的安全隱患,”華為云DTSE技術布道師張天陽講到,
也正是看到這個問題,在2017年底,沙箱(Sandbox)容器技術興起,它將容器行程限制在一個封閉的沙箱環境中,防止其對系統和其他容器造成破壞,具有極高的安全性,
沙箱天然符合 Pod 的定義,它為一組容器提供了一個隔離的環境,在沙箱環境中運行的容器,就是沙箱容器,根據沙箱隔離的邊界可分為:
- 輕量虛擬機沙箱(MicroVM Sandbox):在宿主機上模擬一套完整的虛擬機,容器運行在虛擬機內,具有非常高的安全隔離效果,
- 用戶態內核沙箱(Application Kernel Sandbox):通過一個運行在用戶態的內核程式,攔截并實作容器的系統呼叫,從而保證容器間的安全隔離性,
- WebAssembly沙箱(Wasm Sandbox):將容器運行在 WebAssembly 的運行時中,依賴 WebAssembly 的能力提供進行程級別的隔離,
每種沙箱在極速彈性、安全隔離和標準通用維度有各自的優勢,目前云廠商都已在生產環境布局了沙箱容器產品,每個沙箱借助 containerd Shim v2 均實作了一套管理面的程式,彼此之間不相兼容,
2023年3月,containerd 在其 v1.7.0 版本中發布了 Sandbox API 特性,該特性提供了一套管理沙箱的API,它的出現使得容器和沙箱的概念解耦,“容器歸容器,沙箱歸沙箱”,創建 Pod 就是創建沙箱,不再需要借助 pasue 容器,
沙箱容器已成為云原生場景下的安全的解決方案,我們希望借助 Sandbox API 的力量,實作一種支持多種沙箱技術的容器運行時,
然而單一容器隔離技術無法滿足用戶云上業務對安全隔離、極速彈性、標準通用等多個維度的訴求,基于此,華為云于2023 年 4 月在荷蘭阿姆斯特丹舉辦的 KubeCon + CloudNativeCon Europe 2023 云原生峰會上正式開源Kuasar ,新開源的多沙箱容器運行時 Kuasar 可以充分利用節點資源、降本增效,為用戶提供更安全高效的沙箱場景解決方案,
Kuasar架構技術大揭秘
Kuasar 是一個多沙箱容器運行時,那么什么是容器運行時?簡單說容器運行時是一個負責拉起容器,管理容器運行狀態的運行時組件,可以分為高階容器運行時和低階容器運行時兩類:
- 高階容器運行時:負責 CRI 的實作,從高維度管理容器和鏡像實體,containerd, CRI-O, docker 還有 iSulad 都是典型的高階容器運行時,
- 低階容器運行時:負責 OCI 實作,真正操作容器,Kata-containers 和 runC 等都是低階容器運行時,
Kuasar 屬于低階容器運行時,和高階容器運行 containerd 互動,Kuasar 主要由兩個模塊組成:
- Kuasar-Sandboxer:實作了 Sandbox API,負責管理沙箱生命周期和資源分配,Sandboxer 以插件的形式和 containerd 互動,
- Kuasar-Task:實作了 Task API,負責管理容器的生命周期和資源分配,
MicroVM Sandboxer:虛機行程提供了完整的虛擬化層和 Linux 內核, vmm-sandboxer 負責創建虛機和呼叫 API, vmm-task 作為虛機里的 init 行程負責拉起容器行程,容器的 IO 流則可通過虛機的 vsock 或 uds 匯出,
App Kernel Sandboxer: Quark 是一種新型的 App Kernel Sandbox,使用自己的 QVisor 作為 hypervisor 和自定義內核 QKernel,QVisor 只負責KVM虛擬機的生命周期管理,Qkernel 攔截所有的系統呼叫,并通知 QVisor 處理,quark-sandboxer 拉起 Qvisor 和 Qkernel,每當需要啟動容器時,QVisor 中的 quark-task 將呼叫 Qkernel 來啟動一個新的容器,同一 Pod 中的所有容器都將在同一個行程中運行,
Wasm Sandboxer:WebAssembly 沙箱定義了一套新的指令集和虛擬機,所有程式必須編譯成 Wasm 指令集才能在 Wasm 虛擬機中運行,因此對應用程式有很高的要求,wasm-sandboxer 和 wasm-task 為一個獨立的行程,每當需要在沙箱中啟動容器時,wasm-task 將 fork 一個新行程,啟動一個新的 WasmEdge runtime,并在其中運行 Wasm 代碼,
Kuasar改變當前的Shim V2 的管理模型,帶來以下收益:
- sandbox 管理邏輯清晰:sandbox 管理邏輯和 container 管理邏輯完全分開,開發友好,語意清晰
- 簡化 container 呼叫鏈:取消 Task API 到 Shim v2 API 的轉化,直接呼叫,鏈路簡化
- 高效的sandboxer行程: Sandboxer 行程常駐減掉了冷啟動 Shim 行程的耗時, 1:N 管理模型大幅減少了行程數量,Rust 程式記憶體安全,相比 Golang 開銷小
- pause 容器消失:創建 Pod 不再創建 pause 容器,不再需要準備 pause 容器鏡像快照
為了更好地展現Kuasar 性能優勢,張天陽選擇 “端到端容器啟動時間”和“管理面組件記憶體消耗”作為衡量 Kuasar 性能的兩個指標,在保持環境變數一致的前提下和同類競品進行對比測驗,
啟動時間測驗分為兩組,一組統計單個 Pod 的啟動時間,另一組統計并行啟動50個 Pod 的時間:
Kuasar 100% 的啟動速度提升主要得益于兩方面,一方面是 Sandbox API 的實作,使得創建容器不再單獨創建 pause 容器,節省了準備pause容器鏡像快照的時間;另一方面得益于1:N 的管理模型,Sandboxer 行程常駐,從而節省了冷啟動 Shim 行程的時間,這使得容器的啟動速度大大提升,
記憶體消耗測驗共分三輪,每輪分別啟動了1、5、10、20、30和50個Pod,查詢Sandboxer 行程和所有 Shim 行程的 PSS 數值,
Kuasar 節省近99%的記憶體,原因也可分為兩點:主要是 1:N 的管理模型使得 N 個行程減少為1個行程,帶來的記憶體收益與 Pod 數成正比;其次,Kuasar 采用了 Rust 編程語言,相比于 Kata Shim 行程使用的 Golang 語言,語言本身也會帶來一些記憶體收益,
五分鐘教你操作Kuasar
了解了Kuasar相關技能和特性,相信大家對產品有了一個大致的了解,接下來,就花幾分鐘帶大家從安裝上手,實際操作了解和認識Kuasar,
為了讓大家更好地體驗,在Kuasar安裝配置操作上,為大家準備了一指禪,如下:
- 方式一:Ubuntu 22.04 作業系統,可按照 Github Release 發布說明直接下載安裝: https://github.com/kuasar-io/kuasar/releases/tag/v0.0.1-alpha1
- 方式二:如果是原始碼編譯,需要按照 README 里的說明進行:https://github.com/kuasar-io/kuasar#quick-start
溫馨小提醒,在安裝配置前需要大家預準備一下內容:
面向未來,作為一個開放和可擴展的 多沙箱容器運行時,Kuasar 將發揮沙箱介面的優勢,擁抱業界最新的 DRA(Dynamic Resource Allocation)、CDI(Container Device Interface) 等管理介面,為云原生場景帶來更安全、高效、便捷的容器解決方案,為云原生應用提供更安全的保障,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/553102.html
標籤:其他
上一篇:面了一個4年經驗的測驗工程師,自動化都不會也要15k,我也是醉了····
下一篇:返回列表
