如何从带有环境变量的application.properties中读取数据库端口 Configmap 创建ConfigMap 使用ConfigMap更新/创建部署测试

我对Spring Boot和application.properties非常陌生。我的问题是,我需要非常灵活地使用数据库端口,因为我有两个不同的数据库。因此,我想从环境变量中读取端口。我尝试了以下方法:

spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:12345/project

如果我的数据库的端口为12345,则此代码工作正常。但是,如果我现在尝试从环境变量中读取端口,则会出现问题。 我尝试过:

spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:${port}/project

问题如下:我正在使用k8和Jenkins。环境变量“端口”已在我的k8中提供给我的程序,这对于“ db-password”有效,但不适用于端口。我的詹金斯说: “连接字符串包含无效的主机'abd:$ {port}'。端口'$ {port}'无效,它必须是0到65535之间的整数”

现在我的问题是: 如何在不出现此错误的情况下将端口读取为环境变量?

提前谢谢!

leiximo 回答:如何从带有环境变量的application.properties中读取数据库端口 Configmap 创建ConfigMap 使用ConfigMap更新/创建部署测试

要将环境变量注入到Pod中,您可以执行以下操作:

Configmap

您可以创建ConfigMap并配置您的Pod以使用它。

所需步骤:

  • 创建ConfigMap
  • 使用ConfigMap更新/创建部署
  • 测试

创建ConfigMap

我在下面提供了简单的ConfigMap来存储您的变量:

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-config
data:
  port: "12345"

要应用它并能够使用它,请调用以下命令:

$ kubectl create -f example-configmap.yaml

上面的ConfigMap将创建值为port的环境变量12345

检查是否成功创建了ConfigMap

$ kubectl get configmap

输出应如下所示:

NAME             DATA   AGE
example-config   1      21m

要获取详细信息,可以使用以下命令进行检查:

$ kubectl describe configmap example-config

输出:

Name:         example-config
Namespace:    default
Labels:       <none>
Annotations:  <none>
Data
====
port:
----
12345
Events:  <none>

使用ConfigMap更新/创建部署

我提供了包含ConfigMap的简单部署:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        envFrom:
          - configMapRef:
              name: example-config
        ports:
        - containerPort: 80

负责使用ConfigMap的配置:

        envFrom:
          - configMapRef:
              name: example-config

之后,您需要使用以下命令运行部署:

$ kubectl create -f configmap-test.yaml

并检查其是否正常工作:

$ kubectl get pods

输出:

NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-84d6f58895-b4zvz   1/1     Running   0          23m
nginx-deployment-84d6f58895-dp4c7   1/1     Running   0          23m

测试

要测试环境变量是否正常工作,您需要进入吊舱并进行自我检查。

为此,请调用命令:

$ kubectl exec -it NAME_OF_POD -- /bin/bash

请为您的变量提供变量NAME_OF_POD。

成功进入容器运行后:

$ echo $port

它应该显示:

root@nginx-deployment-84d6f58895-b4zvz:/# echo $port
12345

现在,您可以在pod中使用环境变量。

本文链接:https://www.f2er.com/3085261.html

大家都在问