用于Kubernetes的Linux操作系統(tǒng)是怎么樣的,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
站在用戶的角度思考問題,與客戶深入溝通,找到寧河網(wǎng)站設(shè)計(jì)與寧河網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋寧河地區(qū)。
你已經(jīng)了解過Kubernetes了(或正在考慮探索一些Kubernetes部署)。了解它有很多很好的理由,你可能已經(jīng)很清楚,Kubernetes是負(fù)責(zé)管理容器,將工作負(fù)載調(diào)度到集群上,處理可伸縮性和冗余,自動(dòng)執(zhí)行滾動(dòng)(更新)和回滾。它是一個(gè)與基礎(chǔ)設(shè)施無關(guān)的系統(tǒng),通過使用聲明式語句來描述系統(tǒng)和應(yīng)用應(yīng)處于的狀態(tài),并驅(qū)動(dòng)所托管的元素達(dá)到該狀態(tài)。這樣子使管理功能強(qiáng)大且可擴(kuò)展的系統(tǒng)變得更加容易。當(dāng)然,這里所說的“易于管理”有一定的學(xué)習(xí)曲線,但是為了獲得現(xiàn)代基于容器的軟件開發(fā)的好處,即提供可擴(kuò)展性和基礎(chǔ)架構(gòu)可移植性的基礎(chǔ)架構(gòu),這是非常值得的。
雖然Kubernetes確實(shí)可以實(shí)現(xiàn)容器的操作可擴(kuò)展性和管理,但它并不直接幫你管理Kubernetes本身所依賴的基礎(chǔ)設(shè)施。Kubernetes本身就是一個(gè)應(yīng)用(或者說是一組應(yīng)用),這些應(yīng)用需要在某處運(yùn)行起來。盡管你可能聽過,Kubernetes它不是個(gè)操作系統(tǒng),但仍依賴于要安裝在節(jié)點(diǎn)上的Linux或Windows系統(tǒng)。Kubernetes可以在例如AWS或GCE這類云服務(wù)商,或者是VMware這類虛擬化平臺(tái)上運(yùn)行,但所有這些仍然需要首先安裝操作系統(tǒng)。(某些例如AWS EKS無需管理控制平面節(jié)點(diǎn),但仍需要為工作節(jié)點(diǎn)設(shè)置Linux服務(wù)器。)
在操作上,重點(diǎn)是Kubernetes和它運(yùn)行的工作負(fù)載,這本該如此,但這會(huì)導(dǎo)致一個(gè)在Kubernetes部署上常見的問題。雖然Kubernetes會(huì)定期打補(bǔ)丁和升級(jí),但是關(guān)于底層操作系統(tǒng)的維護(hù),更新,安全和操作往往被遺忘或忽視,至少在安全審計(jì)之前是這樣的。我經(jīng)常聽SRE和系統(tǒng)管理員說,要同時(shí)管理Linux和Kubernetes,這導(dǎo)致額外的工作。就像一般的Linux操作系統(tǒng)一樣,Kubernetes也需要打補(bǔ)丁、更新、保護(hù)和控制用戶訪問等等。但是,僅僅因?yàn)檫@些任務(wù)是在Kubernetes級(jí)別上完成的,并不意味著它們?cè)诓僮飨到y(tǒng)級(jí)別上可被忽略。不過,選擇合適的底層操作系統(tǒng)發(fā)行版,可以在很大程度上減少維護(hù)操作系統(tǒng)的工作量,減輕不及時(shí)更新的影響。
因此,考慮到你需要先安裝Linux才能在其上運(yùn)行Kubernetes,這將涉及底層的操作系統(tǒng),你應(yīng)該選擇運(yùn)行哪個(gè)Linux發(fā)行版呢?可選的方案有很多,但它們通常分為兩種,即容器優(yōu)化的操作系統(tǒng),或通用的操作系統(tǒng)。
通用Linux操作系統(tǒng)
這些是正常類型的Linux。
大部分人都熟悉運(yùn)行通用類型Linux操作系統(tǒng),例如Ubuntu、Debian、CentOS、RHEL或是Fedora。這是在Kubernetes集群中運(yùn)行通用操作系統(tǒng)的主要優(yōu)勢之一,你的系統(tǒng)管理員將熟悉如何安裝、更新和加固你的Linux發(fā)行版??梢允褂矛F(xiàn)有的工具集來啟動(dòng)服務(wù)器,安裝操作系統(tǒng),并將其配置為基本的安全級(jí)別?,F(xiàn)有的補(bǔ)丁管理和安全檢測工具應(yīng)該可以在這些系統(tǒng)上正常運(yùn)行,即使在其上運(yùn)行Kubernetes。
然而……
使用通用類型Linux系統(tǒng),隨之而來的是常見的Linux管理開銷。這意味著用戶賬號(hào)管理,補(bǔ)丁管理,內(nèi)核更新,服務(wù)防火墻,SSH安全,禁止root登陸,禁用未使用的守護(hù)進(jìn)程,內(nèi)核調(diào)優(yōu)等等,都需要完成并保持最新。如前所述,這些任務(wù)中的大部分可以使用現(xiàn)有的工具例如Ansible,Chef,Puppet來完成,然而,更新清單或控制文件,使服務(wù)器配置文件適合Kubernetes主節(jié)點(diǎn)和工作節(jié)點(diǎn),可以說并非易事。
另一個(gè)問題是操作系統(tǒng)更改與Kubernetes維護(hù)的協(xié)調(diào)。經(jīng)常會(huì)出現(xiàn)不協(xié)調(diào)的情況,以至于在安裝后操作系統(tǒng)仍保持原樣。隨著時(shí)間的推移,Kubernetes會(huì)(希望)升級(jí),但底層的操作系統(tǒng)仍可能保持原樣,慢慢地在各種包和已安裝的內(nèi)核中積累了已知的CVE(常見的漏洞和暴露)的負(fù)擔(dān)。
理想情況下,你希望自動(dòng)化平臺(tái)(如Ansible或Puppet)與Kubernetes進(jìn)行協(xié)調(diào),以便可以在不影響Kubernetes操作的情況下升級(jí)節(jié)點(diǎn)的操作系統(tǒng)。這意味著操作系統(tǒng)需要:
設(shè)置節(jié)點(diǎn)為不可調(diào)度以便新工作負(fù)載不會(huì)調(diào)度到該節(jié)點(diǎn)上
驅(qū)逐該節(jié)點(diǎn)以讓所有運(yùn)行的Pod移動(dòng)到其他節(jié)點(diǎn)
更新并給節(jié)點(diǎn)打補(bǔ)丁
設(shè)置節(jié)點(diǎn)為可調(diào)度
當(dāng)然,該系統(tǒng)需要保證在同一時(shí)刻不會(huì)有過多的節(jié)點(diǎn)在更新,以保證集群的工作負(fù)載能力不會(huì)受到負(fù)面影響(節(jié)點(diǎn)也不要太少,以免大型集群的更新速度慢于補(bǔ)丁和更新的發(fā)布速度)。你可能希望協(xié)調(diào)操作系統(tǒng)更新與Kubernetes更新,以減少重啟和中斷,但你仍然需要在短時(shí)間內(nèi)支持更關(guān)鍵的操作系統(tǒng)更新。
通用類型Linux操作系統(tǒng)的最大優(yōu)勢是工作人員對(duì)它的熟悉程度。這意味著他們將熟悉部署,同時(shí)也具備排障技術(shù)。他們可以安裝并使用常用的操作系統(tǒng)工具例如tcpdump、strace、lsof等等。配置可以很輕易地更改,以糾正錯(cuò)誤和測試替代方案(這既是好事,同時(shí)也是壞事!)缺點(diǎn)是需要保持系統(tǒng)管理的開銷,以及需要與Kubernetes基礎(chǔ)設(shè)施和操作協(xié)調(diào)更新。
容器專用操作系統(tǒng)
美國國家標(biāo)準(zhǔn)與技術(shù)研究所(NIST)關(guān)于定義容器專用的操作系統(tǒng)有一個(gè)很好的總結(jié),列出了一些優(yōu)點(diǎn)。
“容器專用主機(jī)操作系統(tǒng)是一種明確設(shè)計(jì)為只運(yùn)行容器的極簡主義操作系統(tǒng),其禁用了所有其他服務(wù)和功能,并采用只讀文件系統(tǒng)和其他加固做法。當(dāng)采用容器專用操作系統(tǒng),攻擊面通常要比通用類型操作系統(tǒng)小得多,因此攻擊和破壞容器專用主機(jī)操作系統(tǒng)的機(jī)會(huì)較少。綜上,如果可以,各個(gè)組織都應(yīng)盡可能使用容器專用主機(jī)操作系統(tǒng)。”引自“NIST Special Publication 800-190 Application Container Security Guide”
總結(jié)一下,顯而易見的一點(diǎn)就是,操作系統(tǒng)運(yùn)行的軟件和包越少,攻擊面越小,漏洞也越少。這讓容器專用操作系統(tǒng)從一開始就明顯更安全,即使缺少頻繁打補(bǔ)丁。
容器專用操作系統(tǒng)也可以采用其他的安全方式,例如將根文件系統(tǒng)(最好是所有文件系統(tǒng))設(shè)為只讀,減輕任何漏洞可能帶來的影響。
容器專用操作系統(tǒng)通常不運(yùn)行(或不支持)包管理。這減少了安裝或更新包引起沖突導(dǎo)致節(jié)點(diǎn)或服務(wù)停止運(yùn)行的機(jī)會(huì)。由于沒有Chef和Puppet等管理工具,運(yùn)行不完整對(duì)系統(tǒng)運(yùn)行穩(wěn)定性造成不利影響的機(jī)會(huì)減少。取而代之的是,一個(gè)應(yīng)用了所有更新和配置的完整的操作系統(tǒng)鏡像被安裝在一個(gè)備用的啟動(dòng)機(jī)制中,并在下一次重啟時(shí)被啟動(dòng),或回退到之前已知的工作良好的鏡像。這意味著,節(jié)點(diǎn)的配置在任何時(shí)候都是完全已知的,任何版本都可以從使用的版本控制系統(tǒng)中還原。
一些容器專用的操作系統(tǒng)更像通用Linux發(fā)行版,例如VMware公司的PhotonOS與普通Linux發(fā)行版相比,安裝的包數(shù)量較少,但仍然包括包管理器、SSH訪問,并且不會(huì)將文件系統(tǒng)掛載為只讀。人們有時(shí)會(huì)困惑的一點(diǎn)是,通用Linux系統(tǒng)的“云優(yōu)化”版本仍然是通用Linux系統(tǒng),如Ubuntu發(fā)布的“云鏡像”,是“由Ubuntu工程部門定制的,可以在公共云上運(yùn)行”。然而,這些仍然是完整的Linux發(fā)行版,安裝了所有的包,只是多了一個(gè)cloud-init包,這樣可以更容易地配置啟動(dòng),而無需人工干預(yù)。
CoreOS是第一個(gè)被普遍采用的容器專用操作系統(tǒng),并普及了在容器中運(yùn)行所有進(jìn)程以提高安全性和隔離性的理念。CoreOS取消了軟件包管理器,并使用重啟到兩個(gè)只讀/usr分區(qū)中的一個(gè),以確保更新是原子的,并可以回滾。不過自從CoreOS被RedHat收購后,該項(xiàng)目就被終結(jié)了。
當(dāng)前的容器專用操作系統(tǒng)都采用最小的姿態(tài)(在操作系統(tǒng)中安裝的軟件包很少);鎖定(在一定程度上);在容器中運(yùn)行進(jìn)程(為了更好的安全性、穩(wěn)定性和服務(wù)隔離),并提供原子更新(通過啟動(dòng)到一個(gè)可啟動(dòng)分區(qū),并更新另一個(gè)分區(qū))。這樣的例子有:
Google的Container-Optimized OS,支持只讀的根文件系統(tǒng),但允許SSH,且只在GCP中運(yùn)行。
RancherOS,其運(yùn)行SSH,不使用只讀文件系統(tǒng)來保護(hù)根分區(qū)
K3OS,也是由Rancher開發(fā)的,但沒有運(yùn)行完整的Kubernetes發(fā)行版。管理是通過kubectl,但支持SSH。
AWS Bottlerocket是另一個(gè)具有不可改變的根文件系統(tǒng)和支持SSH的操作系統(tǒng),也就是至少在初期,它專注于AWS的工作負(fù)載。
Talos是一個(gè)例外,它是容器專用操作系統(tǒng)中意見最大的一個(gè)。和其他系統(tǒng)一樣,Talos操作系統(tǒng)也是最小化的,沒有包管理器,只使用只讀文件系統(tǒng)(除了/var和/etc/kubernetes,以及一兩個(gè)短暫可寫(重啟時(shí)重置)的特殊文件,如/etc/resolv.conf),并通過升級(jí)控制器與K8s集成升級(jí)。
然而,Talos操作系統(tǒng)比其他系統(tǒng)更進(jìn)一步地提出了不可變基礎(chǔ)設(shè)施的理念,它取消了所有SSH和控制臺(tái)訪問,并使所有的OS訪問和管理通過API驅(qū)動(dòng)。在運(yùn)行Kubernetes的節(jié)點(diǎn)上,你想做的所有事情都有API調(diào)用,查看所有的容器,檢查網(wǎng)絡(luò)設(shè)置等。但在節(jié)點(diǎn)上你沒辦法做不該做的事情,比如卸載文件系統(tǒng)。Talos還選擇完全重寫Linux Init系統(tǒng),它只做一件事,那就是啟動(dòng)Kubernetes。
不能管理任何用戶定義的服務(wù)(這些都應(yīng)該通過Kubernetes管理),這進(jìn)一步提高了安全性(沒有SSH,沒有控制臺(tái)),減少了維護(hù)(沒有用戶,沒有補(bǔ)丁),降低了任何CVE的影響(因?yàn)槲募到y(tǒng)是不可變的,是短暫的)。你可能不同意放棄SSH訪問,限制SRE的動(dòng)作,強(qiáng)迫節(jié)點(diǎn)完全不可變的觀點(diǎn)是可取的,但這也是不久前反對(duì)不可變?nèi)萜鞯恼擖c(diǎn),這值得探究。擁有一個(gè)API管理的操作系統(tǒng)也非常適合大規(guī)模的操作和管理,如果你需要檢查一個(gè)節(jié)點(diǎn)、一類節(jié)點(diǎn)或者所有節(jié)點(diǎn)上的某個(gè)容器的日志,那就是使用不同參數(shù)的同一個(gè)API調(diào)用而已。
總結(jié)
如果你已經(jīng)采用了容器管理是“牛而非寵物(即生產(chǎn)軟件基礎(chǔ)設(shè)施可隨時(shí)替換)”的觀點(diǎn),即在部署更新或修復(fù)時(shí),銷毀容器并啟用一個(gè)新版本,那么確保對(duì)支持容器的基礎(chǔ)設(shè)施采用同樣的方法是有意義的。采用類似于容器的管理模式,銷毀和重新配置節(jié)點(diǎn)以進(jìn)行更新,而不是打補(bǔ)丁,這可能需要一些培訓(xùn),但是采用容器專用的操作系統(tǒng)有助于采用這種模式,減少管理開銷,并提高安全性。容器專用操作系統(tǒng)還有助于提高運(yùn)行穩(wěn)定性,系統(tǒng)管理員或開發(fā)人員無需更改配置以使其工作,從而消除了人為錯(cuò)誤或錯(cuò)誤配置導(dǎo)致下一次升級(jí)失敗的可能性。
鑒于許多企業(yè)仍處于Kubernetes采用生命周期的早期,現(xiàn)在是熟悉這個(gè)下一代操作系統(tǒng)的好時(shí)機(jī)。通過將操作系統(tǒng)與Kubernetes緊密結(jié)合在一起,可以將整個(gè)Kubernetes集群作為一臺(tái)計(jì)算機(jī)來對(duì)待,減少開銷,并促進(jìn)增強(qiáng)安全性。這讓人們的注意力仍然集中在計(jì)算基礎(chǔ)設(shè)施所提供的工作負(fù)載和價(jià)值上,是向API驅(qū)動(dòng)的數(shù)據(jù)中心邁出的又一步。
看完上述內(nèi)容,你們掌握用于Kubernetes的Linux操作系統(tǒng)是怎么樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!