自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Nocalhost 與 KubeVela 端云聯(lián)調(diào),一鍵完成多集群混合云環(huán)境部署

精選
云計(jì)算 云原生
使用 KubeVela + Nocalhost,不僅能夠便捷地在開(kāi)發(fā)環(huán)境中進(jìn)行云端的聯(lián)調(diào)測(cè)試,還能在測(cè)試完成后一鍵更新部署到生產(chǎn)環(huán)境,使整個(gè)開(kāi)發(fā)上線過(guò)程穩(wěn)定可靠。

作者 |  霧霧、玉易才(KubeVela、Nocalhost 團(tuán)隊(duì))

在云原生快速發(fā)展的當(dāng)下,如何讓云的技術(shù)賦能業(yè)務(wù)開(kāi)發(fā)?在上線應(yīng)用時(shí),如何讓云的開(kāi)發(fā)者在現(xiàn)代化的多集群、混合云環(huán)境中便捷地進(jìn)行應(yīng)用的開(kāi)發(fā)和調(diào)試?在部署過(guò)程中,又該如何讓?xiě)?yīng)用部署具備充分的驗(yàn)證和可靠性?

這些至關(guān)重要的問(wèn)題,都是我們急需解決的。

在本文中,我們將結(jié)合 KubeVela 以及 Nocalhost 開(kāi)源項(xiàng)目,給出一個(gè)基于 Kubernetes 和容器生態(tài)的端云聯(lián)調(diào)、一鍵完成多集群混合環(huán)境部署的解決方案,來(lái)回答上述問(wèn)題。

當(dāng)一個(gè)新應(yīng)用需要開(kāi)發(fā)上線時(shí),我們希望本地 IDE 中調(diào)試的結(jié)果能和云端最終部署的狀態(tài)保持一致。這樣一致的姿態(tài),能最大程度上給予我們部署的信心,并且讓我們可以采用類(lèi)似 GitOps 這種更高效、敏捷的方式迭代應(yīng)用更新。即:當(dāng)新代碼被推送至代碼倉(cāng)庫(kù)中后,環(huán)境中的應(yīng)用會(huì)自動(dòng)化地實(shí)時(shí)更新。同時(shí),基于端云聯(lián)調(diào)的模式,可以讓這整個(gè)過(guò)程不僅敏捷高效、同樣更加穩(wěn)定可靠。

基于 KubeVela 和 Nocalhost,我們可以完成這樣一種部署過(guò)程:

如圖:通過(guò) KubeVela 創(chuàng)建應(yīng)用,將應(yīng)用部署到測(cè)試環(huán)境后,暫停部署。使用 Nocalhost 在測(cè)試環(huán)境中對(duì)應(yīng)用進(jìn)行云端聯(lián)調(diào)。調(diào)試完畢后,將調(diào)試完畢的代碼推送到代碼倉(cāng)庫(kù),通過(guò) KubeVela 進(jìn)行 GitOps 部署,在測(cè)試環(huán)境進(jìn)行驗(yàn)證后,再同步更新到生產(chǎn)環(huán)境。

在本文中,我們將介紹如何使用 KubeVela 及 Nocalhost 完成上述云端應(yīng)用開(kāi)發(fā)及上線的全過(guò)程。

一、什么是 KubeVela

KubeVela 是一個(gè)簡(jiǎn)單易用且高度可擴(kuò)展的應(yīng)用交付和管理平臺(tái),基于 Kubernetes 與 OAM 技術(shù)構(gòu)建。其核心功能是讓開(kāi)發(fā)人員方便快捷地在 Kubernetes 上定義與交付現(xiàn)代微服務(wù)應(yīng)用,而無(wú)需了解任何 Kubernetes 本身相關(guān)的細(xì)節(jié)。

KubeVela 提供了 VelaUX 功能,能夠讓整個(gè)應(yīng)用分發(fā)的過(guò)程可視化,使應(yīng)用組裝、分發(fā)、交付的流程變得更簡(jiǎn)單。在 UX 上,不僅可以便捷地通過(guò)頁(yè)面及時(shí)了解整個(gè)交付鏈路狀態(tài),還可以通過(guò)配置觸發(fā)器,使應(yīng)用隨著制品倉(cāng)庫(kù)的更新而更新。

而在本文的場(chǎng)景中,KubeVela 提供了以下能力:

1.完整的 GitOps 發(fā)布:

  • KubeVela 同時(shí)支持了 Pull 模式以及 Push 模式的 GitOps 發(fā)布:我們只需要將更新后的代碼推送到代碼倉(cāng)庫(kù),KubeVela 就能自動(dòng)基于最新代碼完成部署。在本文中,我們將使用 Push 模式的 GitOps,關(guān)于 Pull 模式的 GitOps 支持,可以查看文末文章[1]。

2.強(qiáng)大的工作流能力,實(shí)現(xiàn)跨環(huán)境(集群)部署、審批以及通知:

  • KubeVela 借助其工作流能力,可以輕松讓?xiě)?yīng)用實(shí)現(xiàn)跨環(huán)境部署,并且支持用戶在編排工作流的過(guò)程中,加入例如人工審批、消息通知等功能,使整個(gè)部署過(guò)程生產(chǎn)級(jí)可用。

3.應(yīng)用抽象能力,讓開(kāi)發(fā)者都能看懂使用并且自定義基礎(chǔ)設(shè)施能力

KubeVela 遵循 OAM 的開(kāi)放應(yīng)用模型,提供了一套簡(jiǎn)單易用的應(yīng)用抽象能力,使開(kāi)發(fā)者能夠更加清晰地理解應(yīng)用的功能,并且可以自定義基礎(chǔ)設(shè)施能力。例如,對(duì)于一個(gè)簡(jiǎn)單的應(yīng)用來(lái)說(shuō),我們可以將其劃分為組件,運(yùn)維特征,工作流三大部分。在本文的例子中,我們的組件是一個(gè)簡(jiǎn)單的業(yè)務(wù)應(yīng)用;在運(yùn)維特征部分,我們?yōu)檫@個(gè)組件綁定了一個(gè) Nocalhost 的運(yùn)維特征,讓這個(gè)組件能夠使用 Nocalhost 端云聯(lián)調(diào)的能力;在工作流部分,通過(guò)多環(huán)境管理,我們可以先讓這個(gè)組件部署在測(cè)試環(huán)境,部署完成后自動(dòng)暫停工作流的發(fā)布,直至人工驗(yàn)證審批通過(guò)后,再進(jìn)行生產(chǎn)環(huán)境的部署。

二、什么是 Nocalhost

Nocalhost 是一個(gè)允許開(kāi)發(fā)者直接在 Kubernetes 集群內(nèi)開(kāi)發(fā)應(yīng)用的工具。

Nocalhost 的核心功能是:提供 Nocalhost IDE 插件(包括 VSCode 和 Jetbrains 插件),將遠(yuǎn)端的工作負(fù)載更改為開(kāi)發(fā)模式。在開(kāi)發(fā)模式下,容器的鏡像將被替換為包含開(kāi)發(fā)工具(例如 JDK、Go、Python 環(huán)境等)的開(kāi)發(fā)鏡像。當(dāng)開(kāi)發(fā)者在本地編寫(xiě)代碼時(shí),任何修改都會(huì)實(shí)時(shí)被同步到遠(yuǎn)端開(kāi)發(fā)容器中,應(yīng)用程序會(huì)立即更新(取決于應(yīng)用的熱加載機(jī)制或重新運(yùn)行應(yīng)用),開(kāi)發(fā)容器將繼承原始工作負(fù)載所有的聲明式配置(ConfigMap、Secret、Volume、Env 等)。

Nocalhost 還提供:VSCode 和 Jetbrains IDE 一鍵 Debug 和 HotReload;在 IDE 內(nèi)直接提供開(kāi)發(fā)容器的終端,獲得和本地開(kāi)發(fā)一致的體驗(yàn);提供基于 Namespace 隔離的開(kāi)發(fā)空間和 Mesh 開(kāi)發(fā)空間 。此外,Nocalhost 還提供了 Server 端幫助企業(yè)管理 Kubernetes 應(yīng)用、開(kāi)發(fā)者和開(kāi)發(fā)空間,方便企業(yè)統(tǒng)一管理各類(lèi)開(kāi)發(fā)和測(cè)試環(huán)境。

在使用 Nocalhost 開(kāi)發(fā) Kubernetes 的應(yīng)用過(guò)程中,免去了鏡像構(gòu)建,更新鏡像版本,等待集群調(diào)度 Pod 的過(guò)程,把編碼/測(cè)試/調(diào)試反饋循環(huán)(code/test/debug cycle)從分鐘級(jí)別降低到了秒級(jí)別,大幅提升開(kāi)發(fā)效率。

三、調(diào)試云端應(yīng)用

我們以一個(gè)簡(jiǎn)單的前端應(yīng)用為例,首先,我們通過(guò) VelaUX 進(jìn)行多環(huán)境部署。

關(guān)于如何開(kāi)啟 KubeVela 的 VelaUX 插件,請(qǐng)查看文末官方文檔[2]。

1.使用 VelaUX 部署云端應(yīng)用

在 VelaUX 中創(chuàng)建一個(gè)環(huán)境,每個(gè)環(huán)境中可以有多個(gè)部署目標(biāo),我們以一個(gè)包含了測(cè)試部署目標(biāo)以及生產(chǎn)部署目標(biāo)的環(huán)境為例。

首先,創(chuàng)建兩個(gè)部署目標(biāo),一個(gè)用于測(cè)試部署,一個(gè)用于生產(chǎn)部署。這里的部署目標(biāo)會(huì)分別將資源下發(fā)到 local 集群的 test 以及 prod namespace 當(dāng)中。你也可以通過(guò) VelaUX 的集群管理功能,來(lái)添加新的集群用于部署。

創(chuàng)建完部署目標(biāo)后,新建一個(gè)環(huán)境,環(huán)境中包含這兩個(gè)部署目標(biāo)。

創(chuàng)建完環(huán)境后,新建應(yīng)用來(lái)進(jìn)行云端調(diào)試。這個(gè)前端應(yīng)用會(huì)在 80 端口暴露服務(wù),因此,我們把這個(gè)應(yīng)用的 80 端口打開(kāi)。

創(chuàng)建完應(yīng)用后,應(yīng)用會(huì)默認(rèn)帶一個(gè)工作流,自動(dòng)將應(yīng)用部署到兩個(gè)部署目標(biāo)當(dāng)中。但我們并不希望未經(jīng)過(guò)調(diào)試的應(yīng)用直接部署到生產(chǎn)目標(biāo)中。因此,我們來(lái)編輯一下這個(gè)默認(rèn)工作流:在部署到測(cè)試目標(biāo)和生產(chǎn)目標(biāo)中添加一個(gè)暫停步驟。這樣,我們就可以在部署到測(cè)試環(huán)境中后,暫停部署,等待用戶調(diào)試并驗(yàn)證完成后,再繼續(xù)部署到生產(chǎn)環(huán)境中。

完成這些配置后,我們來(lái)為這個(gè)應(yīng)用添加一個(gè) Nocalhost 的 Trait,用于云端調(diào)試。

在這里,詳細(xì)介紹一下 Nocalhost Trait 中的幾個(gè)參數(shù):

Command 分兩種,Debug 和 Run。開(kāi)發(fā)時(shí)在插件右鍵點(diǎn)擊 Remote Debug、Remote Run 會(huì)在遠(yuǎn)端 Pod 中運(yùn)行對(duì)應(yīng)的命令,從而達(dá)到云端 Debug 的效果。在這里,我們使用的是前端應(yīng)用,所以將命令設(shè)置為 yarn serve。

這里的 Image 指的是調(diào)試鏡像,Nocalhost 默認(rèn)提供了五種語(yǔ)言的鏡像(go/java/python/ruby/node),可以通過(guò)填寫(xiě)語(yǔ)言名來(lái)使用內(nèi)置鏡像,當(dāng)然,也可以填寫(xiě)完整鏡像名以使用自定義鏡像。

開(kāi)啟 HotReload 意味著開(kāi)啟熱加載功能,能夠在修改代碼后直接看到效果。PortForward 會(huì)將云端應(yīng)用的 80 端口轉(zhuǎn)發(fā)到本地的 8080 端口。

在 Sync 部分,將 Type 設(shè)置為 sendReceive (雙向同步),或者設(shè)置為 send (單向發(fā)送)。完成配置后,部署該應(yīng)用。可以看到,應(yīng)用在部署到測(cè)試目標(biāo)之后,將自動(dòng)暫停。

此時(shí),打開(kāi) VSCode 或者 Jetbrains IDE 中的 Nocalhost 插件頁(yè)面,可以在 test namespace 下看到我們已部署的應(yīng)用,點(diǎn)擊應(yīng)用旁邊的錘子按鈕進(jìn)入調(diào)試模式:

進(jìn)入 Nocalhost 調(diào)試模式后,可以看到,IDE 中的終端已經(jīng)被替換成了容器的終端。通過(guò) ls 命令,可以看到容器內(nèi)的所有文件。

此時(shí),右鍵 Nocalhost 中的應(yīng)用,可以選擇進(jìn)入 Remote Debug 或者 Remote Run 模式。這兩個(gè)按鍵將自動(dòng)執(zhí)行我們之前配置的 Debug 和 Run 命令。

進(jìn)入 Debug 模式后,可以看到,我們的云端應(yīng)用被轉(zhuǎn)發(fā)到了本地的 8080 端口:

打開(kāi)本地瀏覽器,可以看到,目前我們部署的前端應(yīng)用版本為 v1.0.0:

此時(shí),我們可以在本地 IDE 中修改一下代碼,將版本修改為 v2.0.0:

在之前的 Nocalhost 配置中,我們已經(jīng)開(kāi)啟了熱加載功能。因此,我們?cè)俅嗡⑿乱幌卤镜氐?8080 端口頁(yè)面,可以看到,應(yīng)用版本已經(jīng)變成了 v2.0.0:

此時(shí),我們可以終止 Nocalhost 的調(diào)試模式。將已通過(guò)調(diào)試的代碼推送至代碼倉(cāng)庫(kù)中。

四、使用 GitOps 進(jìn)行多環(huán)境發(fā)布

在我們結(jié)束調(diào)試后,環(huán)境上的應(yīng)用依舊是之前 v1.0.0 的版本。那么,該使用什么方式來(lái)更新環(huán)境中的應(yīng)用呢?

在整個(gè)云端調(diào)試的過(guò)程中,我們修改的是源代碼。因此,我們可以借助 GitOps 的模式,以代碼作為更新來(lái)源,來(lái)完成對(duì)環(huán)境中應(yīng)用的更新。

查看 VelaUX 中部署的應(yīng)用,可以看到,每個(gè)應(yīng)用都會(huì)擁有一個(gè)默認(rèn) Trigger:

點(diǎn)擊 Manual Trigger 查看詳情, 可以看到,VelaUX 為每個(gè)應(yīng)用提供了一個(gè) Webhook URL,請(qǐng)求該地址,并帶上需要更新的字段(如:鏡像等),可以方便快捷的完成應(yīng)用的更新。(注:由于需要對(duì)外暴露地址,需要在部署 VelaUX 的時(shí)候使用 LoadBalancer 或者使用其他方式暴露 VelaUX 的服務(wù))。

在 Curl Command 里,還提供了手動(dòng) Curl 該觸發(fā)器的請(qǐng)求示例。我們來(lái)詳細(xì)解析一下請(qǐng)求體:

{
// 必填,此次觸發(fā)的更新信息
"upgrade": {
// Key 為應(yīng)用的名稱(chēng)
"<application-name>": {
// 需要更新的值,這里的內(nèi)容會(huì)被 Patch 更新到應(yīng)用上
"image": "<image-name>"
}
},
// 可選,此次觸發(fā)攜帶的代碼信息
"codeInfo": {
"commit": "<commit-id>",
"branch": "<branch>",
"user": "<user>",
}
}

upgrade 下是本次觸發(fā)要攜帶的更新信息,在應(yīng)用名下,是需要被 Patch 更新的值。默認(rèn)推薦的是更新鏡像 image,也可以擴(kuò)展這里的字段來(lái)更新應(yīng)用的其他屬性。

codeInfo 中是代碼信息,可以選擇性地?cái)y帶,比如提交 ID、分支、提交者等,一般這些值可以通過(guò)在 CI 系統(tǒng)中使用變量替換來(lái)指定。

當(dāng)我們經(jīng)過(guò)更新后的代碼被合入代碼倉(cāng)庫(kù)后,我們可以通過(guò)代碼倉(cāng)庫(kù)中的 CI 配置來(lái)完成和 VelaUX Trigger 的對(duì)接。以 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)代碼被更新時(shí),將自動(dòng)觸發(fā)該 CI,并且更新對(duì)應(yīng) VelaUX 中的應(yīng)用。

當(dāng)鏡像被更新后,再次查看應(yīng)用的頁(yè)面,可以看到,測(cè)試環(huán)境中的應(yīng)用已經(jīng)變成了 v2.0.0 版本。

在測(cè)試部署目標(biāo)中驗(yàn)證完畢后,我們可以點(diǎn)擊應(yīng)用工作流中的 Continue ,使最新版本的應(yīng)用部署到生產(chǎn)部署目標(biāo)中。

部署完畢后,查看生產(chǎn)環(huán)境中的應(yīng)用,可以看到,生產(chǎn)環(huán)境中已經(jīng)是最新的 v2.0.0 版本:

至此,我們就通過(guò) KubeVela 首先在測(cè)試環(huán)境中使用 Nocalhost 進(jìn)行端云聯(lián)調(diào),驗(yàn)證通過(guò)后,再通過(guò)更新代碼,使用 GitOps 來(lái)完成部署更新,并且繼續(xù)更新生產(chǎn)環(huán)境中的應(yīng)用,從而完成了一次應(yīng)用從開(kāi)發(fā)到上線的完整部署流程。

五、總結(jié)

使用 KubeVela + Nocalhost,不僅能夠便捷地在開(kāi)發(fā)環(huán)境中進(jìn)行云端的聯(lián)調(diào)測(cè)試,還能在測(cè)試完成后一鍵更新部署到生產(chǎn)環(huán)境,使整個(gè)開(kāi)發(fā)上線過(guò)程穩(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

責(zé)任編輯:武曉燕 來(lái)源: 阿里巴巴中間件
相關(guān)推薦

2012-04-20 14:33:10

海爾一體機(jī)

2023-06-15 10:00:00

Jenkins任務(wù)操作

2023-04-06 17:17:29

混合云Kubernetes多集群

2016-10-13 15:03:27

混合云多云環(huán)境微服務(wù)

2024-02-21 07:48:37

KubeSlice云原生Kubernetes

2015-09-08 16:07:36

2018-08-10 15:08:14

云計(jì)算混合云數(shù)據(jù)中心

2021-05-20 14:17:05

云計(jì)算混合云架構(gòu)

2018-01-09 16:45:31

離線網(wǎng)絡(luò)網(wǎng)絡(luò)安全一鍵式部署

2013-06-25 16:36:43

惠普世界之旅惠普云計(jì)算惠普混合云

2019-08-28 12:02:04

Helm云原生一鍵部署

2013-11-14 10:24:02

混合云混合云部署公有云

2021-06-08 09:54:18

云計(jì)算混合云Region架構(gòu)

2017-03-15 18:49:08

云計(jì)算

2023-03-14 21:19:29

云函數(shù)云數(shù)據(jù)庫(kù)

2013-02-19 14:35:00

GitHubBoxenPuppet 配置

2019-05-21 22:56:08

阿里云數(shù)據(jù)庫(kù)PolarDB
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)