Kubernetes 指向文件的env变量的Configmap

Kubernetes 指向文件的env变量的Configmap,kubernetes,Kubernetes,我有一个名为app_conf_path的env变量,它指向一个\location\file.yaml,该文件反过来包含应用程序运行所需的所有值。应用程序需要这个app_conf_path变量,该变量的位置为file.yaml。如何为这种类型的设置创建configmap。现在我在一个persistentvolume中有一个file.yaml,并且有一个env变量指向该mountlocation。我最近才知道configmaps。在此方面的任何帮助都将不胜感激。通常会在configmap中设置以下配

我有一个名为
app_conf_path
env
变量,它指向一个
\location\file.yaml
,该文件反过来包含应用程序运行所需的所有值。应用程序需要这个
app_conf_path
变量,该变量的位置为
file.yaml
。如何为这种类型的设置创建
configmap
。现在我在一个
persistentvolume
中有一个
file.yaml
,并且有一个
env
变量指向该
mountlocation
。我最近才知道
configmaps
。在此方面的任何帮助都将不胜感激。

通常会在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

可以使用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创建-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
我有一个名为
app_conf_path
env
变量,它指向一个
\location\file.yaml
,该文件反过来包含应用程序运行所需的所有值。应用程序需要这个
app_conf_path
变量,该变量的位置为
file.yaml
。如何为这种类型的设置创建
configmap

我将开始讨论ConfigMaps的概念:

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

  • 要创建configmap,请运行以下命令:
kubectl创建configmap--from file=/location/file.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
  • 您还可以向单个configmap添加多个文件,只需重复
    --from file
    参数,例如:
注意:名称
file.yaml
不是很常见,我用它来模拟您的环境,通常我们使用类似
app.properties
的东西,它不需要任何以前的结构,只需要
key:value
成对形式中的所有值,就像我的示例一样

  • 现在,我们将从文件
    file.yaml
    创建名为
    app.config
    的configmap。文件位于运行命令的同一文件夹中,因此我不必指定完整路径:
该文件名将成为configmap中的引用,稍后将使用

  • 让我们看看我们创建的configmap:
注意:这是一个非常有趣的步骤。我们使用
configmap
创建
,并将所需位置设置为
装载
configmap
的每个部分都将是该文件夹中的一个文件。因为我们只从一个文件创建了它,所以它是唯一要挂载的文件。我们还使用
设置所需的
ENV name
作为文件路径

  • 现在,让我们应用它并使用
    kubectl exec-it--/bin/bash
    打开pod内的一个shell,以查看结果:

现在我们达到了你要求的目标

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

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


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

是,我想停止挂载包含此
文件的
persistentvolume
。yaml
文件。yaml
是一个简单的
yaml
文件,包含其他
应用程序的
dbconnectionString
路径的详细信息
谢谢您提供的信息。我注意到你得到了两个新的答案,两个答案看起来都是正确的,但它们缺乏解释、参考和完整的可复制示例。我正在准备一个更详细的答案,以帮助您进一步扩大对此事的了解。我正在准备您的答案,您能否确认您的应用程序是否接受文件.yaml的其他名称?例如,它可以是名为location/config.data的文件吗?另外,你的应用程序是否只从yaml格式的文件中读取数据?或者它可以是一个只有
key:value
行的简单文件吗?是的
filename
可以是任何内容。应用程序只读
.yaml
格式我刚刚发布了我的答案,看到了这条评论。现在这是一个问题,因为配置文件仅定义为
key:value
pair,这就是它们存储到配置映射中的方式。获取一个奇怪的错误
配置映射“app\u conf\u path”无效:元数据。名称:无效值:“app\u conf\u path”:DNS-1123子域必须由小写字母数字字符组成,“-”或“.”,并且必须以字母数字字符开头和结尾(例如“example.com”,用于验证的正则表达式是“[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])”
从名称中删除下划线(\),并尝试创建正确映射的表达式?我的意思是
app\u conf\u path
是应用程序所寻找的。如果我们给出
app conf path
它会工作吗?你必须在pod清单文件的configmap和undet volumes部分中提供相同的名称。这是对
configmap
的一个非常好的解释,实际上我在尝试给出
文件名的时候
$ cat file.yaml 
key1: value1
key2: value2
key3: value3
$ 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>
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
$ 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