指向文件的环境变量的配置映射



我有一个名为app_conf_pathenv变量,它指向一个locationfile.yaml,而又包含应用程序工作所需的所有值。应用程序需要此app_conf_path,该具有运行应用程序的file.yaml的位置。如何为这种类型的设置创建configmap。 现在我在persistentvolume中拥有该file.yaml,并将该env变量指向该mountlocation。我最近才知道configmaps。任何这方面的帮助将不胜感激。

我有一个名为app_conf_pathenv变量,它指向一个locationfile.yaml,该又包含应用程序工作所需的所有值。应用程序需要此app_conf_path,该具有运行应用程序的file.yaml的位置。如何为此类设置创建configmap

我将开始讨论配置映射的概念:

配置
  • 映射是配置设置的字典。它由字符串的键值对组成。
  • 配置
  • 映射对于将代码与配置分开非常有用。
  • 您可以从目录、文字值或我们想要的内容:从文件中生成配置映射。
  • ConfigMap 可以像 kubernetes 中的卷一样处理:
    • 存储在ConfigMap对象中的数据可以在configMap类型的卷中引用,然后由在 Pod 中运行的容器化应用程序使用。
    • 引用configMap对象时,只需在卷中提供其名称即可引用它。您还可以自定义用于配置映射中特定条目的路径

从文件创建配置映射:

  • 要创建配置映射,请运行以下命令:

kubectl create configmap <CONFIGMAP_NAME> --from-file=/location/file.yaml

  • 您还可以将多个文件添加到单个配置映射中,只需重复--from-file参数,例如:
kubectl create configmap <CONFIGMAP_NAME> 
--from-file=path/db.properties 
--from-file=path/ui.properties

我想停止安装具有此file.yamlpersistentvolumefile.yaml是一个简单的yaml文件,其中包含其他appsdbconnectionstringspaths的详细信息

从我们上面看到的概念来看,您可以使用ConfigMap完全实现您不再需要将文件挂载到 PV 以提供配置文件的意图。

  • 我想推荐你 ITHollow ConfigMap 示例。我打算在这里使用它,但您的应用程序已经构建了一个在外面查找配置文件的功能。我将保留此链接,以便您可以了解如何将 ConfigMap 用于需要外部配置且未硬编码以在特定文件中查找它的其他应用程序。

可重现的示例:

  • 这将是一个示例,向您展示如何实现问题所需的部分。

    • 它将是一个简单的ubuntupod,它有一个挂载在/tmp/file.yaml中的配置文件,该文件路径将是一个名为app_conf_path的Env变量。
  • 首先,我将创建一个名为file.yaml的文件并添加 3 个值:

$ cat file.yaml 
key1: value1
key2: value2
key3: value3

注意:名称file.yaml不是很常见,我用它来模拟您的环境,通常我们使用类似app.properties的东西,它不需要任何以前的结构,只需要key:value对形式的所有值,就像我的例子一样。

  • 现在我们将从文件file.yaml创建名为app.config的配置映射。该文件位于我运行命令的同一文件夹中,因此我不必指定完整路径:
$ kubectl create configmap app.config --from-file=file.yaml
configmap/app.config created

文件名成为配置映射中的引用,稍后将使用

  • 让我们看看我们创建的配置映射:
$ kubectl describe configmap app.config
Name:         app.config
Namespace:    default
Labels:       <none>
Annotations:  <none>
Data
====
file.yaml:
----
key1: value1
key2: value2
key3: value3
Events:  <none>
  • 现在您的目标是将配置映射数据添加到卷,并添加指向app_conf_path的 ENV 变量/tmp/file.yaml,这是app-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: ubuntu
image: ubuntu
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 3000; done;" ]
volumeMounts:
- name: config-volume
mountPath: /tmp
env:
- name: app_conf_path
value: "/tmp/file.yaml"
volumes:
- name: config-volume
configMap:
name: app.config

注意:这是一个非常有趣的步骤。我们使用configmap创建一个volume,并设置所需的位置以mountvolumeconfigmap的每个部分都是该文件夹中的一个文件。由于我们仅从 1 个文件创建它,因此它是唯一将挂载的文件。我们还使用value设置了所需的ENV name作为文件的路径。

  • 现在让我们应用它并用kubectl exec -it <POD_NAME> -- /bin/bash打开 pod 内部的外壳以查看我们的结果:
$ kubectl apply -f app-deploy.yaml 
deployment.apps/my-app created
$ kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
my-app-68b5b69fc8-xxqpw   1/1     Running   0          3s
$ kubectl exec -it my-app-68b5b69fc8-xxqpw -- /bin/bash
root@my-app-68b5b69fc8-xxqpw:/# printenv | grep app_conf_path
app_conf_path=/tmp/file.yaml
root@my-app-68b5b69fc8-xxqpw:/# cat $app_conf_path   
key1: value1
key2: value2
key3: value3

现在我们达到了您请求的目标。

在 pod 内部有一个名为file.yaml的配置文件,其中包含我们用于生成配置文件的配置设置。

您不必担心单独创建和维护卷。

如果您仍然对此有任何疑问,请在评论中告诉我。

通常会在配置映射中设置配置,如下所示:

data:
file.yaml: |
# Some config
# content goes here

然后在您的 Pod 模板中,您有类似以下内容:

containers:
- ...
env:
- name: app_conf_path
value: /config/file.yml
volumeMounts:
- name: config
mountPath: /config
volumes:
- name: config
configMap:
name: your-configmap

Configmaps 可以使用 YAML 清单或 kubectl 创建。


kubectl create configmap app_conf_path --from-file=file.yaml
OR
configmap/configmap-multikeys.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
name: app_conf_path
data:
Key1: very
Key2: value2

kubectl create -f filename.yaml

apiVersion: v1
kind: Pod
metadata:
name: busy
spec:
containers:
- name: busy
image: busybox
volumeMounts:
- name: config
mountPath: /etc/config
volumes:
- name: config
configMap:
name: app_conf_path

最新更新