自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

GitHub 全面運(yùn)行在Kubernetes之上

新聞 前端
網(wǎng)絡(luò)上鮮有文章介紹如何將Kubernetes部署在物理云環(huán)境中。本文作者Newland來(lái)自于GitHub的SRE團(tuán)隊(duì),他從實(shí)際項(xiàng)目實(shí)施角度,介紹了如何將Kubernetes部署在GitHub的物理服務(wù)器上,并最終實(shí)現(xiàn)將GitHub全部運(yùn)在Kubernetes上。

【編者的話】網(wǎng)絡(luò)上鮮有文章介紹如何將Kubernetes部署在物理云環(huán)境中。本文作者Newland來(lái)自于GitHub的SRE團(tuán)隊(duì),他從實(shí)際項(xiàng)目實(shí)施角度,介紹了如何將Kubernetes部署在GitHub的物理服務(wù)器上,并最終實(shí)現(xiàn)將GitHub全部運(yùn)在Kubernetes上。

自GitHub在2008年上線以來(lái),其網(wǎng)站就運(yùn)行在Ruby on Rails之上。然而,8年過(guò)去了, GitHub作為全世界最重要的版本控制倉(cāng)庫(kù),整個(gè)組織架構(gòu)的負(fù)載已經(jīng)日趨緊張。GitHub在很多方面都有了很大的發(fā)展,不僅在用戶數(shù)量和對(duì)github.com和api.github.com的訪問請(qǐng)求等各方面都有巨大的增長(zhǎng)。公司的員工數(shù)量在遞增,同時(shí)對(duì)站點(diǎn)可靠性工程師(Site Reliability Engineering,SRE )團(tuán)隊(duì)服務(wù)的需求也在遞增。

SRE團(tuán)隊(duì)越來(lái)越多地從項(xiàng)目中撤出,旨在直接改善GitHub.com網(wǎng)站的用戶體檢,以支持各種各樣的內(nèi)部需求。隨著GitHub 服務(wù)數(shù)量的增多,團(tuán)隊(duì)的數(shù)量也在不斷增加,隨之站點(diǎn)可靠性團(tuán)隊(duì)花費(fèi)在服務(wù)的維護(hù)、部署和其他無(wú)關(guān)任務(wù)上的時(shí)間也越多。

受限于SRE團(tuán)隊(duì)的可用性,GitHub的其他工程師也受到限制,甚至變得更慢。“新的服務(wù)可能需要幾天、幾周甚至幾個(gè)月才能完成部署,這取決于它們的復(fù)雜性和我們團(tuán)隊(duì)的可用性。”GitHub的首席站點(diǎn)可靠性工程師 Jesse Newland 說(shuō)。“我們迫切地需要給其他的工程師提供一個(gè)自助的平臺(tái),他們可以用來(lái)自己實(shí)驗(yàn)創(chuàng)建和部署新的服務(wù),并按需擴(kuò)容。”

因此,在2016年8月的前一年,啟動(dòng)了Newland團(tuán)隊(duì)和平臺(tái)開發(fā)實(shí)驗(yàn)團(tuán)隊(duì)的一個(gè)合作項(xiàng)目,將整個(gè)平臺(tái)作為服務(wù)解決方案進(jìn)行評(píng)估。Kubernetes是由Google開發(fā)并由云原生計(jì)算基金會(huì)( Cloud Native Computing Foundation )維護(hù)的開源容器編排引擎,它迅速地成為行業(yè)的領(lǐng)先競(jìng)爭(zhēng)者。

“ Kubernetes 項(xiàng)目是我見過(guò)的維護(hù)和監(jiān)管最好的開源項(xiàng)目之一,和它相關(guān)的社區(qū)也都非常精彩,該項(xiàng)目的每個(gè)領(lǐng)域展現(xiàn)著出色的工程師。”Newland說(shuō)。“我相信該技術(shù)能夠幫助團(tuán)隊(duì)以更加穩(wěn)健地方式來(lái)遠(yuǎn)行項(xiàng)目,不僅限于GitHub團(tuán)隊(duì),也包括任何使用它的團(tuán)隊(duì)。”

開始使用容器

這不是GitHub首次涉足容器。“我們已經(jīng)在很多方面使用了他們,比如CI、測(cè)試和一些隔離的項(xiàng)目上。不過(guò),他們沒有提供大量的生產(chǎn)工作負(fù)載。”他解釋道。因此,我們已經(jīng)擁有了一些經(jīng)驗(yàn),但是并不深入。我們確實(shí)對(duì)Dockerfile格式的優(yōu)點(diǎn)和缺點(diǎn)都很熟悉,這也是有所幫助的。

在項(xiàng)目的最初階段,團(tuán)隊(duì)就決定要致力于遷移公司的一個(gè)最核心的負(fù)載:github.com和GitHub API。“ 這是一個(gè)深思熟慮的決定,它受很多因素的影響。” Newland說(shuō)。這其中包括對(duì)自助服務(wù)容量擴(kuò)容工具的需求,隨時(shí)間的推移增加指定工作負(fù)載的可遷移性的需求,以及對(duì)新的平臺(tái)能持續(xù)運(yùn)行多年的需求。

“根據(jù)我們選擇要遷移負(fù)載的關(guān)鍵性能,我們需要在把它服務(wù)于實(shí)際生產(chǎn)負(fù)載前,獲得高水平的運(yùn)維信心。”Newland說(shuō)。

Kubernetes風(fēng)格的黑客周(Hack Week)

為了支持即將到來(lái)的黑客周,一個(gè)小型的實(shí)驗(yàn)項(xiàng)目已經(jīng)構(gòu)建,并創(chuàng)建了Kubernetes集群和部署工具,此舉也獲得一些該平臺(tái)的實(shí)踐經(jīng)驗(yàn)。這是一個(gè)合適的場(chǎng)景,讓不同的團(tuán)隊(duì)同時(shí)嘗試集群和部署,這也是一個(gè)小規(guī)模版本GitHub對(duì)平臺(tái)的全面組織的需求。

Newland說(shuō),黑客周正如其名,是一個(gè)非常適合的測(cè)評(píng)場(chǎng)地。這是一個(gè)低風(fēng)險(xiǎn)的實(shí)驗(yàn)環(huán)境,來(lái)驗(yàn)證Github在Kubernetes的運(yùn)行狀況,并且成為我們第一次調(diào)研的良好的質(zhì)量標(biāo)準(zhǔn),因?yàn)楹诳椭芫褪菄@軟件的最多可用性來(lái)進(jìn)行的。“然而,更重要的是公司的開發(fā)人員喜歡擁有一個(gè)可重復(fù)的環(huán)境,去測(cè)試他們的修改對(duì)所有依賴的子系統(tǒng)的運(yùn)行情況。

簡(jiǎn)而言之,Github的第一次深入嘗試Kubernetes取得了真正成功。“我們對(duì)該項(xiàng)目的經(jīng)驗(yàn)以及來(lái)自黑客周的工程們的反饋都是非常積極正面的,并支持?jǐn)U大該實(shí)驗(yàn)。”Newland總結(jié)到。“有了這些正面的體驗(yàn),我們開始計(jì)劃更大的推廣。”

(此外,Newland說(shuō),黑客周已經(jīng)成為了一種模式,用來(lái)運(yùn)行和檢驗(yàn)其他的GitHub的應(yīng)用,這些應(yīng)用可以從獨(dú)立的運(yùn)行環(huán)境中獲得好處,并可按需創(chuàng)建而不必運(yùn)行在固定數(shù)量的準(zhǔn)生產(chǎn)服務(wù)器上。“以我的經(jīng)驗(yàn)來(lái)看,非生產(chǎn)或者準(zhǔn)生產(chǎn)環(huán)境隨著時(shí)間推移而逐漸會(huì)變得陳舊,因?yàn)樵谀阏嬲枰鼈兊哪且豢讨?,它們并沒有被真正地維護(hù)和受關(guān)注,這樣會(huì)引起各種各樣的問題。”Newland說(shuō)。“所以,我們非常興奮地應(yīng)用該模式到所有的GitHub及它的應(yīng)用上,正如我們需要一套預(yù)備生產(chǎn)測(cè)試環(huán)境一樣。”)

構(gòu)建之路

該團(tuán)隊(duì)沒有為整個(gè)Kubernetes的遷移工作設(shè)立一個(gè)固定時(shí)間表,而采用了一種以成就為導(dǎo)向的方式 。目標(biāo)是根據(jù)現(xiàn)有產(chǎn)品的性能以及錯(cuò)誤率為導(dǎo)向遷移,而不會(huì)設(shè)定一個(gè)固定的截止期限來(lái)完成。

“我們大致知道我們要達(dá)到的目標(biāo),會(huì)通過(guò)選定一個(gè)接近的目標(biāo)和設(shè)定一個(gè)大概的日期,讓團(tuán)隊(duì)感到緊迫性。”Newland說(shuō)。這是一個(gè)階段性的推進(jìn)方案,他解釋道:“我們對(duì)這個(gè)新的平臺(tái)進(jìn)行小流量的測(cè)試,并在我們嘗試更大的步驟前,來(lái)檢驗(yàn)它是否能夠滿足我們的預(yù)期目標(biāo)。”

下一個(gè)關(guān)鍵的成就是:建立一個(gè)“評(píng)審實(shí)驗(yàn)室”(review lab)。

“我們知道,我們需要設(shè)計(jì)、原型和驗(yàn)證使用Kubernetes原生的Pods、Deployments和Services來(lái)替代由前端服務(wù)器提供的服務(wù)。”Newland說(shuō)。“一些驗(yàn)證可以通過(guò)在一個(gè)容器中運(yùn)行現(xiàn)有的測(cè)試套件來(lái)進(jìn)行,而不是運(yùn)行在一個(gè)配置為模擬前端服務(wù)器上。

但是,我們還需要獲得更大的信心在把容器作為一組更大的Kubernetes資源的一部分來(lái)運(yùn)行。”

我們決定建立“評(píng)審實(shí)驗(yàn)室”--- 這是一個(gè)通過(guò)Kubernetes來(lái)部署和管理的環(huán)境,它支持對(duì)Kubernetes及其服務(wù)組合進(jìn)行探索性測(cè)試,類似與現(xiàn)有GitHub的“分支實(shí)驗(yàn)室”環(huán)境。

團(tuán)隊(duì)們花費(fèi)了2016余下的時(shí)間來(lái)創(chuàng)建評(píng)審實(shí)驗(yàn)室,并在此程中交付了多個(gè)子項(xiàng)目。其中包含把K8s集群運(yùn)行在AWS 虛擬私有云平臺(tái)( AWS Virtual Private Cloud ),它使用Hashicorp的 Terraform 和 kops 的組合管理;使用Dockerfile文件來(lái)部署github.com和api.github.com,使用YAML來(lái)描述超過(guò)50個(gè)的Kubernetes資源;使用一些Bash集成測(cè)試腳本來(lái)實(shí)驗(yàn)短暫的Kubernetes集群服務(wù)。Newland把它描述為“在項(xiàng)目開始時(shí),通過(guò)大量地高負(fù)載地使用來(lái)獲得對(duì)Kubenetes的信心。”

最終的結(jié)果是一個(gè)聊天式的用戶界面,可以根據(jù)拉取請(qǐng)求來(lái)創(chuàng)建隔離部署GitHub的總量。“我們非常高興的是,這種環(huán)境使工程師能夠以自助服務(wù)的方式來(lái)實(shí)驗(yàn)和解決問題,”Newland說(shuō)。他解釋說(shuō),評(píng)審實(shí)驗(yàn)室環(huán)境在內(nèi)部發(fā)布后,給大量的工程師提供了一種新的部署方式。從環(huán)境感興趣的工程師們的反饋,以及在持續(xù)使用過(guò)程中工程師并未察覺環(huán)境變化并為此提出反饋,這些都幫助可靠性團(tuán)隊(duì)對(duì)Kubernetes建立了信心。

在物理服務(wù)器上部署Kubernetes

評(píng)審實(shí)驗(yàn)室成功推出后,Newland和他的團(tuán)隊(duì)從2016年底假期結(jié)束后,準(zhǔn)備重點(diǎn)關(guān)注在GitHub的物理環(huán)境工作Kubernetes集群上,并開始遷移網(wǎng)絡(luò)流量。

“我覺得特別有趣的一點(diǎn)是,我們實(shí)際上是在金屬實(shí)體物理機(jī)器上運(yùn)行著Kubernetes集群。Kubernetes生態(tài)系統(tǒng)非常專注于運(yùn)行在云服務(wù)提供商上,大多數(shù)文檔都是基于這一點(diǎn)的,”Newland說(shuō)。 “有關(guān)Kubernetes如何工作在我們的物理數(shù)據(jù)中心的設(shè)計(jì)上,我們遇到了一些挑戰(zhàn)。我們也看一些零散的文章和先驅(qū)者,但大多數(shù)博客文章和討論都是基于 Kubernetes集群運(yùn)行在他們的房子來(lái)闡述。所以,幾個(gè)團(tuán)隊(duì)成員實(shí)際上開始在家里實(shí)施Kubernetes,并把它作為實(shí)驗(yàn)和學(xué)習(xí)的機(jī)會(huì)。”

“實(shí)際上,我的幾個(gè)家庭自動(dòng)化現(xiàn)在由Kubernetes來(lái)提供支持,”Newland補(bǔ)充說(shuō)。

不容置疑,這需要做一些非常有趣的調(diào)整。為了滿足GitHub的旗艦服務(wù) 的性能和可靠性要求,其中的一部分服務(wù)還要依賴于對(duì)其他數(shù)據(jù)服務(wù)的低延遲訪問, GitHub的Kubernetes基礎(chǔ)設(shè)施將需要支持公司的物理數(shù)據(jù)中心和接駁點(diǎn)(POPs)中的“物理云”。

“參照 Kelsey Hightower 的一篇不少于十幾個(gè)讀者的文章“ Kubernetes The Hard Way ”, 我們將少量手動(dòng)配置的服務(wù)器組合到了一個(gè)臨時(shí)的Kubernetes群集中。這些集群通過(guò)了我們的一組集成測(cè)試,該測(cè)試集之前也同樣用來(lái)測(cè)試我們的AWS集群,”Newland說(shuō)。

在遷移工作站旅途上的幾個(gè)小的驛站:

  • 使用 Calico軟件定義的網(wǎng)絡(luò)提供商 的即時(shí)可用功能,在IP-in-IP模式下快速發(fā)布群集,隨后允許使用GitHub的網(wǎng)絡(luò)基礎(chǔ)設(shè)施進(jìn)行對(duì)等探測(cè)。
  • 構(gòu)建一個(gè)小工具,為GitHub的內(nèi)部Puppet和加密系統(tǒng)生成每個(gè)集群所需的證書授權(quán)和配置。
  • 使用兩種實(shí)例角色(Kubernetes節(jié)點(diǎn)和 Kubernetes API服務(wù) )的配置,允許用戶提供已經(jīng)部署的集群的名稱,以便在部署時(shí)加入該集群。
  • 構(gòu)建一個(gè)小型的基于Go的服務(wù)來(lái)使用容器日志,將元數(shù)據(jù)以key / value格式附加到每一行,并將它們發(fā)送到主機(jī)本地Syslog終端。
  • 加強(qiáng)GitHub的內(nèi)部負(fù)載均衡服務(wù),以支持 Kubernetes NodePort 服務(wù)。

“所有這些努力的工作組合,通過(guò)了在單個(gè)集群的驗(yàn)收測(cè)試。”Newland說(shuō)。鑒于此,團(tuán)隊(duì)們有理由相信,在相同的一組投入(指的是評(píng)審實(shí)驗(yàn)所使用的Kubernetes資源),同一組數(shù)據(jù)(通過(guò)VPN連接的評(píng)審實(shí)驗(yàn)室的網(wǎng)絡(luò)服務(wù))和使用相同的工具能夠得到類似的結(jié)果。

“在不到一個(gè)星期的時(shí)間里,其中大部分時(shí)間用于內(nèi)部溝通和對(duì)遷移有重大影響的事物的排序上,我們將整個(gè)工作負(fù)載從運(yùn)行在AWS上的Kubernetes集群遷移到我們的一個(gè)數(shù)據(jù)之中心。”他總結(jié)道。

最后的倒計(jì)時(shí)

通過(guò)在GitHub的物理云上創(chuàng)建了一個(gè)成功和穩(wěn)定的組合Kubernetes集群的模式,現(xiàn)在是時(shí)機(jī)開始減輕GitHub前端服務(wù)器的部分負(fù)載 。

“在GitHub,通常的做法是工程們通過(guò)創(chuàng)建一個(gè)稱為Flipper的功能來(lái)驗(yàn)證他們正在構(gòu)建的新功能,一旦可行就可以接它。”Newland說(shuō)。 在增強(qiáng)部署系統(tǒng)后,將新的Kubernetes資源部署到現(xiàn)有前端服務(wù)器并行的Github生產(chǎn)環(huán)境的域名空間中,并增強(qiáng)了Github負(fù)載均衡服務(wù),可基于受影響的Flipper功能模塊的 cookie ,將員工的網(wǎng)絡(luò)請(qǐng)求路由到另外的后臺(tái)服務(wù)器,該團(tuán)隊(duì)允許GitHub的員工選擇路由到一個(gè)實(shí)驗(yàn)性的Kubernetes后端。

“來(lái)自于內(nèi)部用戶的負(fù)載,幫助我們發(fā)現(xiàn)問題、修復(fù)錯(cuò)誤,并讓我們開始建立信心,”Newland說(shuō)。 “我們還將少量網(wǎng)絡(luò)流量路由到此集群,以確認(rèn)我們對(duì)該負(fù)載下的性能和可靠性的假設(shè)。從最初的100個(gè)請(qǐng)求每秒開始,并擴(kuò)大到對(duì)整個(gè)github.com和api.github.com的10%的訪問量的請(qǐng)求。 ”

問題也卷土而出,其中也包括將集群與GitHub的現(xiàn)有負(fù)載平衡基礎(chǔ)設(shè)施集成在一起的問題。 “運(yùn)行高可用集群的文檔掩蓋了對(duì)負(fù)載均衡器的必要特性 – 這也不是缺陷,因?yàn)檫@也不是經(jīng)常使用的事情。”他說(shuō)。 “我們?cè)诖碎_辟先河,并在此過(guò)程中更具體地理解問題所在。當(dāng)我們這樣做的時(shí)候,我們也愿意和社區(qū)分享一些我們的經(jīng)驗(yàn)。”

在即將把100%流量路由到Kubernetes時(shí),團(tuán)隊(duì)選擇在每個(gè)站點(diǎn)的多個(gè)群集上運(yùn)行GitHub的前端系統(tǒng),并自動(dòng)地將請(qǐng)求從不健康的群集轉(zhuǎn)移到其他健康群集。 “所以我們不用把所有的蛋放在一個(gè)Kubernetes集群中,而是運(yùn)行了幾個(gè)集群 - 這樣一來(lái),如果出現(xiàn)了錯(cuò)誤的話,那么我們只會(huì)丟失一部分當(dāng)時(shí)正在處理服務(wù)請(qǐng)求的服務(wù)器,”Newland解釋說(shuō) 。 “我們改進(jìn)了我們的設(shè)計(jì),并讓它在那些測(cè)試過(guò)程中存在問題的領(lǐng)域提供更加合理的服務(wù)。”

最終,從內(nèi)部到外部的Kubernetes的過(guò)渡是在一個(gè)月內(nèi)進(jìn)行的,同時(shí)保持在一定的性能和錯(cuò)誤率之內(nèi)。 “我在這里,因?yàn)槲蚁矚g解決問題,”Newland說(shuō)。 “不過(guò),我同樣感興趣于不再創(chuàng)造出絕無(wú)必要的問題。”

個(gè)人視角

“作為一名站點(diǎn)的可靠性工程師,我的愿望是能夠創(chuàng)建工具,使得軟件開發(fā)人員比我更有創(chuàng)意 - 構(gòu)建創(chuàng)新的和革新的解決方案,然后幫助其他人在GitHub上使用它們,”Newland總結(jié)說(shuō)。 “這個(gè)項(xiàng)目讓我感到鼓舞 - 我們?cè)O(shè)置的審查實(shí)驗(yàn)室環(huán)境,讓我們的工程師能夠嘗試新事物并進(jìn)行實(shí)驗(yàn),而在此之前他們需要等待SRE團(tuán)隊(duì)?,F(xiàn)在,他們不再受限于SRE員工的數(shù)量了。我們看到工程師們實(shí)驗(yàn)用不同的方法來(lái)替代大塊的軟件棧 ,并且審查實(shí)驗(yàn)室和Kubernetes組合使他們不僅可以自己實(shí)踐,而且還做了一些SRE團(tuán)隊(duì)意想不到的事情...”

“我已經(jīng)看到,Kubernetes是如何在GitHub上創(chuàng)造了一個(gè)更快速創(chuàng)新的環(huán)境 - 用戶將從這些創(chuàng)新中得到受益,最終使整個(gè)行業(yè)受益。”

原文連接:(翻譯:侯巧燕)

責(zé)任編輯:張燕妮 來(lái)源: 推酷
相關(guān)推薦

2013-04-19 09:51:21

HadoopOpenStackSavanna

2018-12-16 16:21:08

HadoopKubernetes容器

2023-12-21 16:18:38

代碼AI人工智能

2021-07-15 09:40:57

MinikubeKubernetes集群

2018-04-04 14:33:06

AWS頭號(hào)玩家Directive G

2014-01-07 13:07:44

YARN計(jì)算框架

2023-01-30 17:26:27

Kubernetes成本雙刃劍

2019-06-21 15:29:26

Kubernetes網(wǎng)絡(luò)標(biāo)準(zhǔn)容器

2010-03-11 14:32:34

Ubuntu Twea

2014-06-11 09:48:00

GroovyAndroid

2022-02-09 21:27:15

KubernetesDocker容器

2020-07-01 07:36:48

Kubernetes容器

2024-05-22 09:45:49

2015-12-28 17:10:55

PuppetKubernetes容器

2017-11-08 05:53:07

物聯(lián)網(wǎng)架構(gòu)云計(jì)算云端

2010-04-14 17:57:52

Oracle數(shù)據(jù)庫(kù)

2009-06-19 21:02:11

2011-08-31 09:40:25

VMwareWindows

2011-08-30 13:10:14

Python

2020-12-02 10:19:25

工具代碼開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)