使用 Nocalhost 開發 Kubernetes 中的 APISIX Ingress Controller

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章