云原生不可變基礎(chǔ)設(shè)施 - CoreOS
容器是對(duì)應(yīng)用一次徹底的封裝,抽象成簡(jiǎn)單標(biāo)準(zhǔn)的操作;應(yīng)用的生產(chǎn)者使用build指令將應(yīng)用打包成一個(gè)標(biāo)準(zhǔn)鏡像;然后使用push命令將鏡像推送到鏡像倉(cāng),即可完成應(yīng)用標(biāo)準(zhǔn)發(fā)布;應(yīng)用的使用者使用pull下載標(biāo)準(zhǔn)鏡像,然后使用run命令運(yùn)行指定的環(huán)境,即可完成應(yīng)用的快速部署。容器完美的解決了應(yīng)用的標(biāo)準(zhǔn)化問題,但是多容器依然需要共享底層基礎(chǔ)操作系統(tǒng),并沒有解決基礎(chǔ)操作系統(tǒng)自身的眾多問題。
1、什么是不可變基礎(chǔ)設(shè)施?
隨著現(xiàn)代化架構(gòu)的應(yīng)用系統(tǒng)建設(shè),尤其是微服務(wù)架構(gòu)大規(guī)模推廣,系統(tǒng)的規(guī)模跟復(fù)雜程度都在指數(shù)增長(zhǎng)。從單臺(tái)的物理機(jī),到虛擬化成幾臺(tái)服務(wù)器,再到現(xiàn)在幾十乃至上百個(gè)容器實(shí)例的規(guī)模,對(duì)于系統(tǒng)運(yùn)維,傳統(tǒng)的手工方式已經(jīng)無法勝任,必須通過全面推廣自動(dòng)化來提升運(yùn)維效率。
但是自動(dòng)化面臨最大的阻礙就是管理對(duì)象的一致性問題,尤其是底層操作系統(tǒng)。Linux操作系統(tǒng)發(fā)行版本多,常用的rpm包在300~600左右靈活組合使用,面向大規(guī)模節(jié)點(diǎn)的批量部署、升級(jí)、安全漏洞管理都面臨巨大的挑戰(zhàn)。近幾年的Kubernetes集群大規(guī)模生產(chǎn)故障基本上都是由底層操作系統(tǒng)引發(fā)的。因此,基于容器的理念進(jìn)一步標(biāo)準(zhǔn)化底層操作系統(tǒng),實(shí)現(xiàn)基礎(chǔ)架構(gòu)不可變,提升一致性,以此來應(yīng)對(duì)當(dāng)前容器大規(guī)模運(yùn)維的挑戰(zhàn)。
什么是不可變基礎(chǔ)設(shè)施?CNCF不僅對(duì)云原生做了定義,同時(shí)有明確云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格(Service Mesh)、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。其中不可變基礎(chǔ)設(shè)施是云原生的代表技術(shù),同時(shí)也是一種思想理念。
2、不可變基礎(chǔ)設(shè)施的核心思想
不可變基礎(chǔ)設(shè)施的核心思想是任何基礎(chǔ)設(shè)施的實(shí)例一旦創(chuàng)建之后變成為只讀狀態(tài),如需修改和升級(jí),則使用新的實(shí)例進(jìn)行替換。可變的基礎(chǔ)設(shè)施人工干預(yù)較多,需要人工去操作系統(tǒng)里進(jìn)行各種更改;不可變的基礎(chǔ)設(shè)施更偏向自動(dòng)化,預(yù)先將基礎(chǔ)設(shè)施及其依賴都定義好,只需要去觸發(fā)新的變更就可以完成整體變更。
對(duì)于容器技術(shù),當(dāng)構(gòu)建一個(gè)鏡像,然后在鏡像的基礎(chǔ)上去部署業(yè)務(wù)。如果出現(xiàn)問題,不會(huì)去已有容器的里去做變更,而是從容器構(gòu)建階段去解決問題,重新打包構(gòu)建新的鏡像。所以從容器的角度,鏡像就是一個(gè)不可變的基礎(chǔ)設(shè)施。
不可變的基礎(chǔ)設(shè)施逐漸下沉到操作系統(tǒng)層面,形成許多容器化操作系統(tǒng),比如RancherOS、K3os、CoreOS等。容器操作系統(tǒng)多種多樣,但都有一個(gè)共同點(diǎn)就是底層基礎(chǔ)設(shè)施不可變。不管上層業(yè)務(wù)如何變化,底層操作系統(tǒng)都是作為一個(gè)整體去發(fā)布,而不是大量rpm包隨意組合去發(fā)布,最簡(jiǎn)單的例子就是Android手機(jī)操作系統(tǒng),一個(gè)ROM是一個(gè)完整的版本,所謂不可變,并不是說它不變,而是說操作系統(tǒng)在打包的時(shí)候,把所有內(nèi)核及rpm包都規(guī)范化,作為一個(gè)整體進(jìn)行升級(jí),回滾和運(yùn)維。
3、Container OS 容器操作系統(tǒng)
基于容器理念重新構(gòu)建操作系統(tǒng)。首先,基礎(chǔ)架構(gòu)不可變,提升一致性,將操作系統(tǒng)中各種非核心的功能全部剝離出來,比如說日志,監(jiān)控,還有很多其他一些工具,按需以容器的形式調(diào)度運(yùn)行,即run everything in container;其次,使用容器來運(yùn)行各種組件和workload,將底層核心功能的最大程度的標(biāo)準(zhǔn)化,通過配置文件提供一定的自定義能力。滿足這兩個(gè)最基本的特性,基本上就實(shí)現(xiàn)了基礎(chǔ)設(shè)施不可變。如圖下圖所示幾個(gè)比較知名的容器操作系統(tǒng):
4、Core OS及優(yōu)勢(shì)
幾乎所有的公有云廠商也快速跟進(jìn),可謂百花齊放百家爭(zhēng)鳴。2015年,紅帽提出Atomic原子操作系統(tǒng),希望解決容器運(yùn)行環(huán)境問題,簡(jiǎn)化底層操作系統(tǒng)的管理工作量。2018年,通過收購(gòu)合并CoreOS,統(tǒng)一了開源社區(qū)標(biāo)準(zhǔn),CoreOS與Atomic合并形成RHCOS。Atomic的優(yōu)勢(shì)是對(duì)各個(gè)硬件廠商驅(qū)動(dòng)的良好兼容性,CoreOS的優(yōu)勢(shì)是與Kubernetes集成,比如ignition點(diǎn)火安裝方式,基于etcd做多集群管理;Atomic和CoreOS的融合,基本上建立了一個(gè)在容器操作系統(tǒng)領(lǐng)域事實(shí)的標(biāo)準(zhǔn),構(gòu)建一個(gè)具備一致性、自維護(hù)、鏡像不可變、一鍵升級(jí)、一鍵倒回的特性容器操作系統(tǒng),簡(jiǎn)化底層基礎(chǔ)架構(gòu)復(fù)雜性。
5、總結(jié)
在開源領(lǐng)域,紅帽能勝出最大的原因是Linux內(nèi)核,硬件支持,開源項(xiàng)目的整合能力,開源生態(tài)和盈利的平衡。
對(duì)CoreOS容器操作系統(tǒng),有企業(yè)發(fā)行版RH CoreOS,還有社區(qū)發(fā)行版Fedora CoreOS,社區(qū)發(fā)行版內(nèi)核更新比較快,基本上跟Fedora linux內(nèi)核保持一致。
RH CoreOS發(fā)行版的內(nèi)核與RH Linux內(nèi)核保持一致,基本上等社區(qū)版運(yùn)行用戶反饋穩(wěn)定,完成QA測(cè)試,才會(huì)進(jìn)行發(fā)布。所以企業(yè)版比社區(qū)發(fā)行部相對(duì)更慢,功能更少,但是會(huì)更加穩(wěn)定且有廠家技術(shù)支持。涉及到CoreOS功能及驗(yàn)證基本上都是基于RH CoreOS的最新版。
同時(shí),CoreOS繼承RHEL8內(nèi)核新特性,諸如reflink功能(節(jié)省磁盤空間, cow機(jī)制)、eBPF、XDP(網(wǎng)絡(luò)加速)、CGROUPV2(實(shí)現(xiàn)更好的資源限制與隔離)、nft(更強(qiáng)大的防火墻工具)等新特性都可以直接使用。
本文轉(zhuǎn)載自微信公眾號(hào)「巨子嘉」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系巨子嘉公眾號(hào)。