前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >秒级体验本地调试远程 k8s 中的服务

秒级体验本地调试远程 k8s 中的服务

作者头像
程序猿Damon
发布2023-09-04 13:03:24
7520
发布2023-09-04 13:03:24
举报

背景

在这个以k8s为云os的时代,程序员在日常的开发过程中,肯定会遇到各种问题,比如:本地开发完,需要部署到远程k8s集群,本地如何直接操作呢?又如:提测到测试环境发现有问题,或者nightly环境本身没过,这时候,可能需要一些调试。下面介绍一款开源已久的产品来体验秒级体验下本地操作远程k8s、直接在调试远程代码。

借助 Nocalhost 实现 k8s 应用秒级的本地开发体验

直入主题,Nocalhost 是腾讯云 CODING 在 2020 年开源的项目,同时它也是云原生开发领域下第一个由国人主导并进入 CNCF Sandbox 的项目。

Nocalhost 开发实战

安装 Nocalhost 插件

首先,需要先安装 Nocalhost IDE 插件。Nocalhost 支持 VS Code 和 Jetbrains 全系列的 IDE,你可以在市场中搜索。

接下来,我以 Jetbrains Goland 插件为例简单介绍如何安装 Nocalhost 插件。

首先,在 IDEA Goland 插件市场中搜索 Nocalhost,然后点击“安装”按钮进行安装,如下图所示。

在安装 IDE 插件之后,Nocalhost 会自动下载 nhctl 工具,你可以在 Jetbrains Goland 的右下角查看下载进度,nhctl 是 Nocalhost 的核心组件,它为插件提供 Kubernetes API 调用能力。

集成远程 k8s 集群

接下来,添加 Kubernetes 集群,在右侧菜单栏中打开 Nocalhost 插件,如果你已经提前准备好了 K8s 集群,Nocalhost 就会自动识别,点击“Add”即可添加集群。

在上面的第二步,选择k8s的kubeconfig,选择完后,会自动检测是否存在该集群:

如果不存在该集群,会提示:

最后,在 Add 完成功后,会在该菜单下看到集群相关的信息以及资源:

部署应用

接着,我们就可以部署应用了,先来看看部署官方给的示例应用,首先鼠标移到default命名空间位置右击,然后可以看到Deploy App:

点击部署 app后,出现图:

我们点击第四个按钮Deploy Demo,此时,Nocalhost 将自动从 GitHub 克隆示例应用仓库,并将它部署到集群的 default 命名空间下。同时,此时,控制台就会打印如下日志:

此时,表示应用部署成功,Nocalhost 将自动进行端口转发,并打开浏览器访问http://127.0.0.1:39080/productpage示例应用页面,如下图所示:

简单介绍一下这个示例应用,这是一个图书管理系统,展示了书籍的详情信息、评价、作者信息、评分。每部分信息都是由不同的微服务输出的,示例应用一共有 5 个微服务组成,它们分别是 Productpage 服务、Reviews 服务、Details 服务、Rattings 服务和 Authors 服务。其中,Productpage 服务负责输出首页以及请求其他的微服务,也是应用的入口,其他服务根据字面意思分别输出了其他的内容。

秒级开发循环反馈

接下来我们来看一下如何使用 Nocalhost 打破传统的开发循环反馈,并获得秒级的 Kubernetes 应用开发体验。

我们在 Nocalhost 插件中点击 default 展开命名空间,然后点击 bookinfo 展开应用,点击 Workload 展开工作负载,最后,点击 Deployment 查看工作负载列表:

此时,将鼠标移动到 authors 服务,点击右侧的“绿色锤子”按钮进入该服务的开发模式:

然后,在弹出的对话框中选择“Clone from Git Repo”,并选择一个本地目录用来存储源码:

首次打开会出现是否信任,直接点击信任:

点击确认后, Nocalhost 将自动克隆 authors 服务的源码到所选择的目录下,并将源码通过新的 UI 窗口打开:

此时,在新的窗口的右下角你会看到 Nocalhost 进入开发模式的提示,等待片刻后,将获得一个远端容器的终端:

注意,这个终端并不是本地的终端,而是 authors 服务在开发模式下的终端。也就是说,在此终端下执行的所有命令实际上都是在 authors 服务的容器里执行的。此时,你可以在终端内执行 ls 命令来查看容器的文件目录:

由于这个容器启动的逻辑是直接通过运行源码,所以这里有源码,并且执行go run app.go

此时,我们可以任意改代码进行调试了吧~

容器热加载

其实,可以看出 Nocalhost 是通过文件同步的技术来实现本地和远端代码一致的,在实际编码过程中,每次在本地修改源码后,我们往往需要手动重启容器内的业务进程才能看到编码效果。

那么,能不能更进一步,实现修改代码后自动重载呢?Nocalhost 同样也为我们提供了和语言无关的容器热加载,也就是说,当本地有任何代码变更时,Nocalhost 都会自动帮助我们重启容器内的业务进程,达到容器热加载的目的。接下来,我们一起来体验这个功能。首先,在当前 VS Code 窗口中重新打开 Nocalhost 插件,找到 authors 服务。此时,你将看到该服务左侧有一个“绿色锤子”图标,这表示这个服务正在开发模式当中,如下图所示:

接下来,右击 authors 服务,选择一个选项 Remote Run:

注意,在点击 Remote Run 之前,一定要先确保已经通过 Ctrl+C 的方式手动停止了容器内的业务进程,这可以避免重复运行业务进程导致的端口冲突。

现在,Nocalhost 将自动开启一个新的终端,并自动启动业务进程:

到这里,可能有疑惑,Nocalhost 怎么知道我的业务的启动命令呢?答案是通过为 Nocalhost 配置启动命令。你可以通过点击 authors 服务右侧的“设置”按钮,在弹出的对话框中选择“取消”来查看配置文件中的 command.run 字段。实际上,Nocalhost 是通过运行配置的 run.sh 脚本来启动业务的。

最后,你可以在终端窗口中通过 Ctrl+C 的方式来中断容器热加载。到这里,Nocalhost 容器热加载的全过程就已经体验完了。

一键调试

除了容器热加载以外,Nocalhost 还为我们提供了便利的一键远程调试功能。同样地,找到 authors 服务,右击选择“Remote Debug”来进入远程调试。

接下来,Nocalhost 就会以调试模式启动业务进程,然后通过 Kubernetes 端口转发的方式将远端的调试端口转发到本地,并控制调试器连接到调试端口。需要注意的是,由于 authors 服务是 Golang 编写的,所以调试依赖于本地的 Golang 开发工具,如果你的电脑里没有 Golang 开发环境,Nocalhost 将提示你安装相关工具和插件。进入调试后,你将看到窗口右下角出现准备连接调试器,如下图所示:

后面就可以打断点进行Debug模式调试了。

在这个调试例子中,如果你用的是 M1 芯片的 Mac,那么你可能会发现在调试过程中 IDE 的调试器一直无法连接到远端容器,这时候,你还需要进行下面的操作。在 Nocalhost 插件中点击 authors 服务的“设置”按钮进入服务的开发配置页,并将 image 字段修改为 okteto/golang:1.19,然后,点击“红色锤子”退出 authors 服务的开发模式,退出完成后,再点击“Remote Debug”来进入调试模式即可。最后,要退出调试模式,你可以切换到 VS Code 终端菜单,并通过 Ctrl+C 的方式来终止调试进程。

到此,就完整的带大家走一圈秒级体验本地远程调试k8s集群的应用服务了。谢谢大家关注~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 交个朋友之猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 借助 Nocalhost 实现 k8s 应用秒级的本地开发体验
    • Nocalhost 开发实战
      • 安装 Nocalhost 插件
      • 集成远程 k8s 集群
      • 部署应用
      • 秒级开发循环反馈
      • 容器热加载
      • 一键调试
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档