使用 Nocalhost 開發 Kubernetes 中的 APISIX Ingress Controller

CODING發表於2021-12-22
本文作者:黃鑫鑫 - 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

相關文章