三探云原生全景图,这次聊聊运行时层
在《俯瞰云原生,這便是供應層》我們介紹了云原生全景圖的最底層:供應層,本文將帶大家了解運行時層,這一層包含了容器在云原生環境中運行所需的一切。
作者 |?Catherine Paganini,Jason Morgan
來源 | K8sMeetup社區
頭圖 | 下載于視覺中國
在《俯瞰云原生,這便是供應層》中,我們探索了構建云原生平臺和應用的基礎,本文我們將一起了解運行時層(runtime),這一層包含了容器在云原生環境中運行所需的一切。即:啟動容器的代碼,也叫運行時引擎;使容器獲得持久化存儲的工具;以及管理容器環境網絡的工具。
但是注意,不要將這一層的資源與基礎設施和供應層的網絡和存儲弄混淆,后者的工作是讓容器平臺運行起來。容器直接使用運行時層的工具來啟動或停止,存儲數據,以及相互通信。
云原生存儲
是什么
存儲是存放一個應用程序持久數據的地方,也叫做持久卷(persistent volume)。輕松訪問持久卷對于應用程序可靠運行至關重要。通常,當我們說持久數據的時候,我們是指數據庫、消息之類的,或其他任何在應用重新啟動時不會丟失的信息。
解決什么問題
云原生架構具有高度的靈活性和彈性,這使得重啟應用時存儲持久數據變得很有挑戰性。容器化應用程序在擴容、縮容或自動恢復時,會不斷地創建或刪除實例,并隨著時間改變物理位置。因此,必須以與節點無關的方式提供云原生存儲。但是,要存儲數據,就需要硬件(具體來說是磁盤)。磁盤和其他硬件一樣,受到基礎設施的限制。這是第一個大的挑戰。
第二個挑戰是存儲接口。該接口在數據中心之間可能會發生很大的變化(在以前,不同的基礎設施都有自己的存儲解決方案,并帶有自己的接口),這使得可移植性變得非常困難。
最后,由于云的彈性,存儲必須以自動化方式進行配置,因為手動配置和自動擴展不兼容。面臨以上這些問題,云原生存儲就是為新的云原生環境量身定制的。
如何解決
該類別的工具可以:
為容器提供云原生存儲選項;
標準化容器與存儲提供者之間的接口;
通過備份和還原操作提供數據保護。
云原生存儲意味著使用兼容云原生環境的容器存儲接口(也就是下一個類別中的工具),并且可以自動配置,通過消除人力瓶頸從而實現了自動擴展和自我恢復。
對應工具
容器存儲接口(CSI)在很大程度上使云原生存儲變成了可能。CSI 允許使用標準 API 向容器提供文件和塊存儲。該領域中有很多工具,既有開源的也有供應商提供的,都可利用 CSI 為容器提供按需存儲。
除了這一及其重要的功能,還有一些其他的工具和技術旨在解決云原生空間中的存儲問題。Minio 是一個受歡迎的項目,它提供了兼容 S3 的 API 用于對象存儲。Velero 之類的工具可幫助簡化 Kubernetes 集群本身以及應用程序使用的持久化數據的備份和還原過程。
容器運行時
是什么
前面我們提到過,容器是一組用于執行應用程序的技術約束。容器化的應用程序相信自己正在專用計算機上運行,而忽略了它們其實是與其他進程(類似于虛擬機)共享資源。
容器運行時是執行容器化(或“隔離”)應用的軟件。如果沒有運行時,將只有容器鏡像——指定容器化應用程序外觀的文件。運行時將在容器中啟動應用程序,并為其提供所需的資源。
解決的問題
容器鏡像(帶有應用程序規范的文件)必須以標準化、安全和隔離的方式啟動:
標準化:無論它們在何處運行,都需要標準操作規則;
安全:訪問權限應該要注意設置;
隔離:該應用程序不應影響其他應用程序或受到其他應用程序的影響(例如,位于同一位置的應用程序崩潰)。隔離基本上起到保護作用。
此外,必須為應用程序提供 CPU、存儲、內存等資源。
如何解決
容器運行時可以完成所有這些工作。它以標準化方式在所有環境中啟動應用程序,并設置安全邊界。安全邊界是運行時和其他工具不同的地方,CRI-O 或 gVisor 等運行時強化了它們的安全性邊界。運行時還為容器設置資源限制。沒有資源限制,應用程序可能會根據需要消耗資源,這樣就有可能占用其他應用程序的資源。因此設置資源限制是很必要的。
對應的工具
不是所有此類別中的工具都一樣。Containerd(Docker 產品的一部分)和 CRI-O 是標準的容器運行時實現。有一些工具可以將容器的使用擴展到其他技術,例如 Kata,它允許將容器作為 VM 運行。其他工具旨在解決與容器相關的特定問題,例如 gVisor,它在容器和 OS 之間提供了額外的安全層。
云原生網絡
是什么
容器通過云原生網絡實現相互之間及和基礎設施層之間的通信。分布式應用程序具有多個組件,這些組件將網絡用于不同目的。此類別中的工具將虛擬網絡覆蓋在現有網絡之上,專門用于應用程序進行通信,稱為覆蓋網絡(overlay network)。
解決什么問題
通常我們將在容器中運行的代碼稱為應用程序,但實際上,大多數容器中僅包含大型應用程序的一小部分特定功能。諸如 Netflix 或 Gmail 之類的現代應用程序實際上由許多較小的組件組成,每個組件都在自己的容器中運行。為了使所有這些獨立的部分正常運行組成一個完整的應用,容器之間需要相互通信。此類別的工具就提供該專用通信網絡。
此外,這些容器之間交換的消息可能是私密的、敏感的或者非常重要的。這導致了其他要求:例如為各種組件提供隔離,檢查流量以識別網絡問題的能力。在某些情況下,可能還需要拓展這些網絡及網絡策略(如防火墻和訪問規則),以便應用程序可以連接到容器網絡外部運行的 VM 或服務。
如何解決
此類別中的項目和產品使用 CNCF 中的項目——容器網絡接口(Container Network Interface, CNI)為容器化應用提供網絡功能。某些工具(例如 Flannel)僅為容器提供基本連接。其他工具(如 NSX-T)提供了完整的軟件定義網絡層,可為每個 Kubernetes 名稱空間創建一個隔離的虛擬網絡。
容器網絡至少應該能為 Pod(Kubernetes 中運行容器化應用的地方)分配 IP 地址,以允許其他進程訪問。
對應工具
CNI 標準化了網絡層為 Pod 提供功能的方式,這在很大程度上實現了該領域的多樣性和創新性。為 Kubernetes 環境選擇網絡非常關鍵,有許多工具可選。Weave Net,Antrea,Calico 和 Flannel 均提供有效的開源網絡層,它們的功能各不相同,應根據特定需求進行選擇。
此外,許多供應商已準備好使用軟件定義網絡(SDN)工具來支持和擴展 Kubernetes 網絡,這些工具可使你深入了解網絡流量,執行網絡策略,甚至將容器網絡和策略擴展到更廣泛的數據中心。
本文是對運行時層的概述,該層提供了容器在云原生環境中運行所需的工具,包括:
存儲:使應用程序輕松快速訪問運行所需的數據;
容器運行時:執行應用程序代碼;
網絡:確保容器化應用程序之間的通信。
在下一篇文章中,我們將探索編排和管理層,該層處理的是如何將所有容器化應用程序作為一個組進行管理。
點擊關注我們,記得標星哦~~~
更多閱讀推薦
一張魔力象限圖,一眼看盡5G江湖
SRE 是如何保障穩定性的
如何寫出讓 CPU 跑得更快的代碼?
俯瞰云原生,這便是供應層
13種重要的云原生工具,讓交付過程更快
一目了然的 Docker 環境配置指南
總結
以上是生活随笔為你收集整理的三探云原生全景图,这次聊聊运行时层的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 携程发布2020年财报:四季度营业利润率
- 下一篇: 不知道路由器工作原理?没关系,来这看看!