為什么你的創(chuàng)業(yè)公司應(yīng)該運(yùn)行在Kubernetes上

輪船上的集裝箱

從2019年初開(kāi)始差油,就有不少創(chuàng)業(yè)公司陸陸續(xù)續(xù)向我咨詢Kubernetes等云原生技術(shù)。

我總是會(huì)問(wèn)這些創(chuàng)業(yè)公司的部署流程是怎樣的,因?yàn)檫@能讓我大概了解到一個(gè)公司的技術(shù)復(fù)雜度處在哪個(gè)階段。有些公司僅僅使用scp部署簡(jiǎn)單的PHP應(yīng)用程序,就能讓公司走的很遠(yuǎn)驰怎,而有些公司的架構(gòu)達(dá)到極限,不得不使用諸如Redis或者Kafka這樣的基礎(chǔ)組件作為內(nèi)部通信二打,從而將系統(tǒng)拆分為不同的服務(wù)县忌。

當(dāng)他們知道我的履歷里有Kubernetes的相關(guān)實(shí)戰(zhàn)經(jīng)驗(yàn)后,便總會(huì)問(wèn)起它。大多數(shù)公司對(duì)上手Kubernetes很感興趣芹枷,但同時(shí)也對(duì)Kubernetes是否適用于特定的用例表示出了擔(dān)心衅疙。我在上一家公司是怎樣使用它的?學(xué)習(xí)它困難嗎鸳慈?開(kāi)發(fā)團(tuán)隊(duì)有哪些使用它的經(jīng)驗(yàn)饱溢?

當(dāng)然,有時(shí)候一些關(guān)于實(shí)施不當(dāng)?shù)目膳鹿适聲?huì)使他們擔(dān)心遷移到Kubernetes是一個(gè)錯(cuò)誤走芋。經(jīng)常聽(tīng)到一些非常合理的懷疑绩郎,同時(shí)又希望部署更加簡(jiǎn)單但又猶豫不決已經(jīng)成為一種常態(tài)。

所以這里我直接切入重點(diǎn)翁逞±哒龋基于我已經(jīng)在兩家非常不同的公司使用了Kubernetes,如果我今天從頭開(kāi)始做一家創(chuàng)業(yè)公司挖函,我極有可能從Kubernetes開(kāi)始状植。這是我的結(jié)論。

簡(jiǎn)而言之怨喘,運(yùn)用Kubernetes帶來(lái)的積極因素遠(yuǎn)遠(yuǎn)超過(guò)了少數(shù)不利因素津畸。我認(rèn)為它值得許多創(chuàng)業(yè)公司的投資。并非所有的創(chuàng)業(yè)公司必怜,也不一定是你的公司肉拓,但是一定有很多這樣的公司

讓我們來(lái)看一下幾點(diǎn)原因梳庆。

什么是Kubernetes

Kubernetes最初是由Google開(kāi)發(fā)的開(kāi)源容器編排系統(tǒng)宾尚,后來(lái)被貢獻(xiàn)給了開(kāi)源社區(qū)膛薛,目前有大量新的第三方庫(kù)和插件(術(shù)語(yǔ)叫做operators)嗦锐。

Kubernetes不是像阿里云或者騰訊云這樣的云平臺(tái)勾扭,事實(shí)上笙各,你可以在自己的數(shù)據(jù)中心冲呢,硬件上運(yùn)行和部署Kubernetes尊沸,不過(guò)我不建議初學(xué)者使用科盛。它更像是一種用來(lái)描述工作系統(tǒng)的語(yǔ)言抱环。一旦我們對(duì)系統(tǒng)進(jìn)行了足夠詳細(xì)的描述壳快,Kubernetes便可以使用其計(jì)算資源(Kubernetes的術(shù)語(yǔ)是nodes)來(lái)執(zhí)行系統(tǒng)的容器。

對(duì)于初創(chuàng)公司來(lái)說(shuō)镇草,最大的好處就是眶痰,這種“描述工作系統(tǒng)”的過(guò)程可作為文檔和代碼的集中位置來(lái)定義基礎(chǔ)架構(gòu)

Kubernetes 為自己付費(fèi)

我不想撒謊梯啤,像AWS或者阿里云的Kubernetes容器服務(wù)目前價(jià)格偏高竖伯,除了最少3到5個(gè)實(shí)例節(jié)點(diǎn)外,還需要一部分管理費(fèi)。但是請(qǐng)考慮你要花多少錢才能讓工程師手動(dòng)啟動(dòng)節(jié)點(diǎn)七婴。這些純粹的基礎(chǔ)架構(gòu)變更所浪費(fèi)的時(shí)間僅僅是在開(kāi)發(fā)產(chǎn)品上花費(fèi)的時(shí)間祟偷。如果你是一家想實(shí)現(xiàn)下一個(gè)更大目標(biāo)的公司,你應(yīng)該樂(lè)于付出合理的開(kāi)銷打厘,以神奇的方式消除團(tuán)隊(duì)中容易出錯(cuò)且耗時(shí)的過(guò)程修肠。

使用現(xiàn)成的Terraform工具,你還可以通過(guò)簡(jiǎn)單的單行更改創(chuàng)建一個(gè)可以擴(kuò)展的集群户盯。在我的上一個(gè)團(tuán)隊(duì)嵌施,我們僅僅通過(guò)將Git提交命令從2改到4,就將集群從2個(gè)節(jié)點(diǎn)增長(zhǎng)到了四個(gè)節(jié)點(diǎn)莽鸭。添加節(jié)點(diǎn)后吗伤,Kubernetes會(huì)自動(dòng)將資源移動(dòng)到新的節(jié)點(diǎn)上,不需要進(jìn)一步的工作硫眨。然后你可以繼續(xù)解決工作中的實(shí)際問(wèn)題足淆。

部署簡(jiǎn)單

傳統(tǒng)的Linux生產(chǎn)系統(tǒng)通常看起來(lái)像這樣:你有一些用Java礁阁,Python或Ruby編寫的代碼缸浦。應(yīng)用程序代碼通常由不太了解服務(wù)器的人編寫(或者至少?zèng)]有服務(wù)器的實(shí)踐經(jīng)驗(yàn))。

假設(shè)你有一臺(tái)機(jī)器在阿里云ECS中氮兵,由你的運(yùn)營(yíng)團(tuán)隊(duì)中的某人管理裂逐,該人不太了解應(yīng)用程序代碼。當(dāng)應(yīng)用程序團(tuán)隊(duì)完成某些工作時(shí)泣栈,他們希望能夠部署這些更改卜高。運(yùn)維團(tuán)隊(duì)希望確保所做的更改不會(huì)破壞任何系統(tǒng)的內(nèi)容。

你也不希望系統(tǒng)在部署期間離線南片。如果出現(xiàn)問(wèn)題掺涛,你希望能夠回滾到以前的代碼版本。從上載資產(chǎn)到啟動(dòng)服務(wù)器的部署過(guò)程需要30分鐘怎么辦疼进?難道要將系統(tǒng)離線30分鐘嗎薪缆?可能不會(huì)。你可能會(huì)想出一些系統(tǒng)來(lái)保持版本n-1的運(yùn)行伞广,直到版本n啟動(dòng)為止拣帽,此時(shí)你將切換到新版本。

這聽(tīng)起來(lái)確實(shí)有點(diǎn)復(fù)雜嚼锄,有很多要記住的地方减拭,還有很多可能出錯(cuò)的地方。這些部署規(guī)則會(huì)用一系列腳本進(jìn)行編寫区丑,這些腳本需要進(jìn)行版本控制和維護(hù)拧粪,并且很可能本身包含錯(cuò)誤修陡。而且,當(dāng)我們將公司擴(kuò)展為各個(gè)獨(dú)立的團(tuán)隊(duì)時(shí)可霎,他們所有人都可能一天多次部署魄鸦。然后噩夢(mèng)就開(kāi)始了。運(yùn)維團(tuán)隊(duì)開(kāi)始對(duì)系統(tǒng)中的客戶流失感到不知所措癣朗。隨著過(guò)程變得越來(lái)越繁瑣号杏,部署花費(fèi)的時(shí)間也越來(lái)越長(zhǎng)。

這個(gè)故事聽(tīng)起來(lái)很熟悉嗎斯棒?

Kubernetes消除了很多復(fù)雜性盾致。要部署新版本的服務(wù),我們可以簡(jiǎn)單地更新容器鏡像以指向新版本的代碼荣暮。我們還可以定義運(yùn)行狀況檢查庭惜,以在宣布新版本正常運(yùn)行之前執(zhí)行該檢查。如果未通過(guò)穗酥,則舊版本的代碼將繼續(xù)運(yùn)行护赊。

我們可以使用僅供內(nèi)部使用的DNS名稱(例如order_service)定義服務(wù),該名稱將自動(dòng)平衡正在運(yùn)行的副本的負(fù)載砾跃。無(wú)需維護(hù)運(yùn)行實(shí)例的列表骏啰。并且,如果我們?cè)诓渴鸷蟀l(fā)現(xiàn)問(wèn)題抽高,則可以使用簡(jiǎn)單的回滾命令查找先前的容器鏡像并將其應(yīng)用判耕。通常這只需要幾秒鐘,然后我們回到運(yùn)行軟件的最新已知穩(wěn)定版本翘骂。

聽(tīng)起來(lái)不是很好嗎壁熄?

你不需要一支完成所有任務(wù)的運(yùn)維團(tuán)隊(duì)

Kubernetes本身是個(gè)很復(fù)雜的系統(tǒng)。但是碳竟,任何經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員都可以使用它草丧。這是因?yàn)椋琄ubernetes部署不是使用一系列復(fù)雜的bash腳本莹桅,特殊的部署工具等昌执,而是通過(guò)簡(jiǎn)單的聲明性YAML文件進(jìn)行管理。使用Kubernetes時(shí)诈泼,你需要了解的就是Ruby發(fā)燒友倡導(dǎo)的簡(jiǎn)單XML替換懂拾。

僅使用YAML,我們就可以定義具有自動(dòng)縮放厂汗,復(fù)制和服務(wù)解析的整個(gè)工作系統(tǒng)委粉。然后使用kubectl CLI工具呜师,我們可以要求集群運(yùn)行我們的配置娶桦。我們永遠(yuǎn)不會(huì)直接告訴Kubernetes做任何事情。相反,它將讀取我們的聲明性YAML并解釋需要執(zhí)行的操作衷畦。你認(rèn)為您的開(kāi)發(fā)人員可以弄清楚如何編寫YAML嗎栗涂?

我在一些復(fù)雜的系統(tǒng)上工作過(guò),這些系統(tǒng)要求管理部署的人員了解a)Python祈争,b)Bash斤程,c)我們正在運(yùn)行的OS版本的一些細(xì)微差別,d)JVM標(biāo)志菩混,e) SCP命令(您可以在不查看文檔的情況下編寫有效的SCP命令嗎忿墅?)……等等。

還有一些組織開(kāi)銷沮峡。部署腳本和基礎(chǔ)結(jié)構(gòu)代碼通常由運(yùn)維團(tuán)隊(duì)管理疚脐。但是開(kāi)發(fā)人員經(jīng)常需要更改部署代碼,例如邢疙,在啟動(dòng)時(shí)設(shè)置標(biāo)志棍弄,并擴(kuò)大系統(tǒng)規(guī)模。這在開(kāi)發(fā)人員和操作人員之間造成了緊張關(guān)系疟游,因?yàn)檫@兩個(gè)團(tuán)隊(duì)之間產(chǎn)生了彼此的要求呼畸,但往往會(huì)遵循不同的目標(biāo)。

所有的這些復(fù)雜性會(huì)增加你在啟動(dòng)過(guò)程中的開(kāi)銷颁虐。如果你想快速開(kāi)發(fā)新功能并且能夠輕松地從一個(gè)項(xiàng)目跳到另一個(gè)項(xiàng)目蛮原,想保持盡可能小的摩擦。 那么Kubernetes消除了很多痛苦另绩,讓你專注于產(chǎn)品瞬痘。

你可能不需要Kubernetes的情況

當(dāng)然這個(gè)世界上沒(méi)有靈丹妙藥,而且在某些情況下板熊,像Kubernetes這樣的東西有點(diǎn)過(guò)于龐大框全。

1.簡(jiǎn)單的WordPress網(wǎng)站,CMS等

如果你只是運(yùn)行WordPress干签,則不需要Kubernetes津辩。如果你運(yùn)行的CMS只是偶爾進(jìn)行一次升級(jí),升級(jí)庫(kù)或安裝插件容劳,而實(shí)際上從未真正部署過(guò)喘沿,則不需要Kubernetes。Kubernetes確實(shí)是針對(duì)管理大型竭贩,不斷變化的系統(tǒng)進(jìn)行了優(yōu)化蚜印。

2.嵌入式系統(tǒng),任何需要訪問(wèn)真實(shí)操作系統(tǒng)的東西

顯然留量,如果你要編寫需要與Linux內(nèi)核接口的底層嵌入式系統(tǒng)或軟件窄赋,那么Kubernetes不適合你哟冬。這適用于任何容器化解決方案。

3.你的產(chǎn)品主要是數(shù)據(jù)庫(kù)

Kubernetes確實(shí)有一種稱為“狀態(tài)集”的資源類型忆绰,旨在運(yùn)行諸如數(shù)據(jù)庫(kù)和管理狀態(tài)的消息代理之類的東西浩峡。從理論上講,運(yùn)行有狀態(tài)集可以允許您運(yùn)行多個(gè)副本并上下縮放它們错敢,以及附加和擴(kuò)展存儲(chǔ)翰灾。但是這樣做總是讓我有些緊張。借助應(yīng)用程序服務(wù)稚茅,我希望使開(kāi)發(fā)人員可以輕松調(diào)整設(shè)置和部署纸淮,而不會(huì)遇到麻煩。對(duì)于數(shù)據(jù)庫(kù)亚享,反而相反萎馅。因?yàn)橐馔飧脑O(shè)置或?qū)⑾到y(tǒng)升級(jí)到新版本比較少見(jiàn)。我也不想讓我的數(shù)據(jù)庫(kù)在集群中爭(zhēng)奪CPU和內(nèi)存虹蒋。

如果我使用的是阿里云并且可以訪問(wèn)RDS糜芳,那么我特別傾向于不使用Kubernetes來(lái)存儲(chǔ)數(shù)據(jù)庫(kù)。你選擇的云提供商中的RDS或類似產(chǎn)品將更易于管理自動(dòng)備份魄衅,擴(kuò)展和監(jiān)控峭竣。

結(jié)論

Kubernetes非常適合需要隨時(shí)間擴(kuò)展和增長(zhǎng)的任何項(xiàng)目

如果你是一家初創(chuàng)公司晃虫,那么幾乎可以肯定你屬于該類別皆撩。你現(xiàn)在可能很小,但是你在不斷成長(zhǎng)哲银。這就是你說(shuō)服投資者的理由扛吞,也是你聘請(qǐng)如此多開(kāi)發(fā)人員的原因。你的系統(tǒng)將要快速更改和擴(kuò)展荆责,因此你希望以盡可能減少成本和摩擦的方式構(gòu)建系統(tǒng)滥比。

僅出于這個(gè)原因,我認(rèn)為任何電子商務(wù)做院,SaaS或類似公司盡早投資Kubernetes都是有意義的盲泛。即使你只是在集群中部署單個(gè)簡(jiǎn)單的Web應(yīng)用程序,對(duì)未來(lái)進(jìn)行規(guī)劃也意味著精心構(gòu)建基礎(chǔ)架構(gòu)键耕,以使你的團(tuán)隊(duì)能夠快速移動(dòng)一年或三年寺滚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屈雄,隨后出現(xiàn)的幾起案子村视,更是在濱河造成了極大的恐慌,老刑警劉巖酒奶,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚁孔,死亡現(xiàn)場(chǎng)離奇詭異奶赔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)勒虾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門纺阔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘸彤,“玉大人修然,你說(shuō)我怎么就攤上這事≈士觯” “怎么了愕宋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)结榄。 經(jīng)常有香客問(wèn)我中贝,道長(zhǎng),這世上最難降的妖魔是什么臼朗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任邻寿,我火速辦了婚禮,結(jié)果婚禮上视哑,老公的妹妹穿的比我還像新娘绣否。我一直安慰自己,他們只是感情好挡毅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蒜撮。 她就那樣靜靜地躺著,像睡著了一般跪呈。 火紅的嫁衣襯著肌膚如雪段磨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天耗绿,我揣著相機(jī)與錄音苹支,去河邊找鬼。 笑死误阻,一個(gè)胖子當(dāng)著我的面吹牛沐序,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堕绩,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼策幼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了奴紧?” 一聲冷哼從身側(cè)響起特姐,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎黍氮,沒(méi)想到半個(gè)月后唐含,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浅浮,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年捷枯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滚秩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淮捆,死狀恐怖郁油,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情攀痊,我是刑警寧澤桐腌,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站苟径,受9級(jí)特大地震影響案站,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棘街,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一蟆盐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遭殉,春花似錦石挂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至罗心,卻和暖如春里伯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渤闷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工疾瓮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人飒箭。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓狼电,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親弦蹂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肩碟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容