前面的文章介绍了ConfigMap的作用以及常见的创建、查询和删除等操作方法,这篇文章介绍一下在Kubernetes集群中使用ConfigMap的环境变量引用的方式。
本文使用Kubernetes 1.17,可参看下文进行快速环境搭建:
可参看下文说明了解ConfigMap创建、查询和删除等操作的方法。
这里以如下用户名和ID为例,如何在Kubernetes中创建和使用Configmap进行说明
变量说明 | 标识符 | 设定值 |
---|---|---|
用户名 | user.name | liumiao |
用户ID | user.id | 1003 |
准备如下设定内容
[root@host131 config]# kubectl get cm
No resources found in default namespace.
[root@host131 config]#
[root@host131 config]# cat user.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: user-configmap
namespace: default
data:
user.name: liumiao
user.id: '1001'
[root@host131 config]#
使用kubectl create 命令创建ConfigMap,执行日志如下所示:
[root@host131 config]# kubectl create -f user.yml
configmap/user-configmap created
[root@host131 config]#
使用kubectl get configmap即可获取已经创建的ConfigMap信息
[root@host131 config]# kubectl get cm
NAME DATA AGE
user-configmap 2 34s
[root@host131 config]# kubectl describe cm user-configmap
Name: user-configmap
Namespace: default
Labels:
Annotations:
Data
====
user.id:
----
1001
user.name:
----
liumiao
Events:
[root@host131 config]#
这里我们定一个busybox的pod,然后将上述保存在user-configmap的用户名和ID保存在环境变量中
说明 | 环境变量 | 获取数据来源 |
---|---|---|
用户名的环境变量 | ENV_VAR_USERNAME | user.name |
用户ID的环境变量 | ENV_VAR__ID | user.id |
生成此pod的示例yaml文件如下所示:
[root@host131 config]# cat busybox-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-test-pod
spec:
containers:
- name: busybox-container
image: busybox:latest
command: ["sleep", "1000"]
env:
- name: ENV_VAR_USERNAME
valueFrom:
configMapKeyRef:
name: user-configmap
key: user.name
- name: ENV_VAR__ID
valueFrom:
configMapKeyRef:
name: user-configmap
key: user.id
restartPolicy: Never
[root@host131 config]#
[root@host131 config]# kubectl create -f busybox-pod.yaml
pod/configmap-test-pod created
[root@host131 config]#
[root@host131 config]# kubectl get pods
NAME READY STATUS RESTARTS AGE
configmap-test-pod 1/1 Running 0 5s
[root@host131 config]#
[root@host131 config]# kubectl exec configmap-test-pod env |grep ENV_VAR
ENV_VAR_USERNAME=liumiao
ENV_VAR__ID=1001
[root@host131 config]#
可以看到,新创建的名为configmap-test-pod的pod中已经成功获取到了user-configmap中保存的用户名和ID的信息。
在方式1中将ConfigMap中的Key与环境变量一一映射进行使用,还可以不指定环境变量名称一次性全部引用,只需要将相应的yml文件设定为如下方式即可
[root@host131 config]# cat busybox-pod-all.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-test-pod-all
spec:
containers:
- name: busybox-container
image: busybox:latest
command: ["sleep", "1000"]
envFrom:
- configMapRef:
name: user-configmap
restartPolicy: Never
[root@host131 config]#
创建pod
[root@host131 config]# kubectl create -f busybox-pod-all.yaml
pod/configmap-test-pod-all created
[root@host131 config]#
[root@host131 config]# kubectl get pods |grep all
configmap-test-pod-all 1/1 Running 0 6s
[root@host131 config]#
确认环境变量
[root@host131 config]# kubectl exec configmap-test-pod-all env |grep user
user.id=1001
user.name=liumiao
[root@host131 config]#
另外还有其他的方式,比如作为参数传递给ENTRYPOINT中的命令,而实际上是作为方式1的扩展这里就不再一一赘述