新聞中心
使用 Nocalhost 與 KubeVela 端云聯(lián)調(diào),一鍵完成多集群混合云環(huán)境部署
精選
作者:阿里巴巴中間件 2022-04-29 09:55:55
云計算
云原生 使用 KubeVela + Nocalhost,不僅能夠便捷地在開發(fā)環(huán)境中進(jìn)行云端的聯(lián)調(diào)測試,還能在測試完成后一鍵更新部署到生產(chǎn)環(huán)境,使整個開發(fā)上線過程穩(wěn)定可靠。

十載的武威網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整武威建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“武威網(wǎng)站設(shè)計”,“武威網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
作者 | 霧霧、玉易才(KubeVela、Nocalhost 團隊)
在云原生快速發(fā)展的當(dāng)下,如何讓云的技術(shù)賦能業(yè)務(wù)開發(fā)?在上線應(yīng)用時,如何讓云的開發(fā)者在現(xiàn)代化的多集群、混合云環(huán)境中便捷地進(jìn)行應(yīng)用的開發(fā)和調(diào)試?在部署過程中,又該如何讓應(yīng)用部署具備充分的驗證和可靠性?
這些至關(guān)重要的問題,都是我們急需解決的。
在本文中,我們將結(jié)合 KubeVela 以及 Nocalhost 開源項目,給出一個基于 Kubernetes 和容器生態(tài)的端云聯(lián)調(diào)、一鍵完成多集群混合環(huán)境部署的解決方案,來回答上述問題。
當(dāng)一個新應(yīng)用需要開發(fā)上線時,我們希望本地 IDE 中調(diào)試的結(jié)果能和云端最終部署的狀態(tài)保持一致。這樣一致的姿態(tài),能最大程度上給予我們部署的信心,并且讓我們可以采用類似 GitOps 這種更高效、敏捷的方式迭代應(yīng)用更新。即:當(dāng)新代碼被推送至代碼倉庫中后,環(huán)境中的應(yīng)用會自動化地實時更新。同時,基于端云聯(lián)調(diào)的模式,可以讓這整個過程不僅敏捷高效、同樣更加穩(wěn)定可靠。
基于 KubeVela 和 Nocalhost,我們可以完成這樣一種部署過程:
如圖:通過 KubeVela 創(chuàng)建應(yīng)用,將應(yīng)用部署到測試環(huán)境后,暫停部署。使用 Nocalhost 在測試環(huán)境中對應(yīng)用進(jìn)行云端聯(lián)調(diào)。調(diào)試完畢后,將調(diào)試完畢的代碼推送到代碼倉庫,通過 KubeVela 進(jìn)行 GitOps 部署,在測試環(huán)境進(jìn)行驗證后,再同步更新到生產(chǎn)環(huán)境。
在本文中,我們將介紹如何使用 KubeVela 及 Nocalhost 完成上述云端應(yīng)用開發(fā)及上線的全過程。
一、什么是 KubeVela
KubeVela 是一個簡單易用且高度可擴展的應(yīng)用交付和管理平臺,基于 Kubernetes 與 OAM 技術(shù)構(gòu)建。其核心功能是讓開發(fā)人員方便快捷地在 Kubernetes 上定義與交付現(xiàn)代微服務(wù)應(yīng)用,而無需了解任何 Kubernetes 本身相關(guān)的細(xì)節(jié)。
KubeVela 提供了 VelaUX 功能,能夠讓整個應(yīng)用分發(fā)的過程可視化,使應(yīng)用組裝、分發(fā)、交付的流程變得更簡單。在 UX 上,不僅可以便捷地通過頁面及時了解整個交付鏈路狀態(tài),還可以通過配置觸發(fā)器,使應(yīng)用隨著制品倉庫的更新而更新。
而在本文的場景中,KubeVela 提供了以下能力:
1.完整的 GitOps 發(fā)布:
- KubeVela 同時支持了 Pull 模式以及 Push 模式的 GitOps 發(fā)布:我們只需要將更新后的代碼推送到代碼倉庫,KubeVela 就能自動基于最新代碼完成部署。在本文中,我們將使用 Push 模式的 GitOps,關(guān)于 Pull 模式的 GitOps 支持,可以查看文末文章[1]。
2.強大的工作流能力,實現(xiàn)跨環(huán)境(集群)部署、審批以及通知:
- KubeVela 借助其工作流能力,可以輕松讓應(yīng)用實現(xiàn)跨環(huán)境部署,并且支持用戶在編排工作流的過程中,加入例如人工審批、消息通知等功能,使整個部署過程生產(chǎn)級可用。
3.應(yīng)用抽象能力,讓開發(fā)者都能看懂使用并且自定義基礎(chǔ)設(shè)施能力
KubeVela 遵循 OAM 的開放應(yīng)用模型,提供了一套簡單易用的應(yīng)用抽象能力,使開發(fā)者能夠更加清晰地理解應(yīng)用的功能,并且可以自定義基礎(chǔ)設(shè)施能力。例如,對于一個簡單的應(yīng)用來說,我們可以將其劃分為組件,運維特征,工作流三大部分。在本文的例子中,我們的組件是一個簡單的業(yè)務(wù)應(yīng)用;在運維特征部分,我們?yōu)檫@個組件綁定了一個 Nocalhost 的運維特征,讓這個組件能夠使用 Nocalhost 端云聯(lián)調(diào)的能力;在工作流部分,通過多環(huán)境管理,我們可以先讓這個組件部署在測試環(huán)境,部署完成后自動暫停工作流的發(fā)布,直至人工驗證審批通過后,再進(jìn)行生產(chǎn)環(huán)境的部署。
二、什么是 Nocalhost
Nocalhost 是一個允許開發(fā)者直接在 Kubernetes 集群內(nèi)開發(fā)應(yīng)用的工具。
Nocalhost 的核心功能是:提供 Nocalhost IDE 插件(包括 VSCode 和 Jetbrains 插件),將遠(yuǎn)端的工作負(fù)載更改為開發(fā)模式。在開發(fā)模式下,容器的鏡像將被替換為包含開發(fā)工具(例如 JDK、Go、Python 環(huán)境等)的開發(fā)鏡像。當(dāng)開發(fā)者在本地編寫代碼時,任何修改都會實時被同步到遠(yuǎn)端開發(fā)容器中,應(yīng)用程序會立即更新(取決于應(yīng)用的熱加載機制或重新運行應(yīng)用),開發(fā)容器將繼承原始工作負(fù)載所有的聲明式配置(ConfigMap、Secret、Volume、Env 等)。
Nocalhost 還提供:VSCode 和 Jetbrains IDE 一鍵 Debug 和 HotReload;在 IDE 內(nèi)直接提供開發(fā)容器的終端,獲得和本地開發(fā)一致的體驗;提供基于 Namespace 隔離的開發(fā)空間和 Mesh 開發(fā)空間 。此外,Nocalhost 還提供了 Server 端幫助企業(yè)管理 Kubernetes 應(yīng)用、開發(fā)者和開發(fā)空間,方便企業(yè)統(tǒng)一管理各類開發(fā)和測試環(huán)境。
在使用 Nocalhost 開發(fā) Kubernetes 的應(yīng)用過程中,免去了鏡像構(gòu)建,更新鏡像版本,等待集群調(diào)度 Pod 的過程,把編碼/測試/調(diào)試反饋循環(huán)(code/test/debug cycle)從分鐘級別降低到了秒級別,大幅提升開發(fā)效率。
三、調(diào)試云端應(yīng)用
我們以一個簡單的前端應(yīng)用為例,首先,我們通過 VelaUX 進(jìn)行多環(huán)境部署。
關(guān)于如何開啟 KubeVela 的 VelaUX 插件,請查看文末官方文檔[2]。
1.使用 VelaUX 部署云端應(yīng)用
在 VelaUX 中創(chuàng)建一個環(huán)境,每個環(huán)境中可以有多個部署目標(biāo),我們以一個包含了測試部署目標(biāo)以及生產(chǎn)部署目標(biāo)的環(huán)境為例。
首先,創(chuàng)建兩個部署目標(biāo),一個用于測試部署,一個用于生產(chǎn)部署。這里的部署目標(biāo)會分別將資源下發(fā)到 local 集群的 test 以及 prod namespace 當(dāng)中。你也可以通過 VelaUX 的集群管理功能,來添加新的集群用于部署。
創(chuàng)建完部署目標(biāo)后,新建一個環(huán)境,環(huán)境中包含這兩個部署目標(biāo)。
創(chuàng)建完環(huán)境后,新建應(yīng)用來進(jìn)行云端調(diào)試。這個前端應(yīng)用會在 80 端口暴露服務(wù),因此,我們把這個應(yīng)用的 80 端口打開。
創(chuàng)建完應(yīng)用后,應(yīng)用會默認(rèn)帶一個工作流,自動將應(yīng)用部署到兩個部署目標(biāo)當(dāng)中。但我們并不希望未經(jīng)過調(diào)試的應(yīng)用直接部署到生產(chǎn)目標(biāo)中。因此,我們來編輯一下這個默認(rèn)工作流:在部署到測試目標(biāo)和生產(chǎn)目標(biāo)中添加一個暫停步驟。這樣,我們就可以在部署到測試環(huán)境中后,暫停部署,等待用戶調(diào)試并驗證完成后,再繼續(xù)部署到生產(chǎn)環(huán)境中。
完成這些配置后,我們來為這個應(yīng)用添加一個 Nocalhost 的 Trait,用于云端調(diào)試。
在這里,詳細(xì)介紹一下 Nocalhost Trait 中的幾個參數(shù):
Command 分兩種,Debug 和 Run。開發(fā)時在插件右鍵點擊 Remote Debug、Remote Run 會在遠(yuǎn)端 Pod 中運行對應(yīng)的命令,從而達(dá)到云端 Debug 的效果。在這里,我們使用的是前端應(yīng)用,所以將命令設(shè)置為 yarn serve。
這里的 Image 指的是調(diào)試鏡像,Nocalhost 默認(rèn)提供了五種語言的鏡像(go/java/python/ruby/node),可以通過填寫語言名來使用內(nèi)置鏡像,當(dāng)然,也可以填寫完整鏡像名以使用自定義鏡像。
開啟 HotReload 意味著開啟熱加載功能,能夠在修改代碼后直接看到效果。PortForward 會將云端應(yīng)用的 80 端口轉(zhuǎn)發(fā)到本地的 8080 端口。
在 Sync 部分,將 Type 設(shè)置為 sendReceive (雙向同步),或者設(shè)置為 send (單向發(fā)送)。完成配置后,部署該應(yīng)用??梢钥吹剑瑧?yīng)用在部署到測試目標(biāo)之后,將自動暫停。
此時,打開 VSCode 或者 Jetbrains IDE 中的 Nocalhost 插件頁面,可以在 test namespace 下看到我們已部署的應(yīng)用,點擊應(yīng)用旁邊的錘子按鈕進(jìn)入調(diào)試模式:
進(jìn)入 Nocalhost 調(diào)試模式后,可以看到,IDE 中的終端已經(jīng)被替換成了容器的終端。通過 ls 命令,可以看到容器內(nèi)的所有文件。
此時,右鍵 Nocalhost 中的應(yīng)用,可以選擇進(jìn)入 Remote Debug 或者 Remote Run 模式。這兩個按鍵將自動執(zhí)行我們之前配置的 Debug 和 Run 命令。
進(jìn)入 Debug 模式后,可以看到,我們的云端應(yīng)用被轉(zhuǎn)發(fā)到了本地的 8080 端口:
打開本地瀏覽器,可以看到,目前我們部署的前端應(yīng)用版本為 v1.0.0:
此時,我們可以在本地 IDE 中修改一下代碼,將版本修改為 v2.0.0:
在之前的 Nocalhost 配置中,我們已經(jīng)開啟了熱加載功能。因此,我們再次刷新一下本地的 8080 端口頁面,可以看到,應(yīng)用版本已經(jīng)變成了 v2.0.0:
此時,我們可以終止 Nocalhost 的調(diào)試模式。將已通過調(diào)試的代碼推送至代碼倉庫中。
四、使用 GitOps 進(jìn)行多環(huán)境發(fā)布
在我們結(jié)束調(diào)試后,環(huán)境上的應(yīng)用依舊是之前 v1.0.0 的版本。那么,該使用什么方式來更新環(huán)境中的應(yīng)用呢?
在整個云端調(diào)試的過程中,我們修改的是源代碼。因此,我們可以借助 GitOps 的模式,以代碼作為更新來源,來完成對環(huán)境中應(yīng)用的更新。
查看 VelaUX 中部署的應(yīng)用,可以看到,每個應(yīng)用都會擁有一個默認(rèn) Trigger:
點擊 Manual Trigger 查看詳情, 可以看到,VelaUX 為每個應(yīng)用提供了一個 Webhook URL,請求該地址,并帶上需要更新的字段(如:鏡像等),可以方便快捷的完成應(yīng)用的更新。(注:由于需要對外暴露地址,需要在部署 VelaUX 的時候使用 LoadBalancer 或者使用其他方式暴露 VelaUX 的服務(wù))。
在 Curl Command 里,還提供了手動 Curl 該觸發(fā)器的請求示例。我們來詳細(xì)解析一下請求體:
{
// 必填,此次觸發(fā)的更新信息
"upgrade": {
// Key 為應(yīng)用的名稱
"": {
// 需要更新的值,這里的內(nèi)容會被 Patch 更新到應(yīng)用上
"image": ""
}
},
// 可選,此次觸發(fā)攜帶的代碼信息
"codeInfo": {
"commit": "",
"branch": "",
"user": "",
}
} upgrade 下是本次觸發(fā)要攜帶的更新信息,在應(yīng)用名下,是需要被 Patch 更新的值。默認(rèn)推薦的是更新鏡像 image,也可以擴展這里的字段來更新應(yīng)用的其他屬性。
codeInfo 中是代碼信息,可以選擇性地攜帶,比如提交 ID、分支、提交者等,一般這些值可以通過在 CI 系統(tǒng)中使用變量替換來指定。
當(dāng)我們經(jīng)過更新后的代碼被合入代碼倉庫后,我們可以通過代碼倉庫中的 CI 配置來完成和 VelaUX Trigger 的對接。以 GitLab CI 為例,可以增加如下步驟:
webhook-request:
stage: request
before_script:
- apk add --update curl && rm -rf /var/cache/apk/*
script:
- |
curl -X POST -H "Content-Type: application/json" -d '{"upgrade":{"'"$APP_NAME"'":{"image":"'"$BUILD_IMAGE"'"}},"codeInfo":{"user":"'"$CI_COMMIT_AUTHOR"'","commit":"'"$CI_COMMIT_SHA"'","branch":"'"$CI_COMMIT_BRANCH"'"}}' $WEBHOOK_URL
配置完成后,當(dāng)代碼被更新時,將自動觸發(fā)該 CI,并且更新對應(yīng) VelaUX 中的應(yīng)用。
當(dāng)鏡像被更新后,再次查看應(yīng)用的頁面,可以看到,測試環(huán)境中的應(yīng)用已經(jīng)變成了 v2.0.0 版本。
在測試部署目標(biāo)中驗證完畢后,我們可以點擊應(yīng)用工作流中的 Continue ,使最新版本的應(yīng)用部署到生產(chǎn)部署目標(biāo)中。
部署完畢后,查看生產(chǎn)環(huán)境中的應(yīng)用,可以看到,生產(chǎn)環(huán)境中已經(jīng)是最新的 v2.0.0 版本:
至此,我們就通過 KubeVela 首先在測試環(huán)境中使用 Nocalhost 進(jìn)行端云聯(lián)調(diào),驗證通過后,再通過更新代碼,使用 GitOps 來完成部署更新,并且繼續(xù)更新生產(chǎn)環(huán)境中的應(yīng)用,從而完成了一次應(yīng)用從開發(fā)到上線的完整部署流程。
五、總結(jié)
使用 KubeVela + Nocalhost,不僅能夠便捷地在開發(fā)環(huán)境中進(jìn)行云端的聯(lián)調(diào)測試,還能在測試完成后一鍵更新部署到生產(chǎn)環(huán)境,使整個開發(fā)上線過程穩(wěn)定可靠。
參考鏈接:
[1] Using GitOps + KubeVela for Application Continuous Delivery
https://kubevela.io/blog/2021/10/10/kubevela-gitops
[2] 官方文檔地址:https://kubevela.io/docs/install#4-install-velaux
當(dāng)前標(biāo)題:使用Nocalhost與KubeVela端云聯(lián)調(diào),一鍵完成多集群混合云環(huán)境部署
本文路徑:http://www.fisionsoft.com.cn/article/cohehoe.html


咨詢
建站咨詢
