Puppet踏上容器之旅,全面支持Kubernetes
一年的時(shí)間足以滄海桑田,物是人非了,即使對企業(yè)也同樣如此。
今年二月,Puppet Labs公司CEO Luke Kanies曾經(jīng)在接受采訪時(shí)表示,他認(rèn)為Docker在企業(yè)環(huán)境下的快速普及基本上只是一種幻覺。“沒有哪種技術(shù)能夠在企業(yè)當(dāng)中擁有如此迅猛的傳播速度。我根本不在乎它到底有多出色,”Kanies指出。“大家不可能突然之間就把成百上千萬種生產(chǎn)環(huán)境下的工作負(fù)載遷移到采用完全不同于以往的軟件包、運(yùn)行時(shí)以及其它組件的虛擬化層當(dāng)中。”
而就在不到一年之后,Puppet Labs發(fā)現(xiàn)自身已經(jīng)處于非常尷尬的境地——其開始著手將工具轉(zhuǎn)移至容器化環(huán)境當(dāng)中。就在上周三,Puppet公司公布了一套面向Kubernetes的功能模塊,其能夠幫助這套編排環(huán)境接受Puppet代碼的管理。
程序員眼中的Puppet
行業(yè)普遍認(rèn)為Puppet是系統(tǒng)管理員的一套自動(dòng)化工具,主要用于配置管理工作。而Chef與Puppet功能大致相同,但Chef是面向開發(fā)人員的。就在今年早些時(shí)候,由VB Insight發(fā)布的一份報(bào)告對此表示懷疑,它認(rèn)為二者的本質(zhì)差異在于Chef允許開發(fā)人員實(shí)現(xiàn)一系列實(shí)驗(yàn)性嘗試,但Puppet能夠***力度避免管理員犯錯(cuò)。
Puppet Labs的英國高級軟件開發(fā)人員Gareth Rushgrove作為本次Kubernetes支持項(xiàng)目中的關(guān)鍵性角色,當(dāng)然也非常熟稔關(guān)于配置自動(dòng)化的各類議題。他的主要工作就是切實(shí)讓Puppet 成為足以吸引開發(fā)人員的選項(xiàng)。他解釋稱,“這是一款編程語言——而且這種定位如今正變得愈發(fā)穩(wěn)固,特別是相較于幾年之前。”
Rushgrove同時(shí)提到,過去幾年以來,Puppet已經(jīng)吸納了一系列開發(fā)人員,它希望在一款編程語言中獲得的各類不同水平的工具與支持能力。“我認(rèn)為區(qū)別在于,這是一種聲明性語言而非通用語言,但大家仍然能夠利用它完成既定任務(wù)——因?yàn)樗浅?qiáng)大,”他強(qiáng)調(diào)稱。
市面上確實(shí)存在著不少聲明性編程語言,因此Puppet的聲明語義應(yīng)該足以讓其成為其中的一員。Rushgrove解釋稱,聲明語義能夠幫助操作者(當(dāng)然,大家也可以根據(jù)自己的理解將其稱為‘開發(fā)者’)聲明必要的系統(tǒng)狀態(tài),從而實(shí)現(xiàn)對容器平臺的支持。以此為基礎(chǔ),這款插件將在后端實(shí)現(xiàn)對 Kubernetes的配置管理。
“配置管理并不僅僅在于對磁盤上的資源及文件進(jìn)行管理;它的核心作用在于隨時(shí)間推移實(shí)現(xiàn)高水平管理效果,”Rushgrove指出。“我們的客戶及用戶往往來自大型企業(yè),他們對于流程更感興趣。我們目前的努力方向在于打造相關(guān)工具,從而幫助他們在獲得控制能力的同時(shí)擺脫手動(dòng)操作的束縛,即無需對此類流程進(jìn)行手動(dòng)管理。”
在大型企業(yè)當(dāng)中,他表示,這些流程包括服務(wù)管理與配置管理等隨時(shí)間逐漸演變的任務(wù),而且通常會呈現(xiàn)出非?;靵y的運(yùn)作態(tài)勢。Puppet致力于了解這些流程的實(shí)際價(jià)值,他認(rèn)為這將能夠帶來“難以獲得的智慧”。
不過除了自有設(shè)備,這部分企業(yè)還需要處理一系列其它流程,包括不同轉(zhuǎn)換、簽名以及員工間的任務(wù)移交等——這些傳輸工作能夠自動(dòng)完成,但卻無法帶來任何積極效果。這種傳輸方式在固定線路當(dāng)中僅僅表現(xiàn)為效率低下,但在容器編排環(huán)境中則會帶來更大的麻煩。這時(shí)我們需要利用安全控制機(jī)制幫助企業(yè)維護(hù)各流程的歸屬權(quán)與驗(yàn)證機(jī)制,同時(shí)確保其中不摻雜任何人為因素。
非管理員眼中的Kubernetes
“在我們眼中,Puppet總體而言并不屬于那種由管理員編寫代碼以實(shí)現(xiàn)原本需要手動(dòng)完成操作的簡單工具,”Rushgrove指出,“因?yàn)樗鼘儆诰幊陶Z言,所以大家可以將其作為中介,使得個(gè)人之外的各團(tuán)隊(duì)與部門也能夠與之交互。大家應(yīng)該逐步擺脫將系統(tǒng)管理員作為個(gè)人看待的固有印象……利用這種中介機(jī)制,大家可以從軟件開發(fā)實(shí)踐當(dāng)中提取成果——例如持續(xù)集成、單元測試以及代碼審查等等。另外,大家也可以建立自己的一套共享模式,并在模式描述當(dāng)中引入職責(zé)分擔(dān)這一設(shè)計(jì)思路。”
這套模式能夠反映出系統(tǒng)隨時(shí)間推移的演變情況——而非單純只是一套***但卻固定的平臺,其中應(yīng)當(dāng)包含特定狀態(tài)可能帶來的預(yù)期變化。這一切都能夠在 Puppet當(dāng)中完成(相信管理員已經(jīng)了解到這一點(diǎn)),因?yàn)槠鋾⑦@些狀態(tài)以動(dòng)態(tài)變量的形式進(jìn)行聲明。在新的Kubernetes平臺之上,此類變更隨后會被自動(dòng)提出并逐步納入平臺當(dāng)中。
值得強(qiáng)調(diào)的是,我們在自己的說明文檔當(dāng)中將Kubernetes描述為一套按需狀態(tài)系統(tǒng)。“Kubernetes能夠根據(jù)用戶提供的需求狀態(tài)請求建立起強(qiáng)大的聲明基礎(chǔ)。其擁有多種自我修復(fù)機(jī)制,具體包括自動(dòng)重啟、重新調(diào)度以及同時(shí)面向主動(dòng)控制器及必要編排流程的容器復(fù)制等能力。”
Gareth Rushgrove認(rèn)為,Kubernetes的強(qiáng)大之處恰恰體現(xiàn)在這些基礎(chǔ)當(dāng)中。在上周三發(fā)布的一篇官方博文當(dāng)中,他表示Kubernetes對于配置任務(wù)的處理能力并不會令配置管理方案走向消亡。
“有些人將配置管理(以及Puppet等工具)單純視為一種實(shí)現(xiàn)主機(jī)相關(guān)資源的管理方式,包括文件、服務(wù)、軟件包、用戶或者群組,”Rushgrove寫道。“Kubernetes引入了更為高級的基礎(chǔ)元素,例如Pod與副本控制器,旨在以更為簡便的方式實(shí)現(xiàn)分布式與可擴(kuò)展系統(tǒng)的管理。如此一來,大家將不再需要通過引入新的基礎(chǔ)元素進(jìn)行配置管理。然而,配置管理是一項(xiàng)涵蓋范疇極廣的學(xué)科,其歷史能夠追溯到上世紀(jì)五十年代。”
他還列舉了一段Puppet代碼示例,其中使用了YAML,其中結(jié)合了同樣使用YAML的Kubernetes代碼元素。通過這種方式,任何熟悉 Kubernetes API的用戶都不需要學(xué)習(xí)新的技能以運(yùn)用這些基礎(chǔ)元素——換言之,他們將能夠輕松上手Puppet代碼。“因此大家對Kubernetes越是了解,”Rushgrove告訴我們,“大家就越能夠輕松使用這套模塊。”
更重要的是,他認(rèn)為負(fù)責(zé)實(shí)現(xiàn)Kubernetes自動(dòng)化的Puppet腳本也可以被不同類型的用戶所使用——例如那些對Kubernetes并不熟悉,但卻希望借此處理臨時(shí)性業(yè)務(wù)難題的用戶。在這方面,Rushgrove提供了典型的Kubernetes示例——其能夠生成一款簡單的服務(wù)器負(fù)載均衡Web應(yīng)用,并被重新編譯為Puppet代碼,這也證明了其中所涉及的編程語法實(shí)際非常有限。
通過對這款應(yīng)用的簡單演示,他解釋稱這部分潛在用戶也完全能夠?qū)崿F(xiàn)自己需要的簡單調(diào)整——例如控制副本控制器中的容器數(shù)量,而完全不必勞煩專業(yè)用戶幫忙完成。“這意味著同一團(tuán)隊(duì)中的不同成員即使并非全部具備相關(guān)專業(yè)知識,也同樣能夠使用Kubernetes上的大型應(yīng)用。他們只需要使用開發(fā)人員創(chuàng)造的界面,并在業(yè)務(wù)層面上進(jìn)行操作即可。”