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

时间:2018-03-25 16:19:16

标签: kubernetes

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

关于如何完成任务的任何指示都会很棒。

TIA

3 个答案:

答案 0 :(得分:8)

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

按原样从文件创建ConfigMap。

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

例如,您的文件target: env: live siteName: codelists engineUrl: http://localhost:9080 localRepoPath: /opt/crafter-cms-authoring/data/repos/sites/mysite/published deployment: pipeline: - processorName: gitPushProcessor remoteRepo: url: ssh://path/to/gitlab/site/mysite 包含内容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

在此之后你可以将任何ConfigMaps挂载到Pod,例如让我们挂载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

your-file.json

现在,您可以从Pod内的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 获取任何信息。请记住,数据是只读的。

从包含环境变量的文件创建ConfigMap。

您可以使用特殊语法在文件中定义/etc/config/your-file.json对。 这些语法规则适用:

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

您的文件key: value包含内容

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

现在您可以将ConfigMap数据用作Pod环境变量:

apiVersion: v1
kind: ConfigMap
metadata:
  name: name-of-your-configmap-3
data:
  key1: value1
  key2: value2
  keyN: valueN

现在你可以在Pod中使用这些变量。

有关详情,请查看documentation

答案 1 :(得分:3)

对于此任务,我也可以推荐Kustomize。您可以将其用作部署管道的一部分,以生成K8s配置(不仅是ConfigMap,而且还包括Deployments,NetworkPolicies,服务等)。

在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

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

答案 2 :(得分:0)

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

  • 使用从configmap创建配置映射
kubectl  create configmap special-config --from-env-file=<key value pairs file>
  • 将需要这些键值对的pod容器的规范更新为
      envFrom:
      - configMapRef:
          name: special-config

示例:

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