我有一个要求,我将一堆键值对推送到text / json文件。发布,我想将键值数据导入configMap,并使用kubernetes-client API在POD中使用此configMap。
关于如何完成任务的任何指示都会很棒。
TIA
答案 0 :(得分:8)
你可以用两种方式做到这一点。
在这种情况下,您将获得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
获取任何信息。请记住,数据是只读的。
您可以使用特殊语法在文件中定义/etc/config/your-file.json
对。
这些语法规则适用:
您的文件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的容器环境变量相同
kubectl create configmap special-config --from-env-file=<key value pairs file>
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