生產(chǎn)環(huán)境 VS 開發(fā)環(huán)境,關(guān)于Kubernetes的四大認(rèn)識(shí)誤區(qū)
【編者的話】當(dāng)容器和Kubernetes的IT管理團(tuán)隊(duì)把本地變更部署在生產(chǎn)環(huán)境的時(shí)候,往往面對(duì)很多要學(xué)習(xí)的東西。
最近我們澄清了一些大家在進(jìn)行Kubernetes實(shí)驗(yàn)的時(shí)候所見到的常見的誤解。其中最大的一個(gè)誤解就是:在生產(chǎn)環(huán)境中運(yùn)行Kubernetes和開發(fā)測(cè)試環(huán)境并無(wú)兩樣。
答案:是不一樣的。
Avi Network公司的聯(lián)合創(chuàng)始人兼首席技術(shù)官Ranga Rajagopalan認(rèn)為:“對(duì)于Kubernetes,容器和微服務(wù)來(lái)說,實(shí)驗(yàn)環(huán)境和生產(chǎn)環(huán)境有巨大的不同。簡(jiǎn)單的運(yùn)行和安全、可靠的運(yùn)行是不一樣的”。
Ranga Rajagopalan的意見中有一個(gè)重要的論點(diǎn):上述問題不僅僅只是存在于Kubernetes,同樣也存在于容器和微服務(wù)。部署容器相對(duì)簡(jiǎn)單;而在生產(chǎn)環(huán)境運(yùn)維和縮放容器(包括容器化的微服務(wù))是問題復(fù)雜的原因。
容器和容器的編排工具通常都是成套出現(xiàn)的。New Stack公司之前進(jìn)行了一項(xiàng)調(diào)查,調(diào)查發(fā)現(xiàn)當(dāng)組織為了解決運(yùn)維所面對(duì)的挑戰(zhàn),去尋找更強(qiáng)大的技術(shù)的時(shí)候,容器反過來(lái)推動(dòng)了Kubernetes的普及。雖然也有其他的工具,Kubernetes還是快速成為了編排工具和選擇的代名詞。像Rajagopalan說的那樣,在沙箱里運(yùn)行Kubernetes和在生產(chǎn)環(huán)境中運(yùn)行Kubernetes有巨大的不同。
通常IT專業(yè)人士和團(tuán)隊(duì)運(yùn)維小規(guī)模的Kubernetes環(huán)境,當(dāng)這個(gè)環(huán)境轉(zhuǎn)向生產(chǎn)環(huán)境部署的時(shí)候,這些人將有很多東西需要面對(duì)和學(xué)習(xí)。“你肯定想在上生產(chǎn)環(huán)境之前掃清這些常見的誤解,這里有IT領(lǐng)導(dǎo)者和團(tuán)隊(duì)需要了解的知識(shí)”。
誤區(qū)1:在開發(fā)測(cè)試環(huán)境運(yùn)行Kubernetes能幫你全面了解運(yùn)維的需求
現(xiàn)實(shí):在開發(fā)測(cè)試環(huán)境運(yùn)行Kubernetes能幫你走一些捷徑,你可以不必面對(duì)生產(chǎn)環(huán)境所帶來(lái)的運(yùn)營(yíng)負(fù)載。
Wei Lien Dang, StackRox的產(chǎn)品副總裁認(rèn)為“開發(fā)測(cè)試環(huán)境和生產(chǎn)環(huán)境的最大不同源自于運(yùn)維和安全,在運(yùn)維測(cè)試環(huán)境你根本不用在乎集群宕機(jī)。”
Portworx的聯(lián)合創(chuàng)始人兼CEO Murli Thirumale將開發(fā)測(cè)試環(huán)境和生產(chǎn)環(huán)境的不同與敏捷和可靠,高性能的敏捷做了類比。
“開發(fā)團(tuán)隊(duì)的目標(biāo)是在開發(fā)和測(cè)試新應(yīng)用和代碼的時(shí)候?qū)崿F(xiàn)應(yīng)用的敏捷;而同時(shí)運(yùn)維人員的目標(biāo)是應(yīng)用和數(shù)據(jù)的可靠性,可伸縮性,安全性和性能。后者需要一個(gè)強(qiáng)大的,企業(yè)級(jí)的,經(jīng)過測(cè)試和驗(yàn)證的平臺(tái)。”
自動(dòng)化已經(jīng)成為了在生產(chǎn)環(huán)境中采用Kubernetes(或者通俗所說的容器)的迫切需求。
Coda Global的架構(gòu)師Ranjan Bhagitrathan認(rèn)為“生產(chǎn)集群必須通過自動(dòng)化部署。生產(chǎn)集群一定要具備可復(fù)制性,從而實(shí)現(xiàn)整體生產(chǎn)環(huán)境的一致性,同時(shí)可復(fù)制性也對(duì)災(zāi)難恢復(fù)有所幫助”。
Bhagitrathan同時(shí)也認(rèn)為版本控制對(duì)生產(chǎn)環(huán)境運(yùn)維至關(guān)重要,“對(duì)所有事情進(jìn)行版本控制,比如服務(wù)部署的配置文件,策略等等,如果可能也包括實(shí)現(xiàn)基礎(chǔ)架構(gòu)即代碼的代碼命令。這能確保你的環(huán)境是相同的。同時(shí)也要確保容器鏡像有版本控制,不要只是用“最新鏡像”這樣的名字來(lái)個(gè)鏡像打標(biāo)簽,這樣很容易引起混亂”。
誤區(qū)2:你已經(jīng)得到了可靠性和安全性
現(xiàn)實(shí):如果你只在非生產(chǎn)環(huán)境試驗(yàn)過Kubernetes。你可能沒獲得可靠性和安全性,或者目前沒有。
好消息是你最終會(huì)做到,因?yàn)樯仙a(chǎn)環(huán)境之前,需要做規(guī)劃和架構(gòu)設(shè)計(jì)。
AquaSecurity的聯(lián)合創(chuàng)始人兼 CTO Amir Jerbi認(rèn)為“很顯然,在生產(chǎn)環(huán)境,性能,可伸縮性,高可用性和安全性方面所面對(duì)的挑戰(zhàn)更嚴(yán)峻。所以在架構(gòu)階段規(guī)劃生產(chǎn)環(huán)境需求,并且把安全,伸縮控制,Helm charts集成在Kubernetes部署的定義中是極為重要的”。
Dang分享了一個(gè)測(cè)試開發(fā)環(huán)境如何導(dǎo)致過度自信的例子:
“在測(cè)試開發(fā)環(huán)境中開放所有的網(wǎng)絡(luò)端口是非常不錯(cuò)的,很可能所有的服務(wù)都能互相連接。Kubernetes默認(rèn)設(shè)置所有網(wǎng)絡(luò)連接開放。但這不是一個(gè)成熟生產(chǎn)環(huán)境所應(yīng)有的設(shè)置,一旦步入生產(chǎn)階段,停機(jī)和大規(guī)模攻擊會(huì)給業(yè)務(wù)帶來(lái)風(fēng)險(xiǎn)“。
“當(dāng)工作轉(zhuǎn)移到容器和微服務(wù)的時(shí)候,構(gòu)建高可靠,高可用的系統(tǒng)是非常有價(jià)值的工作。編排工具幫你實(shí)現(xiàn)這部分工作,但這并不舉手可得。安全性也是一樣。”
“我們要做很多事情來(lái)減少針對(duì)Kubernetes的攻擊,通過加強(qiáng)網(wǎng)絡(luò)策略來(lái)實(shí)施最低權(quán)限模型,并且限制服務(wù)只和需要的服務(wù)連接是非常關(guān)鍵的。”
在生產(chǎn)環(huán)境中,容器鏡像的安全漏洞可以很快變的很嚴(yán)重,威脅可能是受限的或者根本不在本地。(whereas the threat may be limited or non-existent locally.)
Bhagirathan說,“要注意你的容器鏡像采用的基礎(chǔ)鏡像是什么,盡可能用受信任的官方鏡像或者自己動(dòng)手制作。用未知的鏡像也許可以幫你很快的跑起服務(wù),但也帶來(lái)了安全問題。比如,你肯定不想你的Kubernetes系統(tǒng)給別人挖比特幣做貢獻(xiàn)。”
紅帽公司的安全策略師Kirsten Newcomer鼓勵(lì)人們通過10個(gè)層次來(lái)考慮容器安全——包括容器堆棧層(比如容器主機(jī)和注冊(cè)),容器生命周期(API管理)。有關(guān)10層的細(xì)節(jié)信息以及如何應(yīng)用在Kubernetes這樣的容器編排工具,請(qǐng)參閱Newcomer的播客或者白皮書:https://www.redhat.com/en/enga ... yaAAA。
誤區(qū)3:編排工具讓縮放變得易如反掌
事實(shí):雖然很多軟件專業(yè)人士都認(rèn)為Kubernetes這樣的容器編排引擎對(duì)于容器擴(kuò)展性來(lái)說是必不可少的,但是認(rèn)為編排工具能立即讓縮放變得簡(jiǎn)單是錯(cuò)誤的,特別是當(dāng)你第一次在生產(chǎn)環(huán)境中使用它時(shí)。
Sumo Logic公司的高級(jí)技術(shù)產(chǎn)品經(jīng)理Frank Reno認(rèn)為“自動(dòng)縮放改變了一切,數(shù)據(jù)越來(lái)越大,你的監(jiān)控系統(tǒng)需要根據(jù)數(shù)據(jù)量來(lái)擴(kuò)展。在生產(chǎn)環(huán)境運(yùn)行之前,Kubernetes的所有組件都不能被很好的了解。畢竟確保Kubernetes系統(tǒng)的健康運(yùn)行,API服務(wù)器和其他控制組件能根據(jù)需求縮放而不是自動(dòng)的。”
開發(fā)和測(cè)試環(huán)境讓事情變得過于簡(jiǎn)單,而真正的環(huán)境需要這樣,或那樣的需求,并且需要一直維護(hù)。
“在開發(fā)測(cè)試環(huán)境可以非常簡(jiǎn)單跳過一些基礎(chǔ)設(shè)置,比如確保你能用到特定的資源,并且限制請(qǐng)求,”Reno說,“如果在生產(chǎn)環(huán)境不這樣設(shè)置,你的好日子就算到頭了。”
向上或向下擴(kuò)展群集是一個(gè)很好的例子,當(dāng)你在本地進(jìn)行實(shí)驗(yàn)時(shí),它可能看起來(lái)很簡(jiǎn)單,但在生產(chǎn)環(huán)境中縮放變得明顯更具挑戰(zhàn)性。
“生產(chǎn)集群,與開發(fā)或模擬集群相反,在擴(kuò)展方面會(huì)遇到更多的痛點(diǎn),”WhiteSource的首席執(zhí)行官Rami Sass說。 “盡管應(yīng)用程序的橫向擴(kuò)展在Kubernetes中非常簡(jiǎn)單,但DevOps[團(tuán)隊(duì)]還需要考慮其它方面,特別是保持服務(wù)在線的同時(shí)擴(kuò)展基礎(chǔ)架構(gòu)。重要的是確保主要服務(wù),負(fù)責(zé)漏洞和安全的報(bào)警系統(tǒng)分布在群集的節(jié)點(diǎn)上,并使之有狀態(tài),這樣在向下擴(kuò)展時(shí)不會(huì)丟失任何數(shù)據(jù)。”
和其它挑戰(zhàn)一樣,這是合理規(guī)劃和利用資源的問題。
“了解你的縮放需求,為它們做計(jì)劃,更重要的是:做測(cè)試!” Coda Global公司的Bhagirathan提出了建議。“你的生產(chǎn)環(huán)境應(yīng)該能承擔(dān)更高的負(fù)荷”。
誤區(qū)4:Kubernetes在哪運(yùn)行都沒區(qū)別
現(xiàn)實(shí):正如同在開發(fā)人員的筆記本上運(yùn)行Kubernetes和生產(chǎn)環(huán)境中運(yùn)行Kubernetes有區(qū)別一樣,環(huán)境會(huì)導(dǎo)致差別。
“一個(gè)常見的誤解是(假設(shè))Kubernetes在本地運(yùn)行正常,那么它可以在任何地方正常工作,”Bitnami的首席執(zhí)行官兼聯(lián)合創(chuàng)始人Daniel Lopez說道,他用云平臺(tái)之間的差異來(lái)應(yīng)證這個(gè)假設(shè)的是錯(cuò)誤的。 “雖然Kubernetes如果能夠有效地提供一致的環(huán)境,但供應(yīng)商之間仍存在顯著差異 。”
Lopez還指出,生產(chǎn)環(huán)境的部署需要那些不只作用于本地的組件,比如監(jiān)控,日志和證書管理,以及憑據(jù)。你需要考慮這些因素,這也是導(dǎo)致開發(fā)/測(cè)試和生產(chǎn)環(huán)境之間差距擴(kuò)大的關(guān)鍵問題之一。
這也是綜合性問題,不僅Kubernetes需要考慮,也包括容器和微服務(wù),更廣泛的來(lái)說,在混合云和多云環(huán)境也需要考慮。
“公共 - 私有部署比紙面上看起來(lái)更棘手,因?yàn)樵S多必要的服務(wù),如負(fù)載平衡和防火墻,都是專有的。 在實(shí)驗(yàn)室中運(yùn)行良好的容器在具有不同工具的云環(huán)境中運(yùn)行可能根本不工作——或者至少不安全 ,”Avi Networks的Rajagopalan說。 “這就是為什么像Istio這樣的服務(wù)網(wǎng)格技術(shù)受到如此多關(guān)注的原因。 不管容器運(yùn)行在哪,他們都提供相同的應(yīng)用程序服務(wù),因此你不必考慮基礎(chǔ)架構(gòu)——這是容器最重要的一點(diǎn)”。