Kubernetes 通过从k8s中的文件导入数据来填充ConfigMap

Kubernetes 通过从k8s中的文件导入数据来填充ConfigMap,kubernetes,Kubernetes,我有一个要求,就是将一堆键值对推送到一个text/json文件中。在此之后,我想将键值数据导入configMap,并使用kubernetes客户端API在POD中使用此configMap 任何关于如何做到这一点的建议都会很好 TIA你可以用两种方法来做 按原样从文件创建ConfigMap。 在这种情况下,您将获得ConfigMap,其中filename作为键,filedata作为值 例如,您有一个文件your file.json,内容为{key1:value1,key2:value2,keyN:

我有一个要求,就是将一堆键值对推送到一个text/json文件中。在此之后,我想将键值数据导入configMap,并使用kubernetes客户端API在POD中使用此configMap

任何关于如何做到这一点的建议都会很好


TIA

你可以用两种方法来做

按原样从文件创建ConfigMap。 在这种情况下,您将获得ConfigMap,其中filename作为键,filedata作为值

例如,您有一个文件
your file.json
,内容为
{key1:value1,key2:value2,keyN:valueN}

your file.txt
的内容


键1:值1
键2:值2
键:值

kubectl create configmap name-of-your-configmap --from-file=your-file.json
kubectl create configmap name-of-your-configmap-2 --from-file=your-file.txt
因此:

apiVersion: v1
kind: ConfigMap
metadata:
  name: name-of-your-configmap
data:
  your-file.json: |
    {key1: value1, key2: value2, keyN: valueN}

apiVersion: v1
kind: ConfigMap
metadata:
  name: name-of-your-configmap-2
data:
  your-file.txt: |
    key1: value1
    key2: value2
    keyN: valueN
apiVersion: v1
kind: ConfigMap
metadata:
  name: name-of-your-configmap-3
data:
  key1: value1
  key2: value2
  keyN: valueN
在此之后,您可以将任何ConfigMaps装载到Pod,例如,让我们装载
您的文件.json

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh","-c","cat /etc/config/keys" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: name-of-your-configmap
        items:
        - key: your-file.json
          path: keys
restartPolicy: Never
现在,您可以从Pod中的
/etc/config/your file.json
获取任何信息。请记住,数据是只读的

使用环境变量从文件创建ConfigMap。 您可以使用特殊语法在文件中定义成对的
key:value
。 以下语法规则适用:

  • 文件中的每一行都必须采用VAR=VAL格式
  • 以#开头的行(即注释)将被忽略
  • 空白行被忽略
  • 引号没有特殊处理(即它们将是ConfigMap值的一部分)
您有一个包含内容的文件
您的env file.txt

key1=value1
键2=值2
keyN=valueN

因此:

apiVersion: v1
kind: ConfigMap
metadata:
  name: name-of-your-configmap
data:
  your-file.json: |
    {key1: value1, key2: value2, keyN: valueN}

apiVersion: v1
kind: ConfigMap
metadata:
  name: name-of-your-configmap-2
data:
  your-file.txt: |
    key1: value1
    key2: value2
    keyN: valueN
apiVersion: v1
kind: ConfigMap
metadata:
  name: name-of-your-configmap-3
data:
  key1: value1
  key2: value2
  keyN: valueN
现在,您可以使用ConfigMap数据作为Pod环境变量:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod-2
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: name-of-your-configmap-3
              key: key1
        - name: LOG_LEVEL
          valueFrom:
            configMapKeyRef:
              name: name-of-your-configmap-3
              key: key2
        - name: SOME_VAR
          valueFrom:
            configMapKeyRef:
              name: name-of-your-configmap-3
              key: keyN
  restartPolicy: Never
现在您可以在Pod中使用这些变量

有关更多信息,请查看我也可以建议您执行此任务。您可以将其作为部署管道的一部分来生成K8s配置(不仅是ConfigMaps,还包括部署、网络策略、服务等)

在kustomize,你需要一个。有不同的选择。在您的情况下,
env
是合适的

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
# generate a ConfigMap named my-system-env-<some-hash> where each key/value pair in the
# env.txt appears as a data entry (separated by \n).
- name: my-system-env
  env: env.txt
apiVersion:kustomize.config.k8s.io/v1beta1 种类:Kustomization configMapGenerator: #生成名为my system env的ConfigMap,其中 #env.txt显示为数据项(以\n分隔)。 -名称:我的系统环境 env:env.txt
其他选项,如
文件
将把文件的全部内容加载到ConfigMap的单个值中。

使用pod的容器环境变量导出env或文本文件中相同的键值对

  • 使用从configmap创建配置映射
例如:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - configMapRef:
          name: special-config
  restartPolicy: Never

回复:items:-key:your-file.json路径:keys文件存储为
keys
而不是
your-file.json
。无论如何谢谢你!请注意,在kustomize的较新版本中,密钥已更改为
envs
,现在接受列表。感谢您添加此最新信息,@prentice
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - configMapRef:
          name: special-config
  restartPolicy: Never