k8s以变量形式挂载configmap
ConfigMap 功能在 Kubernetes1.2 版本的时候就有了,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。这些配置信息需要与 docker image 解耦,ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者 JSON 二进制大对象。
本篇先从环境变量开始。
1[root@test-64626 ~]# kubectl create configmap myconfigmap --from-literal=user.name=itybku --from-literal=user.id=1001
2
3# 也可以直接使用yaml文件,可以通过如下命令生成myconfigmap的yaml文件
4[root@test-64626 ~]# kubectl create configmap myconfigmap --from-literal=user.name=itybku --from-literal=user.id=1001 -o
5 yaml --dry-run=client
6apiVersion: v1
7data:
8 user.id: "1001"
9 user.name: itybku
10kind: ConfigMap
11metadata:
12 creationTimestamp: null
13 name: myconfigmap
14
15[root@test-64626 ~]# kubectl describe configmaps myconfigmap
16Name: myconfigmap
17Namespace: default
18Labels: <none>
19Annotations: <none>
20
21Data
22====
23user.id:
24----
251001
26user.name:
27----
28itybku
29Events: <none>
30</none></none></none>
环境变量方式引用方式1:key引用
这里我们定一个pod,然后将上述保存在user-configmap的用户名和ID保存在环境变量中
说明 | 环境变量 | 获取数据来源 |
---|---|---|
用户名的环境变量 | ENV_VAR_USERNAME | user.name |
用户ID的环境变量 | ENV_VAR__ID | user.id |
1[root@test-64626 ~]# cat create-pod.yaml
2apiVersion: v1
3kind: Pod
4metadata:
5 name: configmap-test-pod
6spec:
7 containers:
8 - name: nginx-container
9 image: nginx:latest
10 env:
11 - name: ENV_VAR_USERNAME
12 valueFrom:
13 configMapKeyRef:
14 name: myconfigmap
15 key: user.name
16 - name: ENV_VAR_ID
17 valueFrom:
18 configMapKeyRef:
19 name: myconfigmap
20 key: user.id
21 restartPolicy: Never
22
23[root@test-64626 ~]# kubectl create -f create-pod.yaml
24pod/configmap-test-pod created
25[root@test-64626 ~]# kubectl get pods
26NAME READY STATUS RESTARTS AGE
27configmap-test-pod 1/1 Running 0 4s
28[root@test-64626 ~]# kubectl exec configmap-test-pod -- env|grep ENV
29ENV_VAR_USERNAME=itybku
30ENV_VAR_ID=1001
环境变量方式引用方式2:configmap名称映射
在方式1中将ConfigMap中的Key与环境变量一一映射进行使用,还可以不指定环境变量名称一次性全部引用,只需要将相应的yml文件设定为如下方式即可
变量说明 | 标识符 | 设定值 |
---|---|---|
用户名 | user.name | itybku |
用户ID | user.id | 1001 |
1[root@test-64626 ~]# cat create-pod2.yaml
2apiVersion: v1
3kind: Pod
4metadata:
5 name: configmap-test-all
6spec:
7 containers:
8 - name: nginx-container
9 image: nginx:latest
10 envFrom:
11 - configMapRef:
12 name: myconfigmap
13 restartPolicy: Never
14[root@test-64626 ~]#
15[root@test-64626 ~]# kubectl create -f create-pod2.yaml
16pod/configmap-test-all created
17[root@test-64626 ~]# kubectl exec configmap-test-all -- env|grep ENV
18[root@test-64626 ~]# kubectl exec configmap-test-all -- env|grep user
19user.id=1001
20user.name=itybku
注意,在使用configmap名映射方式,不建议以user.id、user.name这样的方式命名变量,因为这样的变量无法正常通过echo $变量名
的方式进行输出,因为这不符合shell规范,里面包含了特殊符号点。
1[root@test-64626 ~]# kubectl exec -it configmap-test-pod -- /bin/bash
2root@configmap-test-all:/# echo ${user.id}
3bash: ${user.id}: bad substitution
4root@configmap-test-all:/# echo $user
5
6root@configmap-test-all:/# echo $user.id
7.id
这里也给下shell变量的要求:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线 _。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)
所以可以改用下面的方式命名变量:
1[root@test-64626 ~]# kubectl create configmap myconfigmap --from-literal=Name=itybku --from-literal=Id=1001
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/env-configmap/6848.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.