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

Rak*_*aks 8 kubernetes

我有一个要求,我将一堆键值对推送到text/json文件.发布,我想将键值数据导入configMap,并使用kubernetes-client API在POD中使用此configMap.

关于如何完成这一任务的任何指示都会很棒.

TIA

Art*_*aev 12

你可以用两种方式做到这一点.

按原样从文件创建ConfigMap.

在这种情况下,您将获得ConfigMap,其中filename为密钥,filedata为值.

例如,您有your-file.json包含内容的文件{key1: value1, key2: value2, keyN: valueN}.

your-file.txt有内容

key1: value1 key2: value2 keyN: valueN

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
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以将任何ConfigMaps挂载到Pod,例如让我们挂载your-file.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
Run Code Online (Sandbox Code Playgroud)

现在,您可以从/etc/config/your-file.jsonPod内部获取任何信息.请记住,数据是只读的.

使用环境变量从文件创建ConfigMap.

您可以使用特殊语法来定义key: value文件对.这些语法规则适用:

  • 文件中的每一行必须采用VAR = VAL格式.
  • 以#开头的行(即注释)将被忽略.
  • 空行被忽略.
  • 没有特殊的引号处理(即它们将成为ConfigMap值的一部分)).

你有your-env-file.txt内容的文件

key1=value1 key2=value2 keyN=valueN

kubectl create configmap name-of-your-configmap-3 --from-env-file=you-env-file.txt
Run Code Online (Sandbox Code Playgroud)

结果:

apiVersion: v1
kind: ConfigMap
metadata:
  name: name-of-your-configmap-3
data:
  key1: value1
  key2: value2
  keyN: valueN
Run Code Online (Sandbox Code Playgroud)

现在您可以将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
Run Code Online (Sandbox Code Playgroud)

现在,您可以在Pod中使用这些变量.

有关更多信息,请查看文档


Pet*_*ann 5

我还可以推荐Kustomize来完成这项任务。您可以将其用作部署管道的一部分来生成 K8s 配置(不仅是 ConfigMap,还包括部署、网络策略、服务等)。

在 kustomize 中,您需要一个ConfigMapGenerator。有不同的选择。在你的情况下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
Run Code Online (Sandbox Code Playgroud)

其他选项files会将文件的全部内容加载到 ConfigMap 的单个值中。

  • 请注意,在较新版本的 kustomize 中,密钥已更改为“envs”,并且现在接受列表。 (2认同)