最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

兩種方法,輕松上手ConfigMap!

2019-12-27 14:42 作者:Rancher_China  | 我要投稿

屬性配置文件在任何應用程序中都非常重要。它們不僅可以讓應用程序具備靈活性,還能夠根據(jù)文件中配置的值產(chǎn)生不同的功能。實際上,在staging、開發(fā)、測試、UAT或生產(chǎn)環(huán)境中,我們都使用屬性配置文件來驅(qū)動不同的行為。


通常情況下,屬性配置文件會與代碼一起打包,并且整個程序包都部署在執(zhí)行環(huán)境中。這一方法中,如果你想更改任何配置(即便配置文件中也發(fā)生了更改),你需要重新發(fā)布代碼。盡管這種方法行之有效,但是對于現(xiàn)在而言,效率還是太低了。因此我們需要一種外部化的配置。


在本文中,我將闡述Kubernetes如何為容器提供外部化、靈活的配置以及可移植性。ConfigMap主要是為了讓應用程序的配置和部署解耦,這一功能可以讓容器化應用程序具備可移植性。

如果你對Spring Cloud的生態(tài)很熟悉,那么接下來你會發(fā)現(xiàn)ConfigMap與Spring Cloud server十分類似。這里有兩種使用ConfigMap的方法:

  1. 將ConfigMap作為一種環(huán)境變量

  2. 將ConfigMap掛載為文件


讓我們開始進行實踐!我們將使用一個簡單的應用程序,基于Spring Boot、Docker和Kubernetes進行演示。

將ConfigMap作為一種環(huán)境變量


在本例中,我們將在Kubernetes中創(chuàng)建一個新的環(huán)境變量,并將其用于代碼中。在Java中,可以通過System.getenv(String) API在代碼中使用環(huán)境變量。在常規(guī)Java應用程序中,可以在J2EE應用程序容器(如Oracle WLS或IBM WAS)中設置環(huán)境變量,也可以在OS中設置環(huán)境變量。然而,在Kubernetes中情況并不相同。要使用環(huán)境變量,我們必須根據(jù)literal創(chuàng)建配置映射。



通過kubectl create configmap?命令,我們創(chuàng)建了兩個環(huán)境變量:app.name?和?app.desc。


我們來了解一下這背后發(fā)生了什么。


現(xiàn)在注意數(shù)據(jù)部分,在數(shù)據(jù)部分下,你會找到鍵值對。從技術(shù)上來說,ConfigMap僅僅是鍵值存儲。屬性的名稱是鍵,屬性的值是值。應用程序的代碼會要求你查找這些鍵值對。


為了在Java代碼中使用此環(huán)境變量,我們需要編寫以下代碼:


下面的代碼段定義了兩個K8s環(huán)境變量,分別為“?SPRING_BOOT_HELLO_WORLD_APP_NAME”和“?SPRING_BOOT_HELLO_WORLD_DESC”。這些變量將從ConfigMap app-env-config獲取值。需要重點關(guān)注的是鍵。

屬性配置文件可以在單個文件中保存很多個屬性,以在不同環(huán)境中運行應用程序。在Spring Boot應用程序中,屬性保存在classpath下的application.properties文件中。我們來看一下打包在應用程序jar包中的application.properties文件。

我們正在使用命令kubectl create configmap從單個文件或從多個文件創(chuàng)建ConfigMap。


現(xiàn)在讓我們查看完整的代碼。



將ConfigMap掛載為文件


在本節(jié)中,我將說明如何使用ConfigMap掛載文件以外部化配置。在此示例中,我將使用ConfigMap來外部化application.properties文件。即使默認文件打包在jar中,也位于src / main / resources下。簡單來說,我們將通過ConfigMap所提供的文件來覆蓋默認文件。


第一步是從application.properties創(chuàng)建ConfigMap。讓我們了解如何在K8s中存儲此ConfigMap。

通過ConfigMap,我們將掛載application.properties文件到K8s集群中,并且可以在應用程序中使用它。請注意,數(shù)據(jù)部分包含了application.properties的內(nèi)容,鍵是文件名。


現(xiàn)在,為了覆蓋默認配置文件,我們需要(通過ConfigMap)將application.properties掛載到應用程序的classpath中。Spring Boot通過提供不同的選項來提供這一功能。SpringApplication在以下位置從application.properties文件加載屬性,并將它們添加到Spring Environment:


  1. 當前目錄的/config 子目錄

  2. ?當前目錄

  3. ?classpath / config包

  4. ?The classpath root


如果你想了解更多信息,可以查閱官方文檔:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files


最簡單,最好的方法是將application.properties掛載在“ / config”目錄中。


仔細檢查掛載路徑,請注意ConfigMap的名稱應與我們在上面創(chuàng)建的app-file-configmap完全相同,鍵為文件名。另外,請確保將volume mount配置的名稱更改為volume配置的名稱。

這段代碼說明了如何在application.properties文件中定義屬性。如果使用Spring推薦的標準方法的話,這十分簡單。具體而言,就是使用@Value?注釋將屬性值注入到變量中。


現(xiàn)在,我們可以繼續(xù)進行ConfigMap示例應用程序了。我們來看一下完整的代碼段。

讓我們創(chuàng)建一個Docker鏡像并將其上傳到Dockerhub。在本例中,鏡像名稱是k8s-springboot-helloworld-configmap—app。


以下是K8S pod配置文件:

現(xiàn)在我們使用NodePort服務類型創(chuàng)建服務,以便可以從K8S集群外部使用Welcome服務。


現(xiàn)在,讓我們把這些更改應用于K8S。


導航到瀏覽器并訪問http://<minikube_ip>:<service_node_port>/welcome。在本例,應該是http:// 192.168.99.100:30880/welcome。


認真觀察輸出,返回的字符串是:


同時,檢查代碼中硬編碼的環(huán)境變量的默認值,以及打包在jar中的application.properties的property默認值。你發(fā)現(xiàn)從ConfigMap中獲取了環(huán)境變量和application.properties的值。


這個項目可以從我的Github中獲?。?/p>

https://github.com/nikhilbhide/MicroServicesTutorial/tree/master/k8s_spring_boot_hello_world_config_map





兩種方法,輕松上手ConfigMap!的評論 (共 條)

分享到微博請遵守國家法律
台前县| 哈尔滨市| 通城县| 乡宁县| 遂宁市| 云龙县| 武鸣县| 嵊泗县| 宝山区| 海门市| 延津县| 磴口县| 黑山县| 二连浩特市| 区。| 双峰县| 德清县| 五大连池市| 行唐县| 高邮市| 石狮市| 江山市| 陈巴尔虎旗| 沈阳市| 洪洞县| 淮安市| 巴马| 霍山县| 柳林县| 岗巴县| 鹤岗市| 花莲县| 溧水县| 沧源| 桐城市| 宁国市| 竹北市| 彰武县| 乡城县| 泽普县| 突泉县|