在Spring Boot應用程式中使用Kubernetes ConfigMap
讓我們以前的Spring Boot Kubernetes示例Spring Boot Kubernetes Deploy 作為入門者並將Kubernetes Config Map新增到遊戲中。
Spring Boot應用程式屬性
首先讓我們將簡單的啟動屬性新增到MVC控制器,沒什麼大不了的:
@RestController public class ControllerMVC { @Value("${my.system.property:defaultValue}") protected String fromSystem; @RequestMapping("/sayhello") public String mvcTest() { return "I'm saying hello to Kubernetes with system property "+fromSystem+" !"; } } |
在application.properties中定義my.system.property:
server.port=8081 my.system.property=fromFile |
測試該屬性是否已載入可執行:
- mvn clean install
- $ java -jar target/demo-0.0.1-SNAPSHOT.jar
- $ curl http://localhost:8081/sayhello
輸出應該是:
I'm saying hello to Kubernetes with system property fromFile |
在Spring Boot中使用Kubernetes ConfigMap
在Spring Boot中使用Kubernetes配置對映的好方法是透過環境變數。因此,讓我們使用configmap app-config 中的值定義環境變數my.system.property,以覆蓋application.properties中的值:
首先讓我們在configmap app-config使用鍵“my.system.property”和值“fromAnsible”定義:
kubectl create configmap app-config --from-literal=my.system.property=updatedFromAnsible |
要檢視configmap是否定義良好,請執行:
kubectl describe configmap app-config |
輸出應該是:
Name: app-config Namespace: default Labels: none Annotations: none Data ==== my.system.property: ---- updatedFromAnsible Events: none |
好的,configmap已準備就緒,讓kubernetes知道它並定義環境變數my.system.property,它從configmap app-config讀取同名的金鑰。
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: test-app spec: replicas: 1 template: metadata: labels: app: test-app spec: containers: - name: test-app image: test-controller:1.0-SNAPSHOT env: # Define the environment variable - name: my.system.property valueFrom: configMapKeyRef: # The ConfigMap containing the value you want to assign to my.system.property name: app-config # Specify the key associated with the value key: my.system.property ports: - containerPort: 8081 |
現在使用kubernetes服務將部署清單上傳到kubernetes
(這是所需的輸出,如何上傳請參閱上一個repo):
$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-minikube 1 1 1 1 26d test-app 1 1 1 1 2h tomask79:kubernetes-configmap tomask79$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-minikube-6c47c66d8-gzvgc 1/1 Running 5 26d test-app-745ff9546c-hrswc 1/1 Running 0 1h tomask79:kubernetes-configmap tomask79$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26d test-app NodePort 10.105.171.8 <none> 8081:30615/TCP 2h |
kubernetes服務執行於:
$ minikube service test-app --url http://192.168.99.100:30615 |
訪問這個url返回:
$ curl http://192.168.99.100:30615/sayhello I'm saying hello to Kubernetes with system property updatedFromAnsible ! |
是的,我們透過將屬性作為環境變數注入,透過Kubernetes configmap覆蓋了spring屬性my.system.property ,因為env.variables 在Spring Boot中具有更高的優先順序 ,然後才會啟用application.property檔案的內容。
更新configMap
讓我們稍微玩一下configmap吧。如果我們想要更改Map值,該怎麼辦? 最簡單的方法是刪除map並建立一個新map。
$ kubectl delete configmap app-config configmap "app-config" deleted $ kubectl create configmap app-config --from-literal=my.system.property=changedValue configmap "app-config" created $ tomask79:kubernetes-configmap tomask79$ kubectl delete configmap app-config |
現在再次curl 這個服務:
$ curl http://192.168.99.100:30615/sayhello I'm saying hello to Kubernetes with system property updatedFromAnsible ! |
configmap的新值沒有反映出來,我們仍然是舊的。
要檢視configmap的實際值,我們需要重新啟動POD。由於我們使用部署,其中要求kubernetes始終執行一個副本,我們只需要刪除POD。新例項 最終會執行。
$ kubectl delete pod test-app-745ff9546c-hrswc pod "test-app-745ff9546c-hrswc" deleted tomask79:kubernetes-configmap tomask79$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-minikube-6c47c66d8-gzvgc 1/1 Running 5 27d test-app-745ff9546c-t92hb 1/1 Running 0 31s tomask79:kubernetes-configmap tomask79$ curl http://192.168.99.100:30615/sayhello I'm saying hello to Kubernetes with system property changedValue ! |
我們看到實際新的值!
點選標題檢視原文
相關文章
- Spring Boot 應用程式中的 QueryDSLSpring Boot
- Kubernetes學習筆記(六):使用ConfigMap和Secret配置應用程式筆記
- 使用谷歌Skaffold在Kubernetes上進行Spring Boot應用程式的CI / CD工作流程 - foojay谷歌Spring Boot
- 在 Kubernetes 上使用Spring Boot+ActiveMQSpring BootMQ
- Spring Boot中如何使用Ostara監控應用?Spring Boot
- 如何使用ParcelJS在Spring Boot應用程式中打包前端 - codecentric AG BlogJSSpring Boot前端
- 在IntelliJ idea中使用docker除錯Spring Boot應用程式IntelliJIdeaDocker除錯Spring Boot
- Kubernetes 實戰——配置應用(ConfigMap、Secret)
- 使用SDM快速部署Spring Boot應用到KubernetesSpring Boot
- Spring Boot (十九):使用 Spring Boot Actuator 監控應用Spring Boot
- JMS 在 Spring Boot 中的使用Spring Boot
- Spring Boot應用程式中的常用註釋列表Spring Boot
- ConfigMap掛載與Subpath在Nginx容器中的應用Nginx
- Spring Boot應用程式有哪些功能?Spring Boot
- Guava Cache本地快取在 Spring Boot應用中的實踐Guava快取Spring Boot
- 使用 Spring Boot 快速構建 Spring 框架應用Spring Boot框架
- 在Spring Boot應用啟動時如何執行程式碼? -DukesletterSpring Boot行程
- Spring Boot應用程式事件教程 - reflectoringSpring Boot事件
- Spring Boot + Kotlin + Coroutines應用演示程式Spring BootKotlin
- Spring Boot 應用程式啟動流程分析Spring Boot
- Spring Boot 中 10 行程式碼構建 RESTful 風格應用Spring Boot行程REST
- 如何在Spring Boot應用程式中啟用GZIP壓縮? | 前端後端Spring Boot前端後端
- 使用Spring Boot開發基於Kubernetes的Zeebe工作流應用 – SalaboySpring Boot
- Spring Boot(十一):Spring Boot 中 MongoDB 的使用Spring BootMongoDB
- Spring Boot(三):Spring Boot 中 Redis 的使用Spring BootRedis
- 使用Prometheus和Grafana監控Spring Boot應用PrometheusGrafanaSpring Boot
- 自然語言處理工具包 HanLP在 Spring Boot中的應用自然語言處理HanLPSpring Boot
- 在 Spring Boot 中使用 RedisSpring BootRedis
- spring boot中zookeeper使用Spring Boot
- spring boot中redis使用Spring BootRedis
- Spring Boot中Dockerfile使用Spring BootDocker
- 使用 @Audited 增強Spring Boot 應用程式的資料審計能力Spring Boot
- 在Kubernetes上使用Spring Boot實現Hazelcast分散式快取 – PiotrSpring BootAST分散式快取
- Spring Boot應用中進行任務排程Spring Boot
- 在外部tomcat中執行spring boot應用TomcatSpring Boot
- 在spring boot3中使用native imageSpring Boot
- 使用混沌候攻擊測試Spring Boot應用Spring Boot
- 使用 SAP BTP 建立一個 Spring Boot Java 應用Spring BootJava