筆者在2020年年初加入了星環(huán)的云開(kāi)發(fā)部,在此之前接觸過(guò)最復雜的容器平臺就是docker swarm,并且也是一知半解,所以在工作的初期,對K8s的熟悉是一個(gè)必不可少的工作。然而K8s是一個(gè)具有一定復雜性的容器平臺,所以開(kāi)發(fā)/學(xué)習環(huán)境的搭建也會(huì )比較復雜。在嘗試搭建完整版集群失敗后又嘗試minikube,但是又發(fā)現minikube的諸多缺點(diǎn),如功能的局限,可配置性的低下。于是,在工作大半年,掌握一定基本知識后,著(zhù)手開(kāi)發(fā)本文所要介紹的MediumKube。初衷可能是為了幫助剛加入星環(huán)的小伙伴們熟悉K8s,不過(guò)感覺(jué)需求不高,就不了了之了。對于我自己來(lái)說(shuō),這倒是成為了快速搭建開(kāi)發(fā)環(huán)境的一個(gè)實(shí)用工具。
這些年容器云的技術(shù)已經(jīng)滲入到我們日常開(kāi)發(fā)的方方面面,不管是做一些企業(yè)應用的開(kāi)發(fā),還是個(gè)人網(wǎng)站的搭建。應用程序是否能在容器平臺上運行,并且利用容器平臺的特性去進(jìn)行性能調優(yōu)/成本管理確實(shí)是很難忽略的一個(gè)部分。而如今,有很多的應用完全基于云平臺去開(kāi)發(fā),它們充分運用了云平臺的能力,來(lái)做到諸如微服務(wù)化,服務(wù)網(wǎng)格化,彈性化等特點(diǎn)。然而一個(gè)完全基于云平臺開(kāi)發(fā)的應用也自然而然需要一個(gè)復雜的云開(kāi)發(fā)環(huán)境,不論是對應用本身的部署,還是對云平臺API的利用,甚至是對云平臺本身能力的擴展,都是有很大幫助的。
作為開(kāi)發(fā)環(huán)境,我們關(guān)注的點(diǎn)可能不同于生產(chǎn)環(huán)境。我在這里列舉一些我個(gè)人對開(kāi)發(fā)環(huán)境的期望。
是否可以快速部署,刪除
功能性是否完整
對于高級用戶(hù)是否提供豐富的配置項
開(kāi)發(fā)者對環(huán)境底層組件的可見(jiàn)性
作為中國的開(kāi)發(fā)者,是否能輕松地使用開(kāi)源的軟件生態(tài)
現在市面上也有很多的免費軟件可以作為容器云的開(kāi)發(fā)環(huán)境,比如傻瓜式的k8s發(fā)行版minikube,可應用于邊緣計算和資源受限環(huán)境的k3s,或者對于非k8s的使用者來(lái)說(shuō),docker swarm也是易于部署的容器云環(huán)境之一。
本文介紹的MediumKube不同于以上這些產(chǎn)品化程度比較高的軟件,它基于libvirt和cloud-init提供了一個(gè)高度可定制化的方案。相比于純粹的kubernetes輕量化發(fā)行版,它更像是一個(gè)虛擬機管理工具,而它提供的一些能力使得它成為部署kubernetes開(kāi)發(fā)環(huán)境的一個(gè)實(shí)用的軟件。
----------
Cloud-init是IaaS云服務(wù)通用的一個(gè)標準,它的推行者就是大名鼎鼎的Canonical,也就是開(kāi)發(fā)Ubuntu的那家公司。Cloud-init是Infrastructure as Code的一個(gè)例子。通過(guò)聲明式地編寫(xiě)配置文件,我們就可以實(shí)現對云實(shí)例的初始化。它是如此通用的一個(gè)標準,以至于我們可以將它集成到數百行代碼的微型項目中,來(lái)實(shí)現一個(gè)最簡(jiǎn)化的IaaS服務(wù)。MediumKube使用了這個(gè)工具,使得它本身就是一個(gè)可定制化極高的虛擬機管理工具。當然,由于它的定位是快速部署Kubernetes,所以它也內置了一個(gè)默認Cloud-Init模板,和它的源代碼本身一起發(fā)行。
上圖就是MediumKube內置模板的一部分。這個(gè)模板做了包括對用戶(hù),軟件源,系統配置腳本,docker/kubernetes的安裝的相關(guān)工作,使得實(shí)例一旦部署完,就帶有相應的軟件環(huán)境,無(wú)需再做額外的配置
MediumKube支持模板引擎。通過(guò)編寫(xiě)全局的配置項,并且將它們使用在Cloud-Init模板中,用戶(hù)可以部署出高度自定義的虛擬機集群。
上圖列出了MediumKube所支持的一些配置項。有些會(huì )影響虛擬機的屬性,而另一些,可以渲染到模板中。比如非常有用的HTTPProxy,對于中國用戶(hù)來(lái)說(shuō)時(shí)非常實(shí)用的,因為模板引擎的支持,用戶(hù)不再需要在多個(gè)零散的地方一遍遍地設置代理的配置,而是通過(guò)統一的配置文件去全局地設置。雖然配置項繁多,但是MediumKube對每一個(gè)都有推薦的默認值,這也在靈活性和易用性之間取得了一個(gè)平衡點(diǎn)。相信大家都有使用minikube時(shí)不知道去哪里配置虛擬機的高級參數的困擾,所以兼顧入門(mén)用戶(hù)和高級用戶(hù)也是MediumKube的一個(gè)優(yōu)點(diǎn)。
一個(gè)穩定的網(wǎng)絡(luò )環(huán)境對于開(kāi)發(fā)環(huán)境來(lái)說(shuō)也比較重要。MediumKube開(kāi)發(fā)的前期就出現過(guò)由于網(wǎng)絡(luò )環(huán)境的變動(dòng),某些配置變得不再可用,比如監聽(tīng)在宿主機上的代理。由于DHCP或者切換wifi,宿主機的IP經(jīng)常變動(dòng),為了解決這個(gè)問(wèn)題,mediumkube會(huì )為用戶(hù)維護一個(gè)虛擬網(wǎng)絡(luò ),并且這個(gè)虛擬網(wǎng)絡(luò )時(shí)非常易于配置的。用戶(hù)只需要聲明簡(jiǎn)單的接口信息,mediumkube會(huì )自動(dòng)進(jìn)行配置iptables,dnsmasq等像信息。
下圖為mediumkubed開(kāi)發(fā)初期的拓撲結構,類(lèi)似于Docker的Bridge網(wǎng)絡(luò ),非常簡(jiǎn)潔,但同時(shí)也很實(shí)用。隨著(zhù)開(kāi)發(fā),會(huì )有越來(lái)越多的功能被添加。
Mediumkubed會(huì )被注冊為systemd中的一個(gè)模塊,所以管理器來(lái)非常簡(jiǎn)單。
在UI方面,mediumkube提供了簡(jiǎn)單易用的命令行界面。比如用戶(hù)可以展示已部署的虛擬機,并管理它們的生命周期,如停止/啟動(dòng)/刪除/部署
同時(shí),mediumkube也有快速的組建集群,加入集群,重置節點(diǎn)等命令,使得集群的管理變得簡(jiǎn)單。比如,如果用戶(hù)需要部署一個(gè)兩節點(diǎn)的集群,只需要如下簡(jiǎn)單的命令
$ mediumkube deploy node1 node2
$ mediumkube init node1
$ mediumkube join node2 node1
當然,如果用戶(hù)不滿(mǎn)足于這些簡(jiǎn)單的命令,他們也可以通過(guò)shell命令來(lái)登入到虛擬機中進(jìn)行操作。
如上圖所示,用戶(hù)無(wú)需記憶任何IP地址,而且如果配置得當,也無(wú)需手動(dòng)管理任何密鑰,直接可以對節點(diǎn)進(jìn)行管理。
MediumKube是個(gè)很年輕也很小眾的項目。它解決了一部分人的痛點(diǎn)的同時(shí),也有相當大的局限性。比如在單機環(huán)境下的集群部署會(huì )使得系統資源捉襟見(jiàn)肘,以及項目比較低的產(chǎn)品化程度,都會(huì )使的它只是在“理論上”比較實(shí)用。作為MediumKube的開(kāi)發(fā)者,自然也希望MediumKube越來(lái)越好用,下面談?wù)勎覍λ囊巹潯?/p>
上面也提到了,MediumKube在單機的環(huán)境下帶來(lái)了不小的局限性,所以集群化一定是一個(gè)未來(lái)的規劃。當然,引入復雜的元素,勢必會(huì )對系統的簡(jiǎn)潔性帶來(lái)打擊,比如MediumKube會(huì )變得難以部署,甚至還不亞于部署一個(gè)K8S集群,或者分布式元素的加入可能會(huì )帶來(lái)更多的bug。很多問(wèn)題說(shuō)大也不大,不過(guò)確實(shí)是需要花時(shí)間去思考的。集群化的mediumkube采用何種架構?虛擬機的部署如何進(jìn)行調度?Overlay網(wǎng)絡(luò )用哪種技術(shù)做(上面的截圖好像暴露了我準備用flannel這個(gè)事實(shí))?如何進(jìn)行簡(jiǎn)單卻靈活的分布式部署?如果簡(jiǎn)單地進(jìn)行節點(diǎn)的規劃?是否需要圖形化的支持?要考慮的東西確實(shí)比較繁雜。
作為開(kāi)發(fā)環(huán)境,穩定性的要求可能沒(méi)那么強,不過(guò)在mediumkubed在早期確實(shí)也出現過(guò)占用巨量?jì)却娴那闆r。而且作為一個(gè)玩具項目和golang學(xué)習用例,mediumkube在代碼質(zhì)量上也比較堪憂(yōu)。比如文件傳輸模塊的代碼就非常糟糕,以至于上行和下行的速度有明顯的差距。希望在未來(lái)可以有所改善。
最后希望技術(shù)可以真真正正地提升我們生活的便利性,并感謝CNCF,Canonical,libvirt,Google等組織和所有開(kāi)源社區的開(kāi)發(fā)者們給我們帶來(lái)這些好玩,易用,免費的優(yōu)質(zhì)軟件,也期待未來(lái)可以看到更多有意思的技術(shù)。
作者:聞云路
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站