在Spring Boot应用程序中使用Kubernetes ConfigMap

栏目: Java · 发布时间: 6年前

内容简介:让我们以前的Spring Boot Kubernetes示例首先让我们将简单的启动属性添加到MVC控制器,没什么大不了的:

让我们以前的Spring Boot Kubernetes示例 Spring Boot Kubernetes Deploy 作为入门者并将 Kubernetes Config Map 添加到游戏中。

Spring Boot应用程序属性

首先让我们将简单的启动属性添加到MVC控制器,没什么大不了的:

@RestController
    <b>public</b> <b>class</b> ControllerMVC {

        @Value(<font>"${my.system.property:defaultValue}"</font><font>)
        <b>protected</b> String fromSystem;

        @RequestMapping(</font><font>"/sayhello"</font><font>)
        <b>public</b> String mvcTest() {
             <b>return</b> </font><font>"I'm saying hello to Kubernetes with system property "</font><font>+fromSystem+</font><font>" !"</font><font>;
        }
    }
</font>

在application.properties中定义my.system.property:

 server.port=8081 
 my.system.property=fromFile

测试该属性是否已加载可运行:

输出应该是:

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:    <b>default</b>    
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:<font><i>//192.168.99.100:30615</i></font><font>
</font>

访问这个url返回:

$ curl http:<font><i>//192.168.99.100:30615/sayhello</i></font><font>
I'm saying hello to Kubernetes with system property updatedFromAnsible !
</font>

是的,我们通过将属性作为环境变量注入,通过Kubernetes configmap覆盖了spring属性my.system.property ,因为env.variables 在Spring Boot中具有更高的优先级 ,然后才会启用application.property文件的内容。

更新configMap

让我们稍微玩一下configmap吧。如果我们想要更改Map值,该怎么办? 最简单的方法是删除map并创建一个新map。

$ kubectl delete configmap app-config
configmap <font>"app-config"</font><font> deleted
$ kubectl create configmap app-config --from-literal=my.system.property=changedValue
configmap </font><font>"app-config"</font><font> created
$ tomask79:kubernetes-configmap tomask79$ kubectl delete configmap app-config
</font>

现在再次curl 这个服务:

$ curl http:<font><i>//192.168.99.100:30615/sayhello</i></font><font>
I'm saying hello to Kubernetes with system property updatedFromAnsible !
</font>

configmap的新值没有反映出来,我们仍然是旧的。

要查看configmap的实际值,我们需要重新启动POD。由于我们使用部署,其中要求kubernetes始终运行一个副本,我们只需要删除POD。新实例 最终会运行。

$ kubectl delete pod test-app-745ff9546c-hrswc
pod <font>"test-app-745ff9546c-hrswc"</font><font> 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:</font><font><i>//192.168.99.100:30615/sayhello</i></font><font>
I'm saying hello to Kubernetes with system property changedValue !
</font>

我们看到实际新的值!

点击标题查看原文


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

模式识别

模式识别

(希)Sergios Theodoridis、(希)Konstantinos Koutroumbas / 电子工业出版社 / 2010-2 / 75.00元

本书全面阐述了模式识别的基础理论、最新方法以及各种应用。模式识别是信息科学和人工智能的重要组成部分,主要应用领域有图像分析、光学字符识别、信道均衡、语言识别和音频分类等。本书在完美地结合当前的理论与实践的基础上,讨论了贝叶斯分类、贝叶斯网络、线性和非线性分类器设计、上下文相关分类、特征生成、特征选取技术、学习理论的基本概念以及聚类概念与算法。与前一版相比,增加了大数据集和高维数据相关的最新算法,这......一起来看看 《模式识别》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具