Nocalhost —— 讓云原生開發(fā)回歸原始而又簡單NoHost——讓云原生開發(fā)回歸原始簡單。本文由R&D編碼Nocalhost總監(jiān)王偉在騰訊云CIF工程效率峰會上分享。大家好,歡迎來到CIF大會。今天和大家分享的是:解決Kubernetes應(yīng)用開發(fā)的困境。首先,我想簡單介紹一下我自己。我是騰訊云編碼DevOps的王......
本文由R&D編碼Nocalhost總監(jiān)王偉在騰訊云CIF工程效率峰會上分享。
大家好,歡迎來到CIF大會。今天和大家分享的是:解決Kubernetes應(yīng)用開發(fā)的困境。首先,我想簡單介紹一下我自己。我是騰訊云編碼DevOps的王偉。我現(xiàn)在是Nocalhost項(xiàng)目的研發(fā)主管,也是CNCF大使。事不宜遲,言歸正傳。
這個(gè)分享主要分為五個(gè)方面:
1.第一,K8s環(huán)境下的發(fā)展困境;
2.以及主流的云原生開發(fā)方式;
3.接下來,實(shí)現(xiàn)容器應(yīng)用和熱加載的原理;
4.開發(fā)和調(diào)試演示,其中一個(gè)演示將用于演示;
5.最后,開源共建與展望。
首先第一部分:K8s環(huán)境下的發(fā)展困境。說到云原生開發(fā),就不得不從Docker說起。當(dāng)微服務(wù)越來越多,運(yùn)行環(huán)境越來越復(fù)雜的時(shí)候,Docker image為我們提供了一個(gè)很好的解決方案。但是當(dāng)鏡像和容器越來越多的時(shí)候,服務(wù)的布局就成了一個(gè)難題。這時(shí)候出現(xiàn)了很多方案,比如K8s,Docker Swarm等等。當(dāng)然,K8s幾乎已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn),成為容器布局的首選方案,但是這個(gè)事實(shí)上的標(biāo)準(zhǔn)提供的能力是面向操作的。例如,我們可以通過活躍度和就緒度來定義服務(wù)的自動恢復(fù)機(jī)制,通過資源來定義資源使用情況。這些定義實(shí)際上給開發(fā)者增加了很大的額外負(fù)擔(dān),也造成了開發(fā)和調(diào)試之間的兩難。
另外,云原生技術(shù)棧跨度非常大,對開發(fā)者提出了更高的要求,這也要求團(tuán)隊(duì)設(shè)計(jì)出更加符合業(yè)務(wù)需求的云原生架構(gòu)。所以總體來說,對于企業(yè)來說,招聘和用工的成本也更高。
下圖是CNCF云原生應(yīng)用開發(fā)全景圖。我們會發(fā)現(xiàn),云原生開發(fā)工具這個(gè)環(huán)節(jié)還是缺失的。云原生開發(fā)這么難,那么主流的開發(fā)方式是什么或者我們現(xiàn)在怎么解決問題
經(jīng)過總結(jié),目前有四種云原生開發(fā)方式:
1.全手工流程。例如,手動構(gòu)建和推快遞鏡像,修改鏡像版本,等待時(shí)間表生效。每次我們看到編碼效果時(shí),我們都稱之為編碼的反饋回路。這種開發(fā)方式編碼的反饋循環(huán)大概需要十分鐘,是一個(gè)非常漫長的過程。
2.全自動流程,也就是手動環(huán)節(jié)變成了自動。這種方法顯然會更快,但它的反饋回路只縮短到五分鐘左右。
3.第三種是對云原生比較了解的團(tuán)隊(duì)經(jīng)常使用的方案,即以網(wǎng)真為工具進(jìn)行開發(fā)。網(wǎng)真主要是連接本地和集群網(wǎng)絡(luò),讓開發(fā)者在本地開發(fā)。這種開發(fā)方式將編碼的反饋循環(huán)減少到了10秒,但是由于開發(fā)服務(wù)是以源代碼的形式在本地運(yùn)行的,這種方式有一定的局限性,后面我會深入講解。
4.第四種是使用Nocalhost,直接在容器中開發(fā)。這樣就可以擺脫臨場感在某些場景下的局限性。
接下來,我們來詳細(xì)說說以網(wǎng)真為代表的網(wǎng)絡(luò)接入方案的使用限制。首先,它最大的局限性是本地環(huán)境與工作負(fù)載的運(yùn)行環(huán)境差異較大,導(dǎo)致業(yè)務(wù)源代碼很難在本地運(yùn)行。例如,業(yè)務(wù)聲明安裝配置映射、機(jī)密、卷等。在K8s Manifest中,很難在本地重建。其次,還有環(huán)境的差異,跨平臺的差異,比如Linux和Windows之間的差異,以及某些場景下的網(wǎng)絡(luò)限制。
說了這么多,相信大家都能明白,在K8s環(huán)境下開發(fā)最大的問題就是每次查看代碼都需要重構(gòu)圖像,導(dǎo)致漫長而無效的等待。有沒有不需要重建鏡像的解決方案答案是肯定的。如果我們可以在容器中實(shí)現(xiàn)進(jìn)程或應(yīng)用程序的熱加載,并且每次編碼后都能實(shí)時(shí)生效,那我們就不需要重新構(gòu)建映像了嗎
接下來,我們將繼續(xù)討論該方法的實(shí)現(xiàn)原理和方案。先說Dockerfile。Dockerfile定義了容器的啟動命令。一般來說,這是業(yè)務(wù)流程的啟動模式。比如運(yùn)行一個(gè)可執(zhí)行文件,如果我們進(jìn)入容器執(zhí)行PS命令,會發(fā)現(xiàn)這個(gè)進(jìn)程對應(yīng)的是容器,也就是PID = 1的進(jìn)程。我們以圍棋應(yīng)用為例。如果這個(gè)PID = 1的進(jìn)程換成在源代碼中運(yùn)行,go run main.go,能否實(shí)現(xiàn)應(yīng)用熱加載修改完代碼后,我們只需要重新運(yùn)行這個(gè)命令就可以看到代碼效果了
我們的思路沒有錯,但是要實(shí)現(xiàn)這個(gè)方案,還需要三個(gè)條件。首先是容器的源代碼從哪里來除了腳本語言,一般的業(yè)務(wù)容器沒有源代碼;二是以Go應(yīng)用為例。編譯環(huán)境從何而來我們知道,一般情況下構(gòu)建的業(yè)務(wù)容器會因?yàn)榇鎯Υ笮《3肿钚〉目蛇\(yùn)行環(huán)境;第三,如果PID = 1的進(jìn)程被替換,如何停止容器崩潰
我們來分別看一下如何解決這些問題。首先,源代碼問題可以通過從本地同步到容器來解決。第二是編譯環(huán)境。我們可以通過用帶有編譯環(huán)境的開發(fā)映像替換正在運(yùn)行的業(yè)務(wù)映像來提供編譯環(huán)境。第三,我們可以把PID = 1的進(jìn)程換成阻塞的進(jìn)程,這三個(gè)問題就解決了。我們實(shí)現(xiàn)這些方案的時(shí)候,容器已經(jīng)有基礎(chǔ)帶熱加載了,Nocalhost的原理就是基于上面的方案。接下來,我將使用一個(gè)演示程序來演示應(yīng)用程序的熱加載和一鍵調(diào)試的效果。
Nocalhost為VSCode和JetBrains提供了全方位的插件,一旦安裝就可以立即使用。接下來,我將以Golang's為例,演示演示項(xiàng)目Booking for的開發(fā)。
容器應(yīng)用的實(shí)時(shí)熱加載和一鍵調(diào)試演示到此結(jié)束。有興趣的同學(xué)可以根據(jù)Nocalhost(nocalhost.dev)官網(wǎng)的快速入門說明試一試。
通過演示,相信你已經(jīng)了解了Nocalhost帶來的全新云原生開發(fā)體驗(yàn)。最后一部分,我會和大家分享開源共建的前景。目前Nocalhost是一個(gè)完全開源的項(xiàng)目,代碼托管在GitHub上,擁有900+star。這也是一個(gè)CNCF景觀項(xiàng)目,它包括在云原生全景。也歡迎您的關(guān)注和貢獻(xiàn)。
關(guān)于展望,在這次分享中,我介紹了兩種開發(fā)方式,Telepresence和Nocalhost。他們實(shí)際上有不同的解決問題的想法。可以根據(jù)自己的業(yè)務(wù)情況選擇一種方式使用。此外,Nocalhost提供了開發(fā)環(huán)境和開發(fā)過程的完整管理功能。對于想要統(tǒng)一管理開發(fā)環(huán)境的團(tuán)隊(duì),可以安裝Nocalhost Server來集中管理開發(fā)集群、應(yīng)用和開發(fā)環(huán)境。當(dāng)然,服務(wù)器也是開源免費(fèi)的。在這里,我提供一些服務(wù)器的截圖。有興趣的同學(xué)可以按照官方文檔安裝使用。
我的分享到這里。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部