簡體   English   中英

如何在通過Helm部署的Java Spring啟動應用程序中使用configmaps中的屬性

[英]How to consume properties from configmaps in Java Spring boot application deployed through Helm

我有簡單的Spring啟動應用程序,我需要在開發時部署它,並使用Helm在Kubernetes集群上生成不同的命名空間。

我正考慮為每個環境保留多個application.properties(application-dev.properties,application-prod.properties)文件,然后通過values.yaml文件從它們創建配置文件,這些文件對於每個環境也會有所不同,並在執行時指定掌舵升級。

現在的問題是我如何使用config.maps中的值,因為我知道我可以在容器中掛載屬性文件,例如/deployment/application.properties

或者將每個屬性公開為容器內的環境變量。

但是我如何從Java應用程序中使用它們呢?

此外,當我創建容器映像時,它在嵌入的/ resources / files中有當前的應用程序.properties,這是應用程序在默認情況下使用的,所以當應用程序在容器內部運行時,我需要覆蓋此行為在開發人員桌面上手動構建和運行。

Springboot可以自動從環境變量中推斷出變量。 在application.properties或application.yaml中,只需使用$ {MY_ENVIRONMENT_VARIABLE:my-defaultvalue}。
使用helm填充configmap。 將configmap用作部署清單中的環境變量。

這樣,您不需要在圖像中為dev,int,prod提供多個application.properties。 在整個部署中保持完好無損。

然后在您的頭盔圖中,您可以擁有多個values.yaml示例值-dev.yaml或values-int.yaml。 您還可以從命令行動態設置helm值,覆蓋yaml文件。

我在github https://github.com/balchua/demo中有一個演示應用程序,它使用了這種模式。

Bal Chua建議你當然可以使用環境變量。 如果這樣做,您可以使用--set在安裝時覆蓋特定值,或者如果您有大量配置,則可以使用' - values'標志並傳入自定義values.yaml文件。

另一種方法是使用.Files.Glob( github中的示例)加載整個文件,並將該文件作為圖表的一部分加載。 然后,您可以將文件掛載到/ config以在Spring啟動應用程序中使用它。 然后你的配置文件將與Spring啟動配置文件的形式相同,而不是helm values.yaml。 雖然在許多情況下不需要太大的區別。

有一個關於你如何做類似秘密的討論(可能你想把你的密碼放在秘密中),並在https://dzone.com/articles/hunting-treasure-with-kubernetes-中將它用於CI / CD configmaps-and-se (這是github示例附帶的文章)。 基本上你會使用.Files.Glob和.AsSecrets而不是.AsConfig來編碼內容。 如果沒有指定,許多頭盔圖可以選擇生成一個隨機密碼,但我猜你可能不需要它。

我建議將ConfigMap的文件( application.propertiesapplication.yml )掛載到Spring Boot可以自動檢測的文件系統的某個位置 - 然后你的應用程序保持簡潔

暫無
暫無

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

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