雲原生世界中的裸機

導讀:當你看到「裸機(bare-metal)」時會想到什麼?不,你可能想錯了。雲原生世界的裸機遠比你想象的還要精彩。git

當您聽到「裸機」一詞時您會怎麼想?對我來講,它讓人聯想到很是有形的圖像,將成排的服務器經過彩色電纜鏈接在一塊兒,響亮的風扇旋轉並鎖定在地下室或倉庫中。api

做爲Cloud Native Computing Foundation的大使,我將大部分時間花在堆棧上的時間,分別是「 7級」(應用程序)和「 8級」(人員)。我已經習慣於在須要時使用API和諸如Terraform之類的工具來獲取計算。個人職業生涯中最重要的部分之一就是說服人們忘記服務器。安全

那麼,裸機與「雲原生」有什麼關係?若是您是這個領域的新手,您須要瞭解什麼?服務器

我在Twitter上讓個人粉絲分享了他們最喜歡的裸機工具,這產生了一個精選列表:很棒的裸機。請繼續閱讀以瞭解裸機與雲原生雲的比較,以及其中涉及的一些概念和管理員面臨的挑戰。微信

雲原生地平線網絡

在部署一段代碼時,能夠調用一個REST API。沒有比這更簡單的了,直接轉到您的AWS儀表板並將代碼粘貼到文本框中,而後看到代碼經過AWS Lambda進行每秒計費和自動縮放便可執行。自誕生以來,Lambda功能的整體界面幾乎沒有變化,使其成爲一個相對穩定的平臺。架構

上圖爲我在hello-world上展現了Lambda函數的CPU計數和系統正常運行時間。函數

AWS Lambda是SaaS產品,它是開源的。所以,若是您擔憂陷入單一供應商的風險,則能夠考慮使用Kubernetes。與AWS Lambda相比,Kubernetes經過利用Docker或OCI格式的容器映像來實現雲之間的可移植性。一旦打包在映像中並推送到註冊表,您的代碼就能夠相對輕鬆地在Kubernetes集羣之間移動。若是您喜歡使用託管產品來減輕維護負擔,則可使用許多Kubernetes服務,這些服務能夠快速簡便地設置。微服務

像Kubernetes這類平臺的缺點之一是它隨節速變化。在每次要發行版之間,您可能會看到重大更改,而且必須重寫您擁有的全部集成,更不用說以類似的節奏進行更改的第三方工具和代碼生成工具。所以,像Amazon EKS這樣的託管雲一般在社區後面運行多個版本。工具

Cloud Native Computing Foundation(CNCF)最受歡迎的軟件集中在堆棧的頂層。Kubernetes是基金會的第一個項目,隨後的許多項目都是對該基金會在運營級別或組織級別的補充。諸如Prometheus和AlertManager之類的工具可提升運營效率,並容許監視咱們的許多服務。NATS提供跨本地網絡和Internet的高速消息傳遞。Linkerd在容器之間創建一個網格,以添加指標,策略和端到端加密。

做爲一個流行的無服務器項目的實踐者和維護者,我常常被告知「無服務器中仍有服務器」 就好像我不知道同樣。對我來講,無服務器一直是開發人員關注的重點:它不是關於硬件規格和網絡VLAN,而是關於API。根據API進行推理是雲原生方式。

以相似的方式,裸機服務器是Kubernetes以及全部雲本機應用程序的基礎,不管是經過管理程序仍是經過IaaS提供商的API直接訪問,都是裸機服務器。

您應該知道「他們在某個地方」相似的問題,對於許多人來講仍是須要的,除非您有特定的需求。諸如Cherry Servers,AWS和Packet之類的一些公司在裸機 隔離和性能的優點,一般與VM相關聯的強大API 之間取得了不錯的平衡。

「使用裸機」從字面上看,您所看到的就是所獲得的。市場上沒有像「無服務器」這樣使人困惑的營銷術語,而是得到了GB的RAM,Gbps的網絡帶寬和GHz的CPU。自建立以來,這確實使人耳目一新,但也沒有太大改變。

大約20年前,我在學校天天都使用裸機工做。我經過在i386和i486以及裝有Intel Pentium處理器的較新計算機上安裝操做系統來幫助網絡管理員。就像今天同樣,當時的機器仍然具備硬盤、RAM、網卡和存儲。

咱們大約有5個實驗室,每一個實驗室中有30臺以上的計算機,有時這涉及到讀取CD-ROM並從新安裝操做系統,可是有時它涉及到經過網絡啓動計算機以將映像遠程部署到該實驗室。與使用少許CD-ROM相比,它具備更大的可伸縮性,而且花費的時間更少。

這就是從裸機和操做系統開始的地方,一旦安裝,就可能沒法分辨它與在AWS上運行的EC2虛擬機之間的區別。

我提到Kubernetes的發展速度相對較快。事實證實,硬件沒有。咱們使用與20年前在實驗室中使用的相同的工具和技術來啓動網絡上的系統。

裸機術語表

就像Kubernetes和Cloud有他們本身的術語同樣,裸機也有本身的術語。我整理了有關概念和工具的快速詞彙表:

1.網卡:使用電纜將計算機物理鏈接到網絡的位置。它能夠是銅,或在某些狀況下是光纖。某些計算機具備多個網卡或端口。

2.管理端口:這是服務器特定的概念。爲了提升效率,管理員須要在不插入鍵盤和鼠標的狀況下遠程管理計算機。

3.智能平臺管理接口(IPMI):管理接口每每是特定於供應商的,而且使用客戶端做爲Java接口經過網絡進行訪問。

4.局域網喚醒(WoL):可使用遠程喚醒計算機,而不是容許遠程管理。

5.PXE(預引導執行環境):用於經過本地網絡引導計算機,僅須要網卡。iPXE能夠用於使用TFTP擴展示有的PXE固件,也能夠直接閃存到某些網卡。

6.iPXE:一種更新的開源網絡啓動固件,它還容許經過HTTP和Internet進行啓動。

7.上網本:從網絡引導工具,你並不須要物理上訪問計算機進行配置或安裝操做系統。

8.DHCP:將IP地址和其餘元數據(例如主DNS服務器)分配給網絡接口。

9.TFTP(簡單文件傳輸):基於UDP的文件服務器,用於獲取固件以經過網絡引導。

10.NFS(網絡文件系統):NFS是與網絡引導或文件共享一塊兒使用的最多見的文件系統之一,它容許Linux計算機在沒有本身的磁盤的狀況下工做。不幸的是,NFS與容器使用的覆蓋文件系統不兼容

11.iSCSI(Internet小型計算機系統接口):NFS的替代產品,它提供塊級設備而不是網絡文件系統。您能夠根據須要使用ext4文件系統格式化磁盤,甚至運行Docker。

12.瘦客戶端:像Linux Terminal Server Project LTSP 這樣的項目,使您能夠將任何PC變成瘦客戶端,而無需任何本地存儲。這對於像Raspberry Pi 這樣的物聯網設備可能頗有用,由於該設備 須要依靠壽命較短的閃存才能耗盡

13.操做系統——是否部署Windows,Linux或其餘。一般必須使用交互式UI,CLI或經過預約義的配置來安裝操做系統。

固然,並不是全部裸機都是平等的。好比,工做站、家用PC,Intel NUC或Raspberry Pi等消費類設備不太可能帶有IPMI管理端口。

上網本示例

這是經過網絡啓動計算機的示例工做流程(以下圖):

1.裸機服務器已打開。

2.網卡嘗試使用PXE經過網絡進行引導。

3.發送DHCP請求以獲取IP地址。

4.收到帶有IP的DHCP響應,並提示在哪裏尋找啓動固件。

5.PXE進程如今從TFTP服務器獲取固件並進行加載。

到那一時刻,一個文件系統將經過上網本上的NFS被安裝,而且一個操做系統將遠程運行,或者使用臨時環境將OS安裝到本地系統。在隨後的引導中,硬盤將用於加載操做系統。

諸如上網本和網絡接口之類的一些概念與虛擬機有些交叉。至關於AWS上IPMI的EC2儀表板,您能夠在其中選擇磁盤映像(也稱爲Amazon Machine Image / AMI)來啓動,並自定義計算機的行爲。

瞭解更多開源資訊歡迎關注微信公衆號「開源村OSV」

爲何咱們須要裸機置備工具?

我最近在Twitter上問個人粉絲,最喜歡的裸機配置工具是什麼。有許多不一樣的答案,其中包括5-10個項目,其中一些較新而另外一些則更成熟。

事實證實,儘管裸機和DHCP,TFTP和NFS之類的底層工具在20多年中沒有發生太大變化,但人們仍在嘗試使它們更易於自動化。許多數據中心包含異構硬件,有些具備RAID陣列,有些沒有RAID陣列,有些帶有一個磁盤,有些帶有兩個磁盤,以及不一樣的固件和功能。

調配工具須要幫助咱們:

1.服務:提供DHCP,TFP,NFS,HTTP等的軟件服務(或服務器)。

2.庫存:用於列出和收集服務器及其功能。

3.映像存儲庫:OS映像存儲庫,準備經過網絡部署到計算機上。這些圖像一般須要自定義,所以可使用Packer之類的工具來構建。

4.交付:將舊版工具連接在一塊兒,以建立安全的方式來安裝操做系統。一些項目將此稱爲「工做流」,另外一些項目則使用狀態機。

您能夠在我精心策劃的超棒裸機GitHub存儲庫中看到Tweet的結果,它涵蓋了裸機配置軟件以及可簡化使用低級網絡(例如MetalLB和進口)的工具。

這是社區提到的一些項目的簡介:

1.Digital Rebar:Digital Rebar是數據中心自動化,資源調配和基礎設施即代碼(IaC)平臺,採用雲原生架構設計,可替代Cobbler,Foreman,MaaS或相似技術。

2.Canonical的MAAS(Metal as a Service)「金屬即服務」。

3.Ironic:來自OpenStack Foundation的「用於管理和配置裸機服務器的服務。

4.Netboot.xyz :一種經過PXE從BIOS內的某個位置啓動各類操做系統安裝程序或實用程序的方法,而無需去檢索媒體便可運行該工具。

5.Plundr:Plunder是一個單二進制服務器,其設計目的是使服務器,平臺和應用程序的配置更加容易。

6.Tinkerbell:一種裸機置備引擎,由Packet團隊充滿愛心地構建和維護。

這些最受歡迎的工具能夠幫助咱們在上面看到的工做流中更好地實現自動化,諸如PXE,DHCP,TFTP,NFS,硬盤預裝和操做系統安裝。安裝後,能夠啓動Kubernetes集羣,可是這些工具旨在用於更通用的用途。安裝操做系統後,一般會使用SSH,Ansible,Puppet或Chef之類的管理工具來管理計算機及其軟件包。

如今,社區共享的許多更新工具都集中在這些工具的基礎上,以創建Kubernetes集羣,所以咱們在裸機與Kubernetes上結束了循環。示例包括:

1.Metalk8s:Scality表示 「 MetalK8s的發佈是爲了使在須要持久存儲的裸機服務器上運行Kubernetes(k8s)更加容易」。

2.金屬堆棧(Metal Stack):「咱們相信Kubernetes在裸機上運行最好。咱們在此基礎上構建了一個用於管理裸機硬件和Kubernetes的api。」

3.Metal³:「用於Kubernetes的裸機主機配置」,來自於ClusterAPI支持並建立了Ironic。

在提到的Kubernetes工具中,有些更進一步,幷包含一種稱爲集羣API(CAPI)的抽象定義。CAPI的目標是將一組VM或服務器轉變爲功能正常的Kubernetes集羣。

集羣API是一個帶聲明性的Kubernetes項目,對集羣建立、配置和管理來講是個Kubernetes風格的API。它在覈心Kubernetes之上提供了可選的附加功能,以管理Kubernetes集羣的生命週期。

將來可期

考慮現代雲計算時,存在一系列控制和可移植性。一方面,咱們擁有AWS Lambda,這是一種高度專有的開源SaaS產品,幾乎沒法控制,但實用性和效率很高。向上發展,咱們擁有Kubernetes,它帶來了橫向擴展的超能力,但要付出必定的代價。

最後,咱們有裸機服務器,須要使用專業工具進行周密的管理。我我的認爲二者的交集頗有趣,這就是爲何我對Metal³和Metal Stack這樣的工具感到興奮的緣由,這些工具旨在使從異構裸機硬件到Kubernetes的體驗變得平滑。

我還在密切關注Tinkerbell和Plundr的項目。Plundr採用總體方法,將盡量多的捆綁到單個二進制和簡單的工做流引擎中,即將裸機轉變爲雲服務。而Tinkerbell是一組微服務,基於Packet在過去6年中的工做成果,在設計時考慮了安全性和異構硬件。我喜歡Tinkerbell設置工做流程中每一個步驟都定義爲Docker映像的方式。定義一個Dockerfile,而後構建映像並將其存儲在註冊表中,從而實現可移植性,版本控制和可複製的工件。

相關文章
相關標籤/搜索