本文作者:黄鑫鑫 - 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

部署实现后,咱们通过在 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 都会主动触发运行命令,将程序运行起来:

总结

通过以上步骤,咱们曾经学会如何应用 Nocalhost 来开发和调试 Kubernetes 集群中的 APISX ingress controller。 应用 Nocalhost,咱们不再须要期待迟缓的本地开发循环反馈,而是通过一种高效的云原生开发方式来失去疾速的反馈。

援用

  • Apache APISIX getting started guide
  • Developing for Apache APISIX Ingress Controller

一键开启云原生开发环境