簡體   English   中英

在使用 k8s 部署應用程序時在本地測試應用程序代碼

[英]Testing Application code local while using k8s for for the deployment of app

我們正在使用 k8s 來部署我們的應用程序,效果很好。但是有一個小問題。我們已經從 http 層通信轉移到 tcp 層。並且不同微服務之間的通信是通過服務(k8s 服務)名稱和它效果很好,但開發人員無法在本地測試相同的代碼,因為服務名稱只能在集群內解析。所以這里有一些我有的解決方案:-

1. 為他們提供不同的名稱空間,他們可以在其中通過小的更改來測試應用程序。

這樣做的問題是開發人員使用了一些斷點並測試了代碼中的一些小的更改,並且通過這種方法進行調試很難。

2.他們可以在本地實現 minikube,但這對我來說也不好。

3.他們可以在本地運行ms的容器,並在/etc/hosts中輸入容器的ip對應k8s服務名稱。在這個相同的代碼將工作。 歡迎任何其他更好的解決方案。

您是否考慮為此目的使用spring 引導配置文件 我們在我們的團隊中長期有效地使用它。 為此,您必須在 application.yml(或 application.properties)中提取服務主機作為單獨的屬性,並在屬性的 rest 中將此主機用作變量。 以下片段解釋了這一點

application.yml
----------------
serviceA:
  host: service-A-Name
  api-one-endpoint: http://${serviceA.host}/api/v1/one
  api-two-endpoint: http://${serviceA.host}/api/v1/two
  api-three-endpoint: http://${serviceA.host}/api/v1/three
  api-four-endpoint: http://${serviceA.host}/api/v1/four

在生產中(任何托管/托管環境),您為 spring 屬性 serviceA.host 提供適當的值。 在您的用例中,您將按原樣使用此值並提供 k8s 服務名稱綁定。

對於本地開發環境,您只需要覆蓋單個屬性。 對於簡單的用例(假設您只需要覆蓋單個屬性),您可以將它作為一個參數傳遞給您的 spring 啟動啟動器(例如“--serviceA.host=localhost”)。 如果你有很多服務(你可能有),那么你只需要覆蓋眾所周知的少數主機名屬性。 在這種情況下,使用專用的開發配置文件要好得多。 以下示例說明了相同的場景

application-dev.yml
-------------------
serviceA:
  host: mylocalhost:9090

然后,通過添加“--spring.profiles.active=dev”作為附加參數和 spring 引導將使用來自 dev 配置文件的更新主機,在 eclipse/intellij 啟動器配置中使用此配置文件執行或調試目的。 事實上,結合這兩種方法可以為您提供更多的靈活性來處理高級案例。 如果您同意跨團隊的通用端口約定,那么您甚至可以簽入 application-dev.yml 以供每個人幾乎原樣使用。

spring 引導配置文件是更強大的功能,我強烈推薦 go 通過它的文檔和一些教程(像這個)來充分理解它並有效地利用它來解決像這個這樣的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM