如何通過自動化Kubernetes集群管理容器
許多開發(fā)者已經(jīng)求助于Docker容器來實現(xiàn)云端和本地的新應(yīng)用迭代時的一致性,而且很多應(yīng)用都要依賴多個Docker容器的編排。而圍繞著容器集的啟動以及為了讓它們能夠協(xié)作而連帶的相關(guān)設(shè)置和配置又引發(fā)了一系列新的挑戰(zhàn)。
為了彌補這一差距,軟件產(chǎn)業(yè)一直在向容器管理系統(tǒng)Kubernetes靠攏,它承擔了生態(tài)體系的職能,實現(xiàn)對容器集的自動化部署。在舊金山舉行的KubeCon會議上,專家們討論了其中一些基于Kubernetes的集群自動化部署的***實踐和工具。
Univa工程總監(jiān)Cameron Brunner說創(chuàng)建Kubernetes有很多很好的工具,但對一致的集群自動化部署卻沒有好的路徑。“我們喜歡把硬件當作家畜來看待,” Brunner說:“這個我們在app上面一直都是這么聽說的。但把你的硬件當作寵物會導(dǎo)致令人不快的內(nèi)部管理問題。”
Univa內(nèi)部大約有5個集群在跑Kubernetes,每一個都包括多個節(jié)點。有一條可靠的工具鏈有助于快速生成符合一致性的Kubernetes集群,快到能夠在數(shù)分鐘內(nèi)開發(fā)和啟動。
Brunner說組織需要應(yīng)對一下問題才能生成一個一致可靠的Kubernetes集群:
- 從什么樣的基礎(chǔ)操作系統(tǒng)開始?
- 該操作系統(tǒng)是怎么部署和配置的?
- Kubernetes打算怎樣安裝和配置?
幸運的是,環(huán)境中有許多工具支持這一過程,Brunner說。像Atomic和CoreOS這樣的不變操作系統(tǒng)已經(jīng)變得相當穩(wěn)定。預(yù)引導(dǎo)執(zhí)行環(huán)境(PXE boot)未來啟動技術(shù)可以簡化部署。Cloud-Init是一個很好的啟動時配置工具。
建立一致性
Brunner建議要一直通過網(wǎng)絡(luò)啟動你的硬件。這可以在機器出問題或需要升級時快速進行服務(wù)開通的再次準備。PXE啟動有助于簡化這一過程。理想情況下,好的做法是有一個工具去動態(tài)生成PXE,而這個東西不是跟PXE一起的。
安裝不變的操作系統(tǒng)也是一個好的做法。這可以在數(shù)據(jù)中心做出一致的軟件集和一致的環(huán)境。Brunner說:“這降低了總體的管理復(fù)雜性,理解集群中發(fā)生的事情更容易。”
在本地托管容器鏡像也是好想法。Brunner建議要有一個本地庫。另一個好做法是用Cloud-Init管理配置。這樣把所有東西放在一個地方會更簡單,同時還能有一個不變的OS。這可以用Systemd來集成,完成證書登記、密鑰提取等輔助操作,從而建立一條系統(tǒng)啟動操作的流水化的工作流。
AWS自動化Kubernetes
舊金山的程序員Jimmy Cuadra說,在AWS上面以一致的方式部署Kubernetes集群是個挑戰(zhàn)。他說,“操作生產(chǎn)集群這個東西我不敢信任,哪怕我尊重Kubernetes團隊的艱苦工作。對于我們這些需要管理自己集群的人來說,我們需要更健壯的東西。”
Cuadra說,對于在托管應(yīng)用上面運行來說,Google Container Engine是個好的選擇。但在AWS上面進行集群的自動化部署需要更健壯的辦法。該問題部分在于與集群的聲明式配置工具相關(guān)的大多數(shù)信息已經(jīng)過時或包含有失效鏈接。Cuadra希望能夠利用聲明式配置文件,在Git上登記生成集群。
Cuadra建議用Hashicorp的Terraform。它允許組織使用聲明式配置語言去買搜狐資源以及云基礎(chǔ)設(shè)施的狀態(tài),從而匹配Git庫里面的東西。
控制配置復(fù)雜性
部署Kubernetes集群方面有很多服務(wù)開通問題,這些不是Terraform容易解決的。需要有特別的配置設(shè)置來描述容器間相互對話的不同。還要有其他的設(shè)置來指定如何對Kubernetes API進行鑒權(quán),給團隊不同的人提供分布式訪問證書。保持多個Kubernetes實現(xiàn)的狀態(tài)的工作流也需要管理。
為了填補這一差距,Cuadra開發(fā)了一個名為KAWS的開源工具,它可以更容易地指定基礎(chǔ)設(shè)施為代碼,且內(nèi)置一個域名系統(tǒng)。它還生成Kubernetes訪問證書,并可以安全地把它分發(fā)出去。KAWS是用Rust編程語言開發(fā)的。
自動化Kubernetes部署的過程從KAWS庫(基本上就是一個創(chuàng)建狀態(tài)的Git庫)的創(chuàng)建開始。它還包括了一個密鑰導(dǎo)出命令,可以管理團隊成員的公鑰。這樣就可以無需暴露各人私鑰的情況下管理用戶訪問了。Cuadra說此類自動化辦法使得在10分鐘內(nèi)籌劃和部署一個新的Kubernetes集群成為可能。