跳转至主要内容

一篇博文 含有标签「development」

查看所有标签

使用 Nocalhost 开发 Kubernetes 中的 APISIX Controller

Garry Chen

Garry Chen

Product Manager at Nocalhost Team

Introduction#

本文通过使用 Nocalhost 将本地开发机无缝连接到一个远程 Kubernetes 集群, 让我们可以使用常用的 IDE 来开发和调试 Apache APIX ingress controller。 从而让我们可以使用现有的技术栈来顺畅地开发和调试 K8s 集群上的应用。

本文包括:

  1. 在 IDE 中部署 APISIX Ingress controlle 到远程 Kubernetes 集群
  2. 开发调试 Kubernetes 集群上的 APISIX ingress controller ,不需要重建容器镜像

Prerequisites#

  • 准备一个可用的 Kubernetes 集群。 可以使用任意拥有命名空间管理权限的 Kubernetes 集群。
  • 本地已安装好 Helm v3.0+
  • 集群中已安装好 APISIX
  • GoLand IDE 2020.03+ (I am using GoLand 2021.2 in this article)
  • 安装 Nocalhost JetBrains 插件
  • 安装 Go 1.13 或更高版本

Deploy 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 并检查结果
测试部署是否成功

Developing#

Step 1. Start DevMode#

  1. 右键点击 apisix-ingress-controller 工作负载,选择 Dev Config
  2. 如果已经将源码克隆到本地,请选择源代码目录。 否则通过输入仓库地址 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. Change code and check result#

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

  1. 停止 apisix-ingress-controller 进程
  2. 在 Goland 中搜索 healthz 并找到 router.go 文件。 将 healthzResponse 的状态代码从 ok 更改为 Hello Nocalhost
  3. 重新启动进程并在本地检查更改结果
⭐️   无需重新构建镜像或重启容器,几秒后便可以看到改动的结果   ⭐️

Step 3. End DevMode#

现在关闭开发窗口并结束 DevMode:

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

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

结束 DevMode
代码修改

DevMode 模式下,所有代码更改都只在 开发容器 中生效。

退出 DevMode 后,Nocalhost 将会将远程容器重置为原始状态(进入 DevMode 之前的版本)。 通过这种方式,在退出 DevMode 以后,在 DevMode 模式下做的修改都不会影响原有环境。

Debugging#

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

Step 1. Start remote debugging#

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

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

Step 2. Step through breakpoints#

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

此外,因为我们启用了 dev.hotReload,所以每次更改代码时,Nocalhost 将自动重新运行调试命令。 在我们频繁更改和调试代码的时候会非常方便。

设置断点并运行服务

Remote Run#

Nocalhost 不仅仅可以远程调试,还为我们在 Kubernetes 集群中运行服务以及热加载提供了一种简单的方式!

我们可以通过以下步骤使用 remote run 功能:

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

每次更改代码完代码后,Nocalhost 都会自动触发运行命令,将程序运行起来。

Remote run

Conclusion#

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

References#