
近期,騰訊云 CODING DevOps 開源了云原生開發環境 - Nocalhost,
根據官方檔案介紹,Nocalhost 來源于 No Localhost,其含義是開發者不再依賴本地計算機的編碼、除錯和測驗程序,他是一個云原生開發環境,旨在解決云原生下開發難的問題,
例如,在 Kubernetes 環境下進行微服務開發,通常會面臨以下問題:
- 每次修改代碼,都需要經過構建映像->推送映像->拉取映像->重新啟動應用程式(Pod)的程序,開發的反饋回圈非常長(10 分鐘以上);
- 為了開發某個微服務,必須要在本地啟動整個環境和所有微服務,這帶來了過度依賴本地資源的問題;
- 開發人員只專注于他們自己的服務,隨著迭代的進行,本地啟動或更新完整的開發環境越來越難;
- 微服務之間的依賴關系和啟動順序難以控制;
- 新入職的員工一般需要 2-3 周的時間來熟悉開發環境的搭建及學習背景知識
那么,Nocalhost 到底是怎么解決以上問題的?Nocalhost 的開源,又會給 K8s 生態帶來哪些影響呢?帶著這些問題,我們與 Nocalhost 的設計者之一、新晉 CNCF 大使、云原生社區成員,來自騰訊云 CODING DevOps 的王煒,詳細聊聊關于 Nocalhost 的產品、技術和生態,
采訪嘉賓

以下為采訪原文:
Q: 首先跟大家介紹一下 Nocalhost 的起源吧
王煒:Nocalhost 的起源其實是解決 CODING 自身開發難的問題,CODING 在早期已經擁抱微服務、云原生和 Kubernetes,但在我們日常開發程序中,發現 Kubernetes 雖然解決了部署和運維的問題,但同時也帶來了開發難的問題,
最典型的痛處是每寫幾行代碼,要觀察代碼效果或者除錯,就不得不重新構建鏡像->推送鏡像->修改作業負載鏡像版本->等待 Pod 重建的漫長程序,這個程序雖然可以用自動化的 CI/CD 來解決一部分人工手動運行問題,但其核心不變,
此外,本地全量運行 CODING 所需的資源要求非常高,早期開發人員不得不配備一臺 8 核 64G 的電腦來開發,后續也嘗試過為每個人都配備了一臺遠程的高配開發機,但開發效率仍然無法提升,
針對這種場景,我們開始探索相應的解決方案,并最終將該實踐開源成為了 Nocalhost 專案,
Q:在云原生環境下,開發難除了體現在每次編碼需要重新構建鏡像以外,在實踐中還遇到了其他痛點嗎?
王煒:痛點非常多!以后端同學為例,從入職開始,熟悉和配置開發環境需要花大量的時間和精力,另外,好不容易搭建好了開發環境,需要更新微服務組件時往往出現大量組件無法啟動,當然這可能更多的是應用管理問題了,目前社區也有非常好的應用模型實踐,
但問題是,統一維護這套應用模型是非常吃力的,如果使用它的場景非常低頻,那么問題暴露會越來越遲,最終與無人維護沒有多大差別,而所有開發者的環境又是獨立的,遇到問題總是自己解決而不是往上層去更新應用模型,這會進一步導致應用版本越來越老舊,
所以,我們考慮開發環境是必須要集中化管理,開發環境的部署來源只能是獨立維護的應用模型,業務組協同維護并產生部署-修改回圈效應,才能實作一致性的應用管理,
Q:所以 Nocalhost 會管理應用和開發環境嗎?
王煒:是的,應用管理是使用外部標準,例如 Manifest 檔案組合成的應用、Helm 應用和 Kustomize 應用等,它是用于拉起開發環境的標準安裝方法,不同的開發者的開發環境在 Nocalhost 里的定義是開發空間(DevSpace),目前是采用 Namespace 的方式進行隔離和管理的,不同開發空間后續將支持協作開發,應用和開發空間的管理都可以在 Nocalhost 控制臺來實作,

Q:Nocalhost 有哪些組件組成?
王煒:Nocalhost 主要由這幾個組件組成:
-
管理側(面對開發環境的管理人員)
- Nocalhost 控制臺:提供開發人員管理、應用管理、開發空間管理等功能
- Nocalhost Dep 組件:提供應用依賴管理,控制微服務依賴啟動順序
- Nocalhost 控制臺:提供開發人員管理、應用管理、開發空間管理等功能
-
用戶側(開發者)
- nhctl-cli:Nocalhost 命令列工具,提供完整的功能
- IDE 插件:提供 VS Code 插件和 JetBrains 插件
- nhctl-cli:Nocalhost 命令列工具,提供完整的功能
Nocalhost 作業示意圖:

Q:Nocalhost 對開發者來說最直觀的使用感受是什么?
王煒:對開發者來說,最直觀的使用感受是開發程序變得非常簡單,從部署開發環境到開發只需要在 IDE 插件上進行簡單的四步操作:
-
一鍵拉起開發環境

-
點擊“錘子”進入待開發組件的“開發模式”

-
在本地 IDE 撰寫代碼,保存
-
無需重新構建鏡像,新代碼在遠端容器直接生效
在使用 Nocalhost 進行服務開發時,屏蔽了開發所需的復雜背景知識,只需要具備語言開發基礎,就能夠立即進行業務代碼的開發作業,
目前在 CODING 最快的實踐是:剛入職的新同學,中午接到需求后,下午就已經提交了業務代碼,令人興奮的是,他面對的需求是一套由 100 多個微服務組成的系統,這一切都是建立在他不了解任何 CODING 微服務架構、開發環境、甚至是業務代碼的倉庫地址(Nocalhost 已提前配置好)的背景下獨立完成,這在以前的開發模式下是無法想象的,
Q:比如我已有一套業務系統,怎么使用 Nocalhost ?
王煒:對于已有的業務系統,首先確認是否為 Kubernetes 標準的應用安裝方式,例如 Manifest、Helm 和 Kustomize,
其次,Nocalhost 不侵入任何的業務邏輯,只需要使用宣告式的配置方式提供開發引數配置即可,以開發 Istio 提供的 Bookinfo 為例,
以下是存放 Bookinfo 安裝檔案的 Git 倉庫 :https://github.com/nocalhost/bookinfo,
該倉庫的目錄結構如下圖所示,

其中,manifest/templates 目錄包含 Bookinfo Manifest 型別的安裝檔案:

當有了應用之后,我們便能夠為該倉庫創建 .nocalhost/config.yaml 來為 Nocalhost 提供開發引數,例如,這是 Bookinfo 應用以及 productpage 服務的部分開發引數:
configProperties:
version: v2
application:
name: bookinfo
# 應用型別
manifestType: rawManifest
# 應用 Manifest 的目錄
resourcePath: ["manifest/templates"]
ignoredPath: []
onPreInstall: []
services:
# 要開發的服務名稱
- name: productpage
# 要開發的服務型別
serviceType: deployment
# 宣告依賴服務,將會等待依賴啟動后自身才會啟動
dependLabelSelector:
jobs:
- "dep-job"
containers:
- name: productpage
# 應用安裝后自動埠轉發
install:
portForward:
- 39080:9080
dev:
# 定義原始碼倉庫地址
gitUrl: https://e.coding.net/codingcorp/nocalhost/bookinfo-productpage.git
# 定義開發鏡像
image: codingcorp-docker.pkg.coding.net/nocalhost/dev-images/python:3.7.7-slim-productpage
# 定義進入開發容器的 bash
shell: bash
workDir: /home/nocalhost-dev
# 定義檔案同步
sync:
type: send
filePattern:
- ./
ignoreFilePattern:
- ".git"
# 開發模式自動埠轉發
portForward:
- 39080:9080
在該組態檔中,我們為 Nocalhost 提供了 productpage 服務的一些開發引數,最后,再通過 Nocalhost 控制臺創建該應用并提供倉庫地址即可,
通過以上配置,便能夠實作應用無縫遷移到 Nocalhost 進行開發,
Q:Nocalhost 下一步的計劃是什么?
王煒:Nocalhost 目前在 CODING 日常開發幾乎已全員覆寫,但仍然有很多優化空間,
正如 Nocalhost 的 Slogan 一樣,Nocalhost 的初心是讓云原生開發回歸原始而又簡單,希望能為云原生開發環境提供探索和示范,并成為云原生生態不可缺少的一部分,
目前 Nocalhost 已進入 CNCF Landscape,后續將推進與 CNCF 更加深入的合作,
Q:能否談談國內的云原生發展趨勢和個人看法?
王煒:根據 Gartner 研究報告指出:到 2022 年,云原生和容器化的普及率將達到 75% 以上,這意味著云原生的大趨勢已成為定局,K8s 作為強大的基礎設施底座,為企業應用提供了極強的生產穩定性,
但隨著我們對 K8s 的使用程度越來越深,會發現 K8s 面向“作業負載”的設計在一些場景下是需要提升的,圍繞著這些問題的焦點,社區不斷地在為 K8s 進行插件式的擴展,CNCF Landscape 中已有接近 400 個開源產品為 K8s 提供了額外能力,這些技術方向大致被分為了資料庫、訊息、應用定義和鏡像構建等,產品數量仍然不斷上升,
K8s 生態發展至今,個人認為目前有兩大方向是急需社區來解決的:第一是應用定義模型,代表有 OAM 標準和 Kubevela,該方向與 DevOps、GitOps 具有緊密聯系,第二是一直被忽略的應用開發,這兩個方向都是提升大規模組織開發效率的關鍵,
尤其是應用開發方向,目前仍然沒有標準規范和優秀的實踐,我相信社區也一定會有標準誕生,
最后,歡迎大家加入云原生社區參與 Nocalhost 話題討論,另外 Nocalhost 正在招聘,也歡迎對云原生領域感興趣的同學加入我們,
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/270905.html
標籤:其他
上一篇:固態硬碟與機械硬碟的概念與區別
下一篇:初見,結對編程!(上)
