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