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