大部分情况下,ConfigMap定义的都是配置文件,而不是环境变量,因此需要将ConfigMap中的文件(一般为--from-file创建)挂载到Pod中,然后Pod中的容器就可以引用,此时可以通过Pod的volume字段进行挂载。
名为cm-dir的ConfigMap:
复制 $ kubectl get cm cm-dir -o yaml
apiVersion: v1
data:
game.properties: "enemies=aliens\r\nlives=3\r\nenemies.cheat=true\r\nenemies.cheat.level=noGoodRotten\r\nsecret.code.passphrase=UUDDLRLRBABAS\r\nsecret.code.allowed=true\r\nsecret.code.lives=30"
ui.properties: "color.good=purple\r\ncolor.bad=yellow\r\nallow.textmode=true\r\nhow.nice.to.look=fairlyNice"
kind: ConfigMap
metadata:
creationTimestamp: "2023-11-29T06:41:29Z"
name: cm-dir
namespace: default
resourceVersion: "152782"
uid: 0238826d-3ffb-4365-9b12-76610f4b6b31
在该configMap中存在两个键,分别名为game.properties 和ui.properties ,这两个键对应的值各自表示一个properties文件 。
pod-cm.yaml
复制 apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: busybox
command: ['/bin/sh', '-c', 'ls /etc/config']
volumeMounts:
- name: config-volume
mountPath: /etc/config
resources:
limits:
memory: "128Mi"
cpu: "500m"
volumes:
- name: config-volume
configMap:
name: cm-dir
restartPolicy: Never
使用kubectl创建该Pod后,会执行Pod设置的command命令,即执行ls /etc/config/
复制 $ kubectl create -f pod-cm.yaml
pod/dapi-test-pod created
$ kubectl get pod dapi-test-pod
NAME READY STATUS RESTARTS AGE
dapi-test-pod 0/1 Completed 0 17s
$ kubectl logs dapi-test-pod
game.properties
ui.properties
复制 $ kubectl create -f pod-cm-rename.yaml
pod/pod-cm-rename created
$ kubectl get pod pod-cm-rename
NAME READY STATUS RESTARTS AGE
pod-cm-rename 0/1 Completed 0 13s
$ kubectl logs pod-cm-rename
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
注意:
只有在items中指定的key才会被挂载 ,未指定的key将不会被挂载。