Dapr 远程调试之 Nocalhost
虽然Visual studio 、Visual studio code 都支持debug甚至远程debug ,Dapr 搭配Bridge to Kubernetes 支持在计算机上调试 Dapr 应用程序,同时仍然让它们与 Kubernetes 集群上运行的服务和应用程序进行交互。 但是在调试过程中,难免修改配置、添加调试信息、修改代码并验证,这样就需要提交代码,重新编译、部署以验证功能是否符合预期,这样就拉长时间线,拉低了开发效率。一个系统可能还好点,如何项目A调用B、B又调用C,想要调试C,本地调试的话就需要配置3套环境,分别运行3个项目,流程线可想而知。
今天要给大家介绍一款神奇nocalhost, Nocalhost 是一款腾讯云Coding团队 开源的基于 IDE 的云原生应用开发工具,下面是摘抄自他的文档介绍,https://nocalhost.dev/zh-CN/docs/introduction/:
- 直接在 Kubernetes 集群中构建、测试和调试应用程序
- 提供易于使用的 IDE 插件(支持 VS Code 和 JetBrains),即使在 Kubernetes 集群中进行开发和调试,Nocalhost 也能保持和本地开发一样的开发体验
- 使用即时文件同步进行开发: 即时将您的代码更改同步到远端容器,而无需重建镜像或重新启动容器。
使用Nocalhost直接在k8s中进行开发,有如下几点优势:
- 生产环境相似 - 开发环境与你的生产环境非常相似,让你更有信心在发布新功能时一切都像在生产环境中一样工作。
- 更改即时生效 - 通过文件同步,对代码的所有更改都可以在容器中立即生效,而无需重建镜像或重新部署容器,从而提升开发效率,特别是可以借助于dotnet的热重载hot reload技术在云原生场景下搞笑开发。
- 灵活的扩展性 - 开发人员无需再担心本地资源不足。
- 降低成本 - 更有效地使用资源并降低 IT 设施成本,特别是很多公司都是虚拟化的场景下,本地的windows 机器不支持docker,用户无需在本地电脑配置开发、调试、测试环境,可以直接使用远端的云原生开发环境进行开发 。
- 方便调试 - Nocalhost支持远程debug,可以方便地在本地计算机上复现线上的问题。
- 减少本地配置 - 由于线上、测试环境已经部署过,Nocalhost使用这些现成的资源,不需再在本地安装数据库、redis等进行配置,也不必担心本地资源的限制,从而可以更愉快地本地开发,远程k8s部署并调试。
Nocalhost 由单个二进制 CLI 和 IDE 插件组成,可以直接与IDE 一起配合调试程序。 Nocalhost 不需要服务器端组件,因为它通过 KubeConfig 直接与 Kubernetes 集群通信,就像 kubectl 一样。
Nocalhost远程调试过程,主要分为Start DevMode启动调试模式、Associate Local DIR关联本地目录、设置断点、Remote Debug远程调试、本地请求接口、查看断点处信息等过程。
Visual Studio code 安装nocalhost 插件,在查看-扩展的搜索框中,搜索nocalhost,点击安装,即可进行快速安装Nocalhost插件。默认安装在C:\Users\xxx\.nh\目录下,生成的kubeConfigs也会在这个目录下。
进行nocalhost remote debug之前,还需要设置nocalhost的config配置信息,目前还不支持dotnet 的调试 。
在Visual studio code 的左侧有个nocalhost,点击Nocalhost,会以目录树的形式展示所有的k8s集群,找到相关k8s的namespace,点对应的项目,然后点Workloads工作负载 → Deployments部署,看到对应的pod。鼠标右键点Start DevMode,等待启动调试模式。
首先要连接k8s集群:connect to cluster
然后编辑这个服务的Dev Config: 点击这个,进行一些简单的设定。(这里配置很方便的,会选择用浏览器打开,进行修改,后复制修改的内容到这个文件即可),如下图:
将修改的内容复制到那个配置的yml中保存,可以直接用上面那个Apply 按钮完成拷贝,这里要特别指出的是对于Dapr sidecar的 配置一定要放在Patches下:
name: catalog
serviceType: deployment
containers:
- name: catalog-api
dev:
gitUrl: ""
image: mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim
shell: ""
workDir: ""
storageClass: ""
resources:
limits:
memory: 4Gi
cpu: "2"
requests:
memory: 2Gi
cpu: "2"
persistentVolumeDirs: []
command:
run:
- dotnet
- dev-certs
- https
- --trust;
- dotnet
- run
- --urls=http://*:80
- --project
- ./src/Services/Catalog/Catalog.API/Catalog.API.csproj
debug:
- dotnet
- dev-certs
- https
- --trust;
- dotnet
- watch
- run
- --urls=http://*:80
- --project
- ./src/Services/Catalog/Catalog.API/Catalog.API.csproj
debug:
remoteDebugPort: 0
language: ruby
hotReload: false
sync: null
env:
- name: DOTNET_RUNNING_IN_CONTAINER
value: "true"
- name: DOTNET_VERSION
value: 6.0.0
- name: ASPNET_VERSION
value: 6.0.0
- name: ASPNETCORE_URLS
value: http://+:80
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
portForward:
- 8080:80
patches:
- patch: '{"spec":{"template":{"metadata":{"annotations":{"dapr.io/app-id":
"catalog-api", "dapr.io/app-port": "80", "dapr.io/enabled": "true",
"dapr.io/config": "dapr-config","dapr.io/log-as-json": "true" }}}}}'
type: strategic
(这里有一个镜像地址,可以填写我们作为nocalhost的开发镜像,因为最终还是你本地的代码部署到远程的容器中,那这个镜像地址其实不是多么重要,填一个存在的即可),最好是nocalhost 官方有支持的,他们的镜像仓库的dockerfile地址在这里 https://github.com/nocalhost/dev-container ,我做了一个dotnet 6的dockerfile。
使用Nocalhost之前,要先启动开发模式。成功进去开发模式后,会自动在DE中打开一个终端,这就是Nocalhost为我们创建好的容器了。顺利的话,你应该能在该容器的/home/nocalhost-dev目录下看到你的源代码。这里中间应该会选择一个目录,就是关联你本地服务的代码的目录就好了;
通过patch 拉起Dapr sidecar,不过由于进入开发模式的实例里面并没有运行 业务服务的代码,只是把Nocalhost的调试代码的容器启动,我们可以通过Remote run来运行在run 所定义的命令来拉起业务服务,这样dapr 就可以正常启动了,具体过程可以看我提的一个issuehttps://github.com/nocalhost/nocalhost/issues/1306:
在本地修改一行代码,就会实时的在远端容器中生效了,从代码修改,到远端容器中生效的过程很快,可能都不到1秒,如果不使用nocalhots,那起码都是几分钟起步的,流程很复杂,Nocalhost 是使用了源码启动进程,实时热加载技术,当进入开发模式(Dev Model)后,会实时把本地的源码同步到远端容器中,免去了提交,构建,推送镜像等循环,提升了开发效率。
Dapr 远程调试之 Nocalhost的更多相关文章
- 微信公众号开发之VS远程调试
目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...
- tomcat开发远程调试端口以及利用eclipse进行远程调试
一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里: SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...
- Visual Studio 2012远程调试中遇到的问题
有的时候开发环境没问题的代码在生产环境中会某些开发环境无法重现的问题,或者需要对生产环境代码进行远程调试该怎么办? Vs已经提供给开发者远程调试的工具 下面简单讲讲该怎么用,前期准备:1.本地登录账户 ...
- 使用Eclipse进行远程调试
转自:http://blog.csdn.net/sunyujia/article/details/2614614 今天决定做件有意义的事,写篇图文并茂的blog,为什么要图文并茂?因为很多事可能用语言 ...
- 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...
- tomcat 远程调试
1.服务端查看cataline.sh 中的描述 cataline jpda start 开启服务端远程调试 远程调试端口JPDA_ADDRESS="8000" 2.本地代码参考 ...
- 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure
[题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...
- [教学] Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试
Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试安装步骤: 准备电脑: 一台开发电脑,安装 Delphi 开发环境 一台平板电脑,安装 PAServer,安装方 ...
- Xdebug文档(七) 远程调试
Xdebug提示调试客户端接口与PHP运行相联系.该章节解释如何设置PHP与xdebug,并推荐一些客户端. 介绍 Xdebug的远程调试器允许你检查数据结构,交互式地穿过和调试你的代码.该协议已经开 ...
随机推荐
- WinCE知识介绍
学习WinCE基本开发的步骤: 1.了解WinCE发展史: 2.WinCE开发环境搭建:[软件工具+插件] 3.简单案例: 参考:http://blog.csdn.net/educast/articl ...
- LinuxCNC中RS-274/NGC解析器的编译和使用
原文 http://blog.sina.com.cn/s/blog_a2a6dd380102vrai.html LinuxCNC是一个著名的开源数控软件,目前最新发行版本是:LinuxCNC 2.6. ...
- 半吊子菜鸟学Web开发 -- PHP学习3-文件
目录 1 PHP文件系统 1.1 PHP文件的读取 1.4 获得文件的大小 1.5 PHP写入文件 1.6 删除文件 1 PHP文件系统 1.1 PHP文件的读取 文件读取的函数是file_get_c ...
- 为什么要使用 rabbitmq?
1.在分布式系统下具备异步,削峰,负载均衡等一系列高级功能; 2.拥有持久化的机制,进程消息,队列中的信息也可以保存下来. 3.实现消费者和生产者之间的解耦. 4.对于高并发场景下,利用消息队列可以使 ...
- RabbitMQ踩坑记
之前我们给我们的系统加了一个使用SpringAOP+RabbitMQ+WebSocket进行实时消息通知功能(https://www.cnblogs.com/little-sheep/p/993488 ...
- Tomcat安装流程(无图简易)
笔记:web->3小结
- ctfhub web信息泄露备份文件下载(网站源码,back文件)
网站源码 进入环境,首先我们用bp抓一下包 在HTTP请求方式GET/后添加两个负载,一个用于爆破文件名,一个用于爆破后缀名 得知网页源码的备份形式为www.zip,下载网页源码 打开记事本文件 发现 ...
- _CrtCheckMemory
参考: _CrtCheckMemory MSDN 堆异常检查-MS vs stdio 编写程序经常会涉及到堆的申请,但是如果你向所申请堆里写数据,超过了你最开始申请的空间是,运行中就会发生中断. _C ...
- Initialization failed for 'https://start.spring.io
本文精华(没空的小伙伴,直接看精华部分即可) 1.精华1: 开发/下载项目的时候考虑系统必备的版本兼容性 2.精华2: 通过火狐浏览器访问官网的旧版本,下载到任意需要的项目版本,然后通过项目导入ide ...
- javaweb之修改功能
数据库的修改功能,主要是通过查询,保留之前的数据,得到当前想要修改的页面,并进行修改. 一.dao层 在dao层需要添加两个fangfa,一个查询,一个修改(这是整个dao层,包括之前的增删.浏览) ...