iT邦幫忙

1

請問要如何自訂 kubernetes ingress controller 負載平衡規則

  • 分享至 

  • xImage

看了官方提供的 ingress controller 部署文檔後,發現 ingress controller 是透過多個 kubernetes 組件進行佈置的。
網路上的文章使用的流量規則通常都直接利用 ymal 的方式進行設定。

請問如果今天想要用額外的規則進行 load balance 處理,要如何進行部署?

目前有一個用於分類服務的機器學習模型,希望是透過預測出來的結果進行服務的選擇,但我應該要如何將這個模型部署進我的 ingress controller 以及做後續的其他處理?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
Ray
iT邦大神 1 級 ‧ 2023-02-09 20:22:09
最佳解答

你需要哪些額外規則, 是無法用 YAML 寫出來的?

看更多先前的回應...收起先前的回應...

我想要 ingress controller 根據機器學習模型的預測結果,選擇對應的服務
目前困惑的是如何把模型佈置進像 nginx ingress controller 裡面
因為我的模型是基於 Pytorch,所以我認為是要在 controller 裡面建置 python 環境,但感覺這些會需要修改到原有的 controller,應該沒辦法只用 yaml 達成我的目的?

Ray iT邦大神 1 級 ‧ 2023-02-09 21:11:21 檢舉

你是不是誤會了 Ingress Controller (IC) 的角色?

IC 只負責接收外部請求 (以 HTTP URL 形式傳遞), 並根據規則, 將其轉換給內部服務 (Service) 執行對應的程式邏輯. IC 本身並不會執行任何的應用程式邏輯.

以下圖為例:

你的 Python 程式, 應該是部署在圖中的 Service 裡面, IC 他只是根據來源的 URL 內容, 決定導給哪一個 Python 程式去執行而已.

Python 應用軟體並不是部署在 Ingress Controller 裡面.

至於您期望的:

根據機器學習模型的預測結果,選擇對應的服務

除非你的預測結果是可以用簡單的 URL 的表示, 才能用 IC 來做分配; 否則這件事情, 應該還要有一個獨立的 App Container (也許是另外一個獨立的 Service) 來負責判斷之後, 再決定如何呼叫後面的 Service.

IC 看不懂你的預測結果, 你要自己寫一個 App 來判讀.

你好,主要我會有這方面的疑問是因為 Nginx Ingress Controller 提供的這張架構圖

圖中的 IC 看起來也是由一個 pod 去做實現的,所以才認為 controller 本身也是跑一個環境

Ray iT邦大神 1 級 ‧ 2023-02-09 23:02:28 檢舉

沒有喔, IC 就是只有 URL 重導向的功能, 雖然她也是用一個 Pod 來承載此功能, 但是我們不會在裡面塞其他的功能進去 (塞其他功能進去她就不叫 IC 了). 你要 URL 重導向以外的功能, 請在 IC 之後的 Pod 去實現.

k8s 就是盡可能將各種功能切成獨立的 Micro Service, 如果你又把不同的功能塞進同一個 Pod 裡面, 變成 Monolithic, 那就失去了原本要提供給 SRE 運用的彈性....

試想: IC 的 Scale-out 策略, 會跟你要: 判斷預測結果 這個功能的 Scale-out 策略相同嗎? 他們會使用相同的 CPU Limit 或 Node Affinity 嗎? 如果各不相同的話, 你如何叫一個 Pod 去執行不同的參數?

這就像把三輛腳踏車拖在跑車後面一起開, 開跑車的人時不時要擔心速度太快, 腳踏車骨架會散掉; 腳踏車上的人也心驚膽跳, 不知道能不能來得及跟著閃過下一個彎道?

最後還是勢必要分開成不同的 Pod 來處理.

那是我的理解有誤沒錯 目前有初步的架構想法了 謝謝解答

我要發表回答

立即登入回答