指向文件的环境变量的Configmap

时间:2020-04-06 07:38:43

标签: kubernetes

我有一个名为env的{​​{1}}变量,它指向一个app_conf_path,该变量依次包含应用程序运行所需的所有值。应用程序需要此\location\file.yaml其中具有app_conf_path的位置来运行该应用程序。如何为这种类型的设置创建file.yaml。现在,我在configmap中有该file.yaml,并有指向该persistentvolume的{​​{1}}变量。我是最近才知道env的。任何帮助,将不胜感激。

3 个答案:

答案 0 :(得分:1)

我有一个名为env的{​​{1}}变量,它指向一个app_conf_path,该变量依次包含应用程序运行所需的所有值。应用程序需要此\location\file.yaml其中具有app_conf_path的位置来运行该应用程序。如何为这种类型的设置创建file.yaml

我将开始讨论ConfigMaps的概念:

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

从文件创建ConfigMap:

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

configMap

  • 您还可以将多个文件添加到单个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 的{​​{1}},而persistentvolume是一个简单的file.yaml文件,其中包含file.yaml和{{1 }}用于其他yaml

根据上面看到的概念,您可以不必使用dbconnectionstrings来实现将文件挂载到PV以提供配置文件的意图。

  • 我想向您推荐The ITHollow ConfigMap Example。我打算在这里使用它,但是您的应用程序已经内置了可以在外部查找配置文件的功能。我将保留此链接,以便您可以看到如何将ConfigMap应用于需要外部配置且未经过硬编码在特定文件中查找的其他应用。

可复制的示例:

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

    • 这将是一个简单的paths窗格,其中有一个安装文件安装在apps中,并且该文件路径将是一个名为ConfigMap的Env变量。
  • 首先,我将创建一个名为ubuntu的文件并添加3个值:

/tmp/file.yaml

注意: 名称app_conf_path并不常见,我使用它来模拟您的环境,通常我们使用类似file.yaml的名称,不需要任何以前的结构,只需$ cat file.yaml key1: value1 key2: value2 key3: value3 对形式的所有值,就像我的示例一样。

  • 现在,我们将从文件file.yaml创建名为app.properties的配置映射。该文件位于我正在运行命令的文件夹中,因此无需指定完整路径:
key:value

文件名成为configmap中的引用,以后将使用

  • 让我们看看我们创建的配置图:
app.config
  • 现在您的目标是add the configmap data to a volume,并将指向file.yaml的ENV变量添加到$ 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

注意:这是一个非常有趣的步骤。我们使用/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 的{​​{1}}。 volume的每个部分将是该文件夹中的文件。由于我们仅通过1个文件创建了该文件,因此它是唯一将要挂载的文件。我们还将configmap设置为您所需的mount,作为文件的路径。

  • 现在让我们应用它,并用volume在吊舱内打开一个外壳,以查看结果:
configmap

现在,我们已达到您的要求。

在窗格中有一个名为ENV name的配置文件,其中包含我们用于生成配置文件的配置设置。

您不必担心分别创建和维护卷。

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

答案 1 :(得分:0)

通常将在configmap中设置配置,例如:

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

答案 2 :(得分:0)

可以使用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