使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding.NET 轻量级社交
开源项目广场
使用帮助
意见反馈
CodingNET
V2EX    Coding

使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller

  •  
  •   CodingNET 2021 年 12 月 16 日 1466 次点击
    这是一个创建于 1516 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文作者:黄鑫鑫 - Nocalhost 项目核心开发者 腾讯云 CODING DevOps 研发工程师。硕士毕业于中山大学数据科学与计算机学院,曾负责过平安云主机及国家超算中心容器云平台等相关业务,熟悉虚拟机,容器,K8s 相关技术,专注于云原生领域

    简介

    本文通过使用 Nocalhost 将本地开发机无缝连接到一个远程 Kubernetes 集群, 并在本地使用 Goland 来开发和调试 Kubernetes 集群中的 Apache APISIX ingress controller。Nocalhost 让我们可以使用现有的技术栈来顺畅地开发和调试类似 APISIX ingress controller 的 K8s 应用。

    本文包括:

    1. 在 IDE 中部署 APISIX Ingress controller 到远程 Kubernetes 集群
    2. 使用 Nocalhost 开发和调试 Kubernetes 集群上的 APISIX ingress controller

    环境准备

    • 准备一个可用的 Kubernetes 集群。 可以使用任意拥有命名空间管理权限的 Kubernetes 集群
    • 确保本地已安装好 Helm v3.0+
    • 集群中已安装好 APISIX (APISIX Ingress controller 的依赖)
    • GoLand IDE 2020.03+
    • 安装 Nocalhost JetBrains 插件
    • 安装 Go 1.13 及以上版本

    部署 APISIX Ingress Controller

    按照以下步骤,在 GoLand 中通过 Nocalhost 部署 APISIX Ingress Controller:

    1. 在 GoLand 中打开 Nocalhost 插件
    2. 选择将要部署 APISIX Ingress Controller 的命名空间
    3. 右键点击选定的命名空间, 选择 Deploy Application, 然后选择 Helm Repo 作为安装方法
    4. 在对话框中 Name 中输入:apisix-ingress-controller,在 Chart URL 中输入:https://charts.apiseven.com

    部署 APISIX ingress controller

    部署完成后,我们通过在 IDE 内启用端口转发来测试 apisix-ingress-controller:

    1. 在 Nocalhost 插件的 Workloads 中找到 apisix-ingress-controller ,右键点击并选择 Port Forward
    2. 添加端口转发 8080:8080
    3. 在本地访问 http://127.0.0.1:8080/healthz 并检查结果

    测试部署是否成功

    开发 APISIX Ingress Controller

    Step 1. 进入 DevMode

    1. 右键点击 apisix-ingress-controller 工作负载, 选择 Start DevMode
    2. 如果已经将源码克隆到本地,请选择源代码目录。 否则通过输入 apisix-ingress-controller 的源码仓库地址 https://github.com/apache/apisix-ingress-controller.git 来让 Nocalhost 克隆源代码到本地
    3. 等待操作完成,Nocalhost 将在进入 DevMode 后在 IDE 内打开远程终端

    打开远程终端后,通过在远程终端中输入以下命令来启动 apisix-ingress-controller 进程:

    go run main.go ingress --config-path conf/config-default.yaml 

    apisix-ingress-controller 启动后,通过 http://127.0.0.1:8080/healthz 访问服务, 并检查结果:

    进入开发模式

    Step 2. 修改代码并检查结果

    现在我们来修改一下代码并看看效果:

    1. 停止 apisix-ingress-controller 进程
    2. 在 Goland 中搜索 healthz 并找到 router.go 文件。 将 healthzResponse 的状态代码从 ok 更改为 Hello Nocalhost
    3. 重新启动进程并在本地检查更改结果

    可以看到我们无需重新构建镜像,几秒后便可以看到改动的结果:

    修改源码

    Step 3. 结束开发模式

    开发完毕后,我们可以通过以下步骤结束 DevMode:

    1. 右键点击 apisix-ingress-controller
    2. 选择并点击 End DevMode

    Nocalhost 将会让 apisix-ingress-controller 结束 DevMode, 并重置 apisix-ingress-controller 到其原始版本。 启用端口转发来看看结束 DevMode 后的结果: 结束开发

    需要注意的是,DevMode 模式下,所有代码更改都只在 开发容器 中生效。退出 DevMode 后,Nocalhost 将会将远程容器重置为原始状态(进入 DevMode 之前的版本)。 通过这种方式,在退出 DevMode 以后,在 DevMode 模式下做的修改都不会影响原有环境。

    调试 APISIX Ingress Controller

    调试应用程序是一件麻烦的事,在 Kubernetes 集群中调试应用程序则更加麻烦。Nocalhost 可以帮助我们在调试 Kubernetes 集群中的程序时获得和在 IDE 中直接调试本地程序同样的体验。

    Step 1. 开启远程调试

    我们可以通过以下方式开始远程调试:

    1. 右键点击 apisix-ingress-controller 并选择 Remote Debug
    2. Nocalhost 将会先让 apisix-ingress-controller 进入 DevMode , 并运行在 dev config 中定义的调试命令

    开启远程调试

    Step 2. 设置断点

    我们在 healthz 函数上设置一个断点, 设置好断点后,在浏览器中访问 http://127.0.0.1:8080/healthz ,会触发断点,GoLand 会跳到前台。 点击调试相关按钮可对程序进行调试:

    调试断点

    远程运行 APISIX Ingress Controller

    Nocalhost 不仅仅可以用来远程调试应用,通过使用 Remote Run 功能,还可以让为我们快速地在 Kubernetes 集群中运行开发中的应用程序。 我们可以通过以下步骤使用 Remote Run 功能:

    1. 右键点击 apisix-ingress-controller ,并选择 Remote Run
    2. Nocalhost 将会先让 apisix-ingress-controller 进入 DevMode, 并运行在 dev config 定义的运行命令 每次更改代码完代码后,Nocalhost 都会自动触发运行命令,将程序运行起来:

    Remote Run

    总结

    通过以上步骤,我们已经学会如何使用 Nocalhost 来开发和调试 Kubernetes 集群中的 APISX ingress controller 。 使用 Nocalhost ,我们不再需要等待缓慢的本地开发循环反馈,而是通过一种高效的云原生开发方式来得到快速的反馈。

    引用

    一键开启云原生开发环境

    CODING DevOps.png

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4341 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 06:42 PVG 14:42 LAX 22:42 JFK 01:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86