当前位置: 首页 > news >正文

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

点击上方蓝色字体,选择“设为星标”

回复”云原生“获取基础架构实践

a803ccba1467e970b0ba79d798107296.jpeg

背景

在这个以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,然后点击“安装”按钮进行安装,如下图所示。

67edc80e6e1074e90b280f67cc23544d.png

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

集成远程 k8s 集群

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

898b24451ea441f7e574018848ed21ea.png

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

d00cc45e178af50062531bc33058c472.png

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

aed3b7fe44a52c4e153a758ba80f3e62.png

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

bd6ea412bdc699d68226d8421dd5ca6f.png

部署应用

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

a5aa9643580371028690376a6836f1fe.png

点击部署 app后,出现图:

96e6dfab1820abf8d5099548f66273eb.png

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

c8052fed3605d3821ab3f510803de2a9.png

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

fb5812af26a0fd3e7cc830194945481b.png

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

b1d72bc8056ec8ab10bc90fb404b2616.png

秒级开发循环反馈

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

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

f0b67cb3e818b262a763148d95c9eb44.png

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

84b8183a6c44a59df3838d9b40c36a47.png

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

51e16d70c1396546aef80617e6e2722b.png

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

adcad22d4961eada521c1bdcaa2d36ab.png

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

efc53c870c69d18e921d316125264afd.png

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

dc4050bd668cedbf21d1433767db38b3.png

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

2f2829e0da52e41d2a3a09c58b7065fb.png

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

4dd6596da68ea5b9eca01ff013415fbc.png

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

1001e7901f3627877436a04b33e16a78.png

容器热加载

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

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

3fcdbbd8b2b01f2fdd3b3cc1cce3a4e1.png

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

57f55caac75a5c34d46f5a4426ac31bc.png

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

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

ef6285728ddde2c120258b27b40a4ce9.png

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

dff8f917ec69e11426a8bdf38eff2791.png 3a7658ff49653ebf1465c3a665d136b5.png

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

一键调试

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

aad95e72e439c18543f759ff9f786916.png

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

c644c601590399d18312668592f5e696.png

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

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

804f444ae41ada16082c9723a2a188e7.png

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

下面给大家介绍几本好书,目前销售火热,有原理加实战,感兴趣可以点击下方链接购买。

开源项目

  实践项目代码开源:https://gitee.com/damon_one/microservice-k8s

欢迎大家star、fork,欢迎联系我,一起学习。

号内回复“云原生”,获取云原生基础架构实践

7197f9142ca19a5dcb4eedb68594057d.png

云原生社区合肥站

云原生社区合肥站正式启动啦,欢迎Base合肥、关注云原生、长期从事云原生的同志们踊跃加入,云原生社区合肥站会因为你们的加入而变得更加美好~

详情参见Issue:https://github.com/cloudnativeto/community/issues/107

联系号主

c561e8e2e5382f87118dfca24d089555.jpeg

欢迎关注个站

a1e1a3982c7476328722caf483835ce0.png

往期回顾

微服务自动化部署CI/CD

如何利用k8s拉取私有仓库镜像

个站建设基础教程

ArrayList、LinkedList 你真的了解吗?

大佬整理的mysql规范,分享给大家

如果张东升是个程序员

微服务架构设计之解耦合

浅谈负载均衡

Oauth2的认证实战-HA篇

Oauth2的授权码模式《上》

浅谈开发与研发之差异

浅谈 Java 集合 | 底层源码解析

基于 Sentinel 作熔断 | 文末赠资料

基础设施服务k8s快速部署之HA篇

今天被问微服务,这几点,让面试官刮目相看

Spring cloud 之多种方式限流(实战)

Spring cloud 之熔断机制(实战)

面试被问finally 和 return,到底谁先执行?

Springcloud Oauth2 HA篇

Spring Cloud Kubernetes之实战一配置管理

Spring Cloud Kubernetes之实战二服务注册与发现

Spring Cloud Kubernetes之实战三网关Gateway

7bf6260722031ab233da53aab47d92f6.gif

8a7f2488c79e75a2cbdb3fe9344adcf9.gif

点击 "damon8.cn" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️

相关文章:

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

点击上方蓝色字体,选择“设为星标” 回复”云原生“获取基础架构实践 背景 在这个以k8s为云os的时代,程序员在日常的开发过程中,肯定会遇到各种问题,比如:本地开发完,需要部署到远程k8s集群,本地…...

CV前沿方向:Visual Prompting 视觉提示工程下的范式

prompt在视觉领域,也越来越重要,在图像生成,作为一种可控条件,增进交互和可控性,在多模态理解方面,指令prompt也使得任务灵活通用。视觉提示工程,已然成为CV一个前沿方向! 下面来看看…...

Redis五大基础类型解析

1.String类型 特征:即存储字符串的类型,单个字符串存储量最大不超过512MB 常用业务场景:⽤来存储JSON序列化之后对象 底层编码: int编码 数据结构特点:ptr指针直接指向字符串常量池中对应字符串地址,而…...

在CSDN学Golang云原生(服务网格istio)

一&#xff0c;在Kubernetes上部署istio 在Kubernetes上部署istio&#xff0c;可以按照以下步骤进行&#xff1a; 安装Istio 使用以下命令从Istio官网下载最新版本的Istio&#xff1a; curl -L https://istio.io/downloadIstio | ISTIO_VERSION<VERSION> sh - 其中&…...

Golang 获取本地 IP 地址方法

在 Golang 中&#xff0c;使用 net 包可以很方便地获取到本机IP地址。 借助 net.InterfaceAddrs 方法 简单示例代码如下&#xff1a; package mainimport ("fmt""net" )func main() {addrList, err : net.InterfaceAddrs()if err ! nil {panic(err)}for…...

抖音seo短视频账号矩阵系统技术开发简述

说明&#xff1a;本开发文档适用于抖音seo源码开发&#xff0c;抖音矩阵系统开发&#xff0c;短视频seo源码开发&#xff0c;短视频矩阵系统源码开发 一、 抖音seo短视频矩阵系统开发包括 抖音seo短视频账号矩阵系统的技术开发主要包括以下几个方面&#xff1a; 1.前端界面设…...

运维高级--shell脚本完成分库分表

为什么要进行分库分表 随着系统的运行&#xff0c;存储的数据量会越来越大&#xff0c;系统的访问的压力也会随之增大&#xff0c;如果一个库中的表数据超过了一定的数量&#xff0c;比如说MySQL中的表数据达到千万级别&#xff0c;就需要考虑进行分库分表&#xff1b; 其…...

Mysql 忘记密码怎么重置密码(详细步骤)

每种方法都有其适用的情况&#xff0c;根据具体情况选择合适的方法。无论选择哪种方法&#xff0c;请务必在重置密码后及时删除临时用户并重新启动 MySQL 服务。 一、使用 mysqladmin 重置密码 停止服务 # systemctl 启动的使用这个停止 $ sudo systemctl stop mysql# mac 本机…...

机器学习深度学习——图像分类数据集

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——softmax回归&#xff08;下&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习…...

【PWN · 栈迁移】[BUUCTF]ciscn_2019_es_2

第一道栈迁移题目&#xff0c;跌跌撞撞理解了 前言 当前溢出可用空间比较少时&#xff08;极端情况下仅能覆写ebp和ret&#xff09;&#xff0c;可以通过栈迁移的方式&#xff0c;扩大shellcode的容纳空间&#xff0c;其核心是将esp移动到一段shellocode开头。而esp总是由ebp赋…...

网络编程(13): 网络通信常用命令(后续待补充)

ifconfig 一般用于查看网卡信息 ping 一般用于侦测本机到目标网络主机的网络是否通常: ping ip/域名 telnet 可以用于指定ip地址和端口的侦听服务是否存在&#xff1a;telnet ip port, 也可以模拟客户端给服务器发数据 netstat 用于查看网络连接状态 -a: 显示所有选项 -t&#…...

flask创建数据库连接池

flask创建数据库连接池 在Python中&#xff0c;您可以使用 Flask-SQLAlchemy 这个扩展来创建一个数据库连接池。Flask-SQLAlchemy 是一个用于 Flask 框架的 SQLAlchemy 操作封装&#xff0c;实现了 ORM(Object Relational Mapper)。ORM 主要用于将类与数据库中的表建立映射关系…...

C语言手撕顺序表

目录 一、概念 1、静态顺序表&#xff1a;使用定长数组存储元素。 2、动态顺序表&#xff1a;使用动态开辟的数组存储 二、接口实现 1、对顺序表的初始化 2、对数据的销毁 3、对数据的打印 4、检查是否需要扩容 5、尾插 6、头插 7、尾删 8、头删 9、在pos位置插入x …...

常见的排序算法

常见的排序算法 常见的排序算法包括&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;依次比较相邻的元素&#xff0c;将较大的元素交换到右侧&#xff0c;逐步将最大元素移动到末尾。插入排序&#xff08;Insertion Sort&#xff09;&#xff1a;将数组…...

C#如何使用SQLite数据库?

文章目录 0.引言1.SQLite工具准备2.创建窗体项目并添加SQLite的命名空间3.编写使用SQLite代码4.结果展示 0.引言 SQLite是一个轻量级的嵌入式数据库&#xff0c;它的库文件非常小巧&#xff0c;不需要独立的服务器进程或配置。这使得它非常适合在资源受限的环境中使用&#xff…...

如何将表格中的状态数据转换为Tag标签显示

考虑到系统前端页面的美观程度&#xff0c;通常通过Tag标签来代替某条数据中的状态信息。仅通过一点操作&#xff0c;便能够使得页面美观程度得到较大提升&#xff0c;前后对比如下所示。代码基于Vue以及Element-ui组件实现。 修改前&#xff1a; 修改后&#xff1a; 修改前…...

centos中修改防火墙端口开放配置

1、直接进入文件修改 vim /etc/sysconfig/iptables 2、添加需要开放的端口 &#xff08;1&#xff09;添加需要开放的单个端口 4001 -A INPUT -m state --state NEW -m tcp -p tcp --dport 4001 -j ACCEPT &#xff08;2&#xff09;添加需要开放的某个网段端口 4001:4020 …...

程序设计 算法基础

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…...

【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

ubuntu开机自启动

ubuntu开机自启动 1、建一个test.sh脚本&#xff0c;并写入 #!/bin/sh gnome-terminal -x bash -c ‘cd /home/文件路径/;python3 main.py’ exit 0 2、:wq!保存 3、创建rc-local.service文件&#xff08;sudo vim /etc/systemd/system/rc-local.service&#xff09;&#xf…...

Git将其他分支合并至主分支

主要思想&#xff1a; 把分支代码合并到master&#xff0c;合给谁&#xff0c;就先切换到谁的分支 1. 当前分支是dev&#xff0c;开发完成后&#xff0c;需要合并到master分支 先把该提交的提交&#xff0c;需要push的push完成后&#xff0c;再切换分支。 否则也会告诉你要提交…...

Python+request+pytest 接口自动化测试框架入门(与unittest的比较)

1. Pythonrequestpytest 接口自动化测试框架入门 - 简书 pytest和unittest的比较&#xff1a; pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要有以下几个特点&#xff1a; 简单灵活&#xff0c;容易上手支持参数化能够支持简单的单元测试和复杂的功能测试&a…...

数据结构——复杂度

总有一天你要一个人&#xff0c;再暗夜中&#xff0c;向那座桥走过去 文章目录 一、算法的复杂度 考察形式范例 二、算法的时间复杂度 大O的渐进表示法 常见的复杂度对比 例题&#xff1a;消失的数字 题目的三种思路 1.排序遍历 2.减法 3.单身狗思想 三、空间复杂度…...

使用goldengate 迁移Oracle到postgresql

环境&#xff1a; --源端&#xff1a; IP&#xff1a;10.0.4.16 hostname&#xff1a;tencent Oracle数据库版本&#xff1a;12.2.0.1.0 ogg for oracle版本&#xff1a;19.1.0.0.4 SID&#xff1a;orcl --目标端&#xff1a; IP&#xff1a;10.0.4.16 hostname&#…...

ESP-C3入门20. CentOS开发环境及Jenkins流水线

一、准备环境 CentOS8已经正常安装Jenkins 二、升级 cmake cmake 升到 3.16以上。 cmake --version # 安装 g sudo yum install gcc-c export CXXg# 安装 CMake 的依赖项 sudo yum install -y openssl-devel# 下载 CMake 源码并进行编译安装 wget https://github.com/Kitwa…...

服务器被爬虫恶意攻击怎么办?

在有预算的情况可以采购第三方服务防火墙&#xff0c;没钱就使用开源的WAF进行防护。 # WAF防火墙的基本防护原理 WAF&#xff08;Web 应用防火墙&#xff09;可以使用多种技术来防止恶意爬虫攻击&#xff0c;例如&#xff1a; 1. 黑名单&#xff1a;WAF 可以使用黑名单技术来…...

JavaScript正则表达式之座机号/手机号验证校验规则

引用:https://www.bilibili.com/read/cv18300539/ 本文对利用正则表达式对手机号码进行了验证 支持格式&#xff1a; 座机 &#xff1a;xxx-xxxxxxxx、xxxxxxxxxxxx …座机区号的横杠可有可无 手机&#xff1a;xxxxxxxxxxx JavaScript&#xff1a; var: checkPhone (rule,…...

黑客学习手册(自学网络安全)

一、首先&#xff0c;什么是黑客&#xff1f; 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手&#xff0c;现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术&#xff1f; 其实&#xff0c;网络信息空间安全已经成为海陆空之外的第四大战场&#xff0c;除了国…...

获取非叶子节点的grad(retain_grad()、hook)【为了解决grad值是None的问题】

在调试过程中, 有时候我们需要对中间变量梯度进行监控, 以确保网络的有效性, 这个时候我们需要打印出非叶节点的梯度, 为了实现这个目的, 我们可以通过两种手段进行, 分别是: retain_grad()hook 不过我感觉“hook”比“retain_grad()”要麻烦.....&#xff0c;所以我感觉还是…...

JMeter(八):响应断言详解

响应断言 :对服务器的响应进行断言校验 (1)应用范围: main sample and sub sample, main sample only , sub-sample only , jmeter variable 关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,…...

找人做网赌网站需要多少钱/seowhy培训

先简单看一下主过程&#xff1a; int MAXFLOW() {hights();prepare();while (!Q.empty()) {u Q.get;for each e in G (from u) push(e);if (!fixed(u)) reCalc(u);} }接下来介绍算法 预流推进算法给每一个顶点一个标号h(v)&#xff0c;表示该点到t的最短路&#xff08;在残量…...

滨州正规网站建设价格/网络推广平台

地球人都知道&#xff0c;频率是移动通信系统&#xff08;IMT&#xff09;的最重要的资源&#xff0c;是血脉基础。运营商无时无刻不想获取“黄金”频率&#xff0c;有好的频率&#xff0c;事半功倍。对于广大通信从业者们&#xff0c;尤其是像小编这样研究5G终端的人&#xff…...

哪个网站有手机/策划公司一般怎么收费

很多用户都想将系统升级到Win10&#xff0c;但是却不知道怎么激活Win10正式版的方法&#xff0c;其实不同版本激活正式版Win10的方法秘钥不同&#xff0c;下面99安卓网小编就分享一些激活Win10正式版的方法和秘钥&#xff0c;供大家参考。 目前win10正式版已经发布&#xff0c;…...

通过网站开发工具怎么改自动跳网站/百度推广和百度竞价有什么区别

网站运营指标统计案例-★★★★★数据需求代码实现数据 我们后续需要关注的数据 1.总共有多少条?2.不重复的IP有多少?3.来源URL字段计数并排序 需求 需求1.PV:PageView ,页面访问量, 访问一次就是一个PV,上面的访问日志有多少条就有多少PV 分析:读取文件,把该RDD直接count…...

平台网站开发/52种新颖的促销方式

重要国策《文化产业振兴规划》于9月26日正式对外公布。巧合的是&#xff0c;就在前一天&#xff08;9月25日 &#xff09;&#xff0c;盛大游戏&#xff08;SDG&#xff09;成功在NASDAQ上市&#xff0c;并且创下了美股IPO规模之最&#xff08;10亿美元&#xff09;。1&#xf…...

万户做网站好不好/网站设计的流程

kotlin jsonWelcome to a brand new tutorial for Easy Android Programming. In the tutorial, we are going to learn about the basic usage of retrofit in kotlin for fetching JSON from a remote server.欢迎使用全新的Easy Android编程教程。 在本教程中&#xff0c;我…...