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