Kubernetes基础:ConfigMap:环境变量引用方式

前面的文章介绍了ConfigMap的作用以及常见的创建、查询和删除等操作方法,这篇文章介绍一下在Kubernetes集群中使用ConfigMap的环境变量引用的方式。

环境准备

本文使用Kubernetes 1.17,可参看下文进行快速环境搭建:

  • 单机版本或者集群版本环境搭建

ConfigMap介绍

可参看下文说明了解ConfigMap创建、查询和删除等操作的方法。

  • ConfigMap增删改查

使用示例

这里以如下用户名和ID为例,如何在Kubernetes中创建和使用Configmap进行说明

变量说明 标识符 设定值
用户名 user.name liumiao
用户ID user.id 1003

创建ConfigMap

准备如下设定内容

[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]#

确认ConfigMap

使用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]#

环境变量方式引用: 方式1

这里我们定一个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]# 
  • 生成pod
[root@host131 config]# kubectl create -f busybox-pod.yaml 
pod/configmap-test-pod created
[root@host131 config]#
  • 确认生成的pod
[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的信息。

环境变量方式引用: 方式2

在方式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的扩展这里就不再一一赘述

你可能感兴趣的:(#,深入浅出kubernetes)