我有一个需求,需要将一堆键值对推送到文本/JSON文件中。在此之后,我想将键值数据导入到configMap中,并使用kubernetes-client API在POD内使用这个configMap。
如何完成这个需求,有什么指针或建议吗?
TIA
我有一个需求,需要将一堆键值对推送到文本/JSON文件中。在此之后,我想将键值数据导入到configMap中,并使用kubernetes-client API在POD内使用这个configMap。
如何完成这个需求,有什么指针或建议吗?
TIA
有两种方法可以做到。
在这种情况下,您将获得一个以文件名作为键,以文件数据作为值的ConfigMap。
例如,您有一个名为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
结果如下:
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
完成后,您可以将任何一个ConfigMap挂载到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
现在您可以从Pod内获取/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
因此:
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 内使用这些变量。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的单个值中。
envs
,并且现在接受列表。 - prentice使用以下方法将环境变量或文本文件中的键值对导出为容器环境变量中相同的内容:
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
keys
而不是your-file.json
。无论如何,谢谢! - RAbraham