在 4 月 9 號結束的 OpenStack 基金會董事會議上,董事們投票批准了 Kata Containers 成為基金會旗下第一個新的頂級開放基礎設施(Open Infrastructure)項目,這是該項目的一個重要里程碑。

作為 Kata Containers 的初創成員之一,華為擁有 Kata Containers 架構委員會五席位之一和三位 maintainer,貢獻了支持 CNI 網路介面、Host Cgroups 等特性,參與核心代碼重構,並已提交上百個 patch,代碼貢獻量超過 3 萬行,全球排名穩定保持在前四。

2017 年,華為 EulerOS iSula 技術團隊成功將 Kata Containers 集成到 iSula 容器平台,並於 18 年初應用於華為雲容器服務,推出基於 iSulad 容器引擎 + Kata Containers 的商用容器服務——華為雲容器實例 CCI(Cloud Container Instance),也是業界首個 Serverless 架構的雲容器服務,正是得益於 Kata Containers,使之前一直困擾用戶的容器安全問題迎刃而解。

本文將重點介紹基於 iSulad 容器引擎和 Kata Containers 如何打造安全、高性能的雲容器實例服務。

首先了解華為 iSula 容器平台,這是華為自研的容器平台,支持雙容器引擎和五種不同的容器模式。

雙引擎為:

  • docker 引擎:目前流行的 docker 容器引擎,在 Linux 上基於 namespace 及 cgroups 實現應用之間的隔離,使用 Go 語言編寫而成。
  • iSulad 容器引擎:使用 C 語言編寫而成的華為純自研容器引擎,相比 docker 引擎突出的優點是性能高,資源佔用小,在邊緣計算等資源受控場景下有著非常耀眼的表現。

五種容器形態為:

  • 應用容器:即大家熟知的 docker containers。
  • 系統容器:在容器大浪潮中,各種不同類型的業務紛紛進行容器化,期望利用容器「build, ship and run」的能力最大化生產效率。相比微服務應用,傳統的基於 systemd 的重型業務更加難以容器化,系統容器應運而生。系統容器內置 systemd 作為 init 進程,可幫助傳統業務更輕鬆完成容器化改造和使用。
  • 輕量化容器:基於 LXC 打造的輕量化容器佔用內存資源極少,主要用於 CT 或邊緣計算等資源受控場景。
  • 高性能低時延容器:使用 unikernel 技術將應用與定製化內核打包,一方面可以大大減小攻擊面增強安全性,同時大幅度提高了應用的運行性能。高性能低延時容器可以為定製化場景提供最佳方案。
  • Kata 容器:融合傳統虛擬化技術與容器技術創造的高安全性容器,一方面兼容了繁榮的容器生態,一方面解決了傳統容器隔離性不足的安全隱患,這也是華為雲容器實例這種 Serverless 架構下,用戶最為關心的問題。

iSula 在集成 Kata Container 優秀特性的同時,還會針對業務場景進行定製化改造。性能問題一直是大多數開源項目被詬病的地方,尤其是在超大型商業應用環境下尤為明顯。Kata Containers 也不例外,雖然 Kata 社區提供的技術方案已經可以很好地兼容 docker、containerd 及 crio 等容器運行時,但出於性能等方面的考慮,iSula 並未直接使用社區方案,而是採用了性能更高的自研發方案。使用 iSula 自研方案,可以極大縮短軟體棧的深度,減少 RPC 調用開銷,更好配合華為雲自有高性能網路及存儲資源,使得華為雲容器服務能為用戶提供更高性能的網路及存儲方案。

以網路為例,社區開源網路方案如下所示:

Calico、Canal 等開源網路軟體會將創建的 veth 網口插入容器的 namespace 中,在 Kata 的場景下,容器的 Network Namespace 中還有一層虛擬化層,需要使用 Linux tap 設備而無法直接使用 veth 網卡。因而,Kata 提供了幾種網路模型用於兼容容器生態中的多種網路方案,包括:

  • Bridge 模式:使用 Linux bridge 將 veth 與 VM 的 tap 設備橋接起來。
  • Macvtap 模式:創建母設備為 veth 的 macvtap 供 VM 使用。
  • TC 模式:使用 Linux TC 在 veth 和 tap 設備之間做流量的雙向轉發。

Kata 默認的幾種網路模型可以保證開源容器 CNI 網路方案無需修改開箱即用,這種方式足夠智能,但靈活性稍顯不足,因而華為向社區貢獻了一種新的模式:

  • None 模式:Kata 不做任何猜測,不智能創建網卡,網路需要用戶使用新增的 kata-network 命令手動創建。

使用 none 模式給予了用戶最大選擇權和靈活性,但需要用戶自行改造 CNI 網路插件,相比其他模式有一定使用門檻。好處在於由 CNI 插件可以直接為容器增刪網卡 / 路由,繞過了 veth 網卡,縮短了網路拓撲路徑長度,為網路性能的提升提供了更大空間。

None 模式配合華為自研的容器網路方案,可以保證為容器應用提供最佳網路性能。

了解過 iSula,再來看看華為雲容器實例(CCI)服務,CCI 是基於 Serverless 架構的 Kubernetes 容器服務。

真正的 Serverless 容器服務中,集群管理由雲服務提供商承擔,客戶只需要關注每個應用的容器實例即可。在這種情況下,雲服務提供商需要考慮如何在統一管理面下保證每個用戶的安全。

CCI 服務所屬的 Kubernetes 集群直接部署在裸金屬伺服器之上,底層是 Kata Containers,中間靠 iSula 容器平台連接。依靠 Kata Containers 的強隔離特性,多個租戶之間的容器運行環境強隔離,不同租戶之間的容器不感知、不可見,可以在同一台裸金屬伺服器上混合部署而安全無虞,若使用 docker 容器通常認為是存在安全風險的。

同時,CCI 這種將 Kubernetes 直接部署在裸金屬伺服器上的混合多租模式,配合 Kata Containers 技術可以最大化資源利用率,降低性能開銷,使得用戶的內存開銷小於 64MB,容器實例啟動時間小於 600ms,從而可以為用戶提供高性能低價位的容器服務。藉助 iSula 優化過的網路和存儲能力,CCI 可以在網路和存儲基礎資源之上,提供更優性能。

除此以外,基於 iSula 提供的 GPU 直通功能,CCI 通過該技術提供的 GPU 容器,用戶可直接在容器中使用 nvidia 的各型號 GPU 進行 AI 計算,使得 CCI 也成為市面上第一個提供 GPU 算力的 Serverless Kubernetes 容器服務,並且做到 32 塊 GPU 線性加速比超過 0.95,128 塊 GPU 線性加速比超過 0.8,在圖像識別、自然語言處理、語音識別等領域被廣泛使用。

推薦閱讀:

相关文章