乐趣区

关于前端:使用-Nocalhost-与-KubeVela-端云联调一键完成多集群混合云环境部署

作者:雾雾、玉易才(KubeVela、Nocalhost 团队)
在云原生疾速倒退的当下,如何让云的技术赋能业务开发?在上线利用时,如何让云的开发者在现代化的多集群、混合云环境中便捷地进行利用的开发和调试?在部署过程中,又该如何让利用部署具备充沛的验证和可靠性?

这些至关重要的问题,都是咱们急需解决的。

在本文中,咱们将联合 KubeVela 以及 Nocalhost 开源我的项目,给出一个基于 Kubernetes 和容器生态的端云联调、一键实现多集群混合环境部署的解决方案,来答复上述问题。

当一个新利用须要开发上线时,咱们心愿本地 IDE 中调试的后果能和云端最终部署的状态保持一致。这样统一的姿势,能最大水平上给予咱们部署的信念,并且让咱们能够采纳相似 GitOps 这种更高效、麻利的形式迭代利用更新。即:当新代码被推送至代码仓库中后,环境中的利用会自动化地实时更新。同时,基于端云联调的模式,能够让这整个过程不仅麻利高效、同样更加稳固牢靠。

基于 KubeVela 和 Nocalhost,咱们能够实现这样一种部署过程:

如图:通过 KubeVela 创立利用,将利用部署到测试环境后,暂停部署。应用 Nocalhost 在测试环境中对利用进行云端联调。调试结束后,将调试结束的代码推送到代码仓库,通过 KubeVela 进行 GitOps 部署,在测试环境进行验证后,再同步更新到生产环境。

在本文中,咱们将介绍如何应用 KubeVela 及 Nocalhost 实现上述云端利用开发及上线的全过程。

什么是 KubeVela

KubeVela 是一个简略易用且高度可扩大的利用交付和治理平台,基于 Kubernetes 与 OAM 技术构建。其外围性能是让开发人员方便快捷地在 Kubernetes 上定义与交付古代微服务利用,而无需理解任何 Kubernetes 自身相干的细节。

KubeVela 提供了 VelaUX 性能,可能让整个利用散发的过程可视化,使利用组装、散发、交付的流程变得更简略。在 UX 上,不仅能够便捷地通过页面及时理解整个交付链路状态,还能够通过配置触发器,使利用随着制品仓库的更新而更新。

而在本文的场景中,KubeVela 提供了以下能力:

  1. 残缺的 GitOps 公布:
    • KubeVela 同时反对了 Pull 模式以及 Push 模式的 GitOps 公布:咱们只须要将更新后的代码推送到代码仓库,KubeVela 就能主动基于最新代码实现部署。在本文中,咱们将应用 Push 模式的 GitOps,对于 Pull 模式的 GitOps 反对,能够查看文末文章 [1]。
  2. 弱小的工作流能力,实现跨环境(集群)部署、审批以及告诉:
    • KubeVela 借助其工作流能力,能够轻松让利用实现跨环境部署,并且反对用户在编排工作流的过程中,退出例如人工审批、音讯告诉等性能,使整个部署过程生产级可用。
  3. 利用形象能力,让开发者都能看懂应用并且自定义基础设施能力
    • KubeVela 遵循 OAM 的凋谢利用模型,提供了一套简略易用的利用形象能力,使开发者可能更加清晰地了解利用的性能,并且能够自定义基础设施能力。例如,对于一个简略的利用来说,咱们能够将其划分为组件,运维特色,工作流三大部分。在本文的例子中,咱们的组件是一个简略的业务利用;在运维特色局部,咱们为这个组件绑定了一个 Nocalhost 的运维特色,让这个组件可能应用 Nocalhost 端云联调的能力;在工作流局部,通过多环境治理,咱们能够先让这个组件部署在测试环境,部署实现后主动暂停工作流的公布,直至人工验证审批通过后,再进行生产环境的部署。

什么是 Nocalhost

Nocalhost 是一个容许开发者间接在 Kubernetes 集群内开发利用的工具。
Nocalhost 的外围性能是:提供 Nocalhost IDE 插件(包含 VSCode 和 Jetbrains 插件),将远端的工作负载更改为开发模式。在开发模式下,容器的镜像将被替换为蕴含开发工具(例如 JDK、Go、Python 环境等)的开发镜像。当开发者在本地编写代码时,任何批改都会实时被同步到远端开发容器中,应用程序会立刻更新(取决于利用的热加载机制或从新运行利用),开发容器将继承原始工作负载所有的申明式配置(ConfigMap、Secret、Volume、Env 等)。

Nocalhost 还提供:VSCode 和 Jetbrains IDE 一键 Debug 和 HotReload;在 IDE 内间接提供开发容器的终端,取得和本地开发统一的体验;提供基于 Namespace 隔离的开发空间和 Mesh 开发空间。此外,Nocalhost 还提供了 Server 端帮忙企业治理 Kubernetes 利用、开发者和开发空间,不便企业对立治理各类开发和测试环境。

在应用 Nocalhost 开发 Kubernetes 的利用过程中,免去了镜像构建,更新镜像版本,期待集群调度 Pod 的过程,把编码 / 测试 / 调试反馈循环(code/test/debug cycle)从分钟级别升高到了秒级别,大幅晋升开发效率。

调试云端利用

咱们以一个简略的前端利用为例,首先,咱们通过 VelaUX 进行多环境部署。

对于如何开启 KubeVela 的 VelaUX 插件,请查看文末官网文档 [2]。

应用 VelaUX 部署云端利用

在 VelaUX 中创立一个环境,每个环境中能够有多个部署指标,咱们以一个蕴含了测试部署指标以及生产部署指标的环境为例。

首先,创立两个部署指标,一个用于测试部署,一个用于生产部署。这里的部署指标会别离将资源下发到 local 集群的 test 以及 prod namespace 当中。你也能够通过 VelaUX 的集群治理性能,来增加新的集群用于部署。

创立完部署指标后,新建一个环境,环境中蕴含这两个部署指标。

创立完环境后,新建利用来进行云端调试。这个前端利用会在 80 端口裸露服务,因而,咱们把这个利用的 80 端口关上。

创立完利用后,利用会默认带一个工作流,主动将利用部署到两个部署指标当中。但咱们并不心愿未通过调试的利用间接部署到生产指标中。因而,咱们来编辑一下这个默认工作流:在部署到测试指标和生产指标中增加一个暂停步骤。这样,咱们就能够在部署到测试环境中后,暂停部署,期待用户调试并验证实现后,再持续部署到生产环境中。

实现这些配置后,咱们来为这个利用增加一个 Nocalhost 的 Trait,用于云端调试。

在这里,具体介绍一下 Nocalhost Trait 中的几个参数:

Command 分两种,Debug 和 Run。开发时在插件右键点击 Remote Debug、Remote Run 会在远端 Pod 中运行对应的命令,从而达到云端 Debug 的成果。在这里,咱们应用的是前端利用,所以将命令设置为 yarn serve。

这里的 Image 指的是调试镜像,Nocalhost 默认提供了五种语言的镜像(go/java/python/ruby/node),能够通过填写语言名来应用内置镜像,当然,也能够填写残缺镜像名以应用自定义镜像。

开启 HotReload 意味着开启热加载性能,可能在批改代码后间接看到成果。PortForward 会将云端利用的 80 端口转发到本地的 8080 端口。

在 Sync 局部,将 Type 设置为 sendReceive (双向同步),或者设置为 send(单向发送)。实现配置后,部署该利用。能够看到,利用在部署到测试指标之后,将主动暂停。

此时,关上 VSCode 或者 Jetbrains IDE 中的 Nocalhost 插件页面,能够在 test namespace 下看到咱们已部署的利用,点击利用旁边的锤子按钮进入调试模式:

进入 Nocalhost 调试模式后,能够看到,IDE 中的终端曾经被替换成了容器的终端。通过 ls 命令,能够看到容器内的所有文件。

此时,右键 Nocalhost 中的利用,能够抉择进入 Remote Debug 或者 Remote Run 模式。这两个按键将主动执行咱们之前配置的 Debug 和 Run 命令。

进入 Debug 模式后,能够看到,咱们的云端利用被转发到了本地的 8080 端口:

关上本地浏览器,能够看到,目前咱们部署的前端利用版本为 v1.0.0:

此时,咱们能够在本地 IDE 中批改一下代码,将版本批改为 v2.0.0:

在之前的 Nocalhost 配置中,咱们曾经开启了热加载性能。因而,咱们再次刷新一下本地的 8080 端口页面,能够看到,利用版本曾经变成了 v2.0.0:

此时,咱们能够终止 Nocalhost 的调试模式。将已通过调试的代码推送至代码仓库中。

应用 GitOps 进行多环境公布

在咱们完结调试后,环境上的利用仍旧是之前 v1.0.0 的版本。那么,该应用什么形式来更新环境中的利用呢?

在整个云端调试的过程中,咱们批改的是源代码。因而,咱们能够借助 GitOps 的模式,以代码作为更新起源,来实现对环境中利用的更新。

查看 VelaUX 中部署的利用,能够看到,每个利用都会领有一个默认 Trigger:

点击 Manual Trigger 查看详情,能够看到,VelaUX 为每个利用提供了一个 Webhook URL,申请该地址,并带上须要更新的字段(如:镜像等),能够方便快捷的实现利用的更新。(注:因为须要对外裸露地址,须要在部署 VelaUX 的时候应用 LoadBalancer 或者应用其余形式裸露 VelaUX 的服务)。

在 Curl Command 里,还提供了手动 Curl 该触发器的申请示例。咱们来具体解析一下申请体:

{
  // 必填,此次触发的更新信息
  "upgrade": {
    // Key 为利用的名称
    "<application-name>": {
      // 须要更新的值,这里的内容会被 Patch 更新到利用上
      "image": "<image-name>"
    }
  },
  // 可选,此次触发携带的代码信息
  "codeInfo": {
    "commit": "<commit-id>",
    "branch": "<branch>",
    "user": "<user>",
  }
}

upgrade 下是本次触发要携带的更新信息,在利用名下,是须要被 Patch 更新的值。默认举荐的是更新镜像 image,也能够扩大这里的字段来更新利用的其余属性。

codeInfo 中是代码信息,能够选择性地携带,比方提交 ID、分支、提交者等,个别这些值能够通过在 CI 零碎中应用变量替换来指定。

当咱们通过更新后的代码被合入代码仓库后,咱们能够通过代码仓库中的 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

配置实现后,当代码被更新时,将主动触发该 CI,并且更新对应 VelaUX 中的利用。

当镜像被更新后,再次查看利用的页面,能够看到,测试环境中的利用曾经变成了 v2.0.0 版本。

在测试部署指标中验证结束后,咱们能够点击利用工作流中的 Continue,使最新版本的利用部署到生产部署指标中。

部署结束后,查看生产环境中的利用,能够看到,生产环境中曾经是最新的 v2.0.0 版本:

至此,咱们就通过 KubeVela 首先在测试环境中应用 Nocalhost 进行端云联调,验证通过后,再通过更新代码,应用 GitOps 来实现部署更新,并且持续更新生产环境中的利用,从而实现了一次利用从开发到上线的残缺部署流程。

总结

应用 KubeVela + Nocalhost,不仅可能便捷地在开发环境中进行云端的联调测试,还能在测试实现后一键更新部署到生产环境,使整个开发上线过程稳固牢靠。

* 参考链接:
[1] Using GitOps + KubeVela for Application Continuous Delivery
https://kubevela.io/blog/2021…
[2] 官网文档地址:https://kubevela.io/docs/inst…

您能够通过如下资料理解更多对于 KubeVela 以及 OAM 我的项目的细节:
• 我的项目代码库:github.com/oam-dev/kubevela 欢送 Star/Watch/Fork!
• 我的项目官方主页与文档:kubevela.io,从 1.1 版本开始,已提供中文、英文文档,更多语言文档欢送开发者进行翻译。
• 我的项目钉钉群:23310022;Slack:CNCF #kubevela Channel*

退出移动版