ConfigMap使用

ConfigMap创建方式

1.以目录形式创建ConfigMap

[root@k8s-master01 cm]# ls
aaa  bbb
[root@k8s-master01 cm]# cat aaa
host=127.0.0.1
port=3308
[root@k8s-master01 cm]# cat bbb
host=127.0.0.1
port=65535

[root@k8s-master01 cm]# kubectl create configmap cm-1 --from-file .
configmap/cm-1 created
[root@k8s-master01 cm]# kubectl describe configmap cm-1
Name:         cm-1
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
aaa:
----
host=127.0.0.1
port=3308

bbb:
----
host=127.0.0.1
port=65535

Events:  <none>

--from-file 指定在目录下的所有文件都会被用在ConfigMap里面创建一个键值对,键的名字就是文件名,值就是文件的内容
2.使用文件创建ConfigMap

[root@k8s-master01 cm]# kubectl create configmap cm-2 --from-file ./aaa
configmap/cm-2 created
[root@k8s-master01 cm]# kubectl create configmap cm-3 --from-file ./aaa --from-file=./bbb
configmap/cm-3 created

--from-file这个参数可以使用多次,你可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的
3.使用键值创建(使用文字值创建,利用--from-literal参数传递配置信息,该参数可以使用多次,格式如下)

[root@k8s-master01 cm]# kubectl create configmap cm-4 --from-literal=host.allow=127 --from-literal=host.deny=128
configmap/cm-4 created
[root@k8s-master01 cm]# kubectl describe configmap cm-4
Name:         cm-4
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
host.deny:
----
128
host.allow:
----
127
Events:  <none>

直接写yaml文件创建ConfigMap

[root@k8s-master01 cm]# cat ccc.yaml 
kind: ConfigMap 
apiVersion: v1 
metadata: 
 name: cm-5 
 namespace: default 
data: 
 data.1: hello      
 data.2: world 
 config: |             #会被保存为一个文件(通俗易懂就是config是文件名,下面的是内容)
  property.1=value-1 
  property.2=value-2 
  property.3=value-3
[root@k8s-master01 cm]# kubectl describe configmap cm-5
Name:         cm-5
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
config:
----
property.1=value-1 
property.2=value-2 
property.3=value-3

data.1:
----
hello
data.2:
----
world
Events:  <none>

Pod中ConfigMap应用

1.设置环境变量的值

[root@k8s-master01 haimaxueyuan]# kubectl describe configmap  cm-1
Name:         cm-1
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
aaa:
----
host=127.0.0.1
port=3308

bbb:
----
host=127.0.0.1
port=65535

Events:  <none>
[root@k8s-master01 haimaxueyuan]# kubectl describe configmap  cm-4
Name:         cm-4
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
host.allow:
----
127
host.deny:
----
128
Events:  <none>

[root@k8s-master01 cm]# cat cm1.yaml
apiVersion: v1 
kind: Pod 
metadata: 
 name: testcm1-pod 
spec: 
 containers: 
 - name: testcm1 
   image: busybox 
   command: [ "/bin/sh", "-c", "env" ] 
   env:                      ##声明变量
   - name: DB_HOST 
     valueFrom:              ##值从何而来
      configMapKeyRef:       ## 指定configmap来源
       name: cm-4 
       key: host.allow
   - name: DB_PORT 
     valueFrom: 
      configMapKeyRef: 
       name: cm-4 
       key: host.deny
   envFrom:                    ##引用变量到容器
   - configMapRef: 
      name: cm-1
[root@k8s-master01 cm]# kubectl logs testcm1-pod
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=testcm1-pod
DB_PORT=128
SHLVL=1
HELLO_WORLD_SERVICE_HOST=10.104.245.92
HOME=/root
aaa=host=127.0.0.1
port=3308

HELLO_WORLD_SERVICE_PORT=80
HELLO_WORLD_PORT=tcp://10.104.245.92:80
HELLO_WORLD_PORT_80_TCP_ADDR=10.104.245.92
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HELLO_WORLD_PORT_80_TCP_PORT=80
KUBERNETES_PORT_443_TCP_PORT=443
HELLO_WORLD_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PROTO=tcp
bbb=host=127.0.0.1
port=65535

KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
HELLO_WORLD_PORT_80_TCP=tcp://10.104.245.92:80
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
DB_HOST=127

2.设置命令行参数

[root@k8s-master01 haimaxueyuan]# kubectl describe configmap  cm-4
Name:         cm-4
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
host.deny:
----
128
host.allow:
----
127
Events:  <none>

[root@k8s-master01 cm]# cat cm2.yaml 
apiVersion: v1 
kind: Pod 
metadata: 
 name: testcm2-pod 
spec: 
 containers: 
 - name: testcm2 
   image: busybox 
   command: [ "/bin/sh", "-c", "echo $(DB_HOST) $(DB_PORT)" ] 
   env:
   - name: DB_HOST 
     valueFrom: 
      configMapKeyRef: 
       name: cm-4 
       key: host.allow
   - name: DB_PORT 
     valueFrom: 
      configMapKeyRef: 
       name: cm-4
       key: host.deny
 [root@k8s-master01 cm]# kubectl logs testcm2-pod
 127 128

3.数据卷使用

另外一种是非常常见的使用ConfigMap 的方式:通过数据卷使用,在数据卷里面使用ConfigMap,就
是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容:

[root@k8s-master01 cm]# kubectl get configmaps cm-1 -o yaml 
apiVersion: v1
data:
  aaa: |
    host=127.0.0.1
    port=3308
  bbb: |
    host=127.0.0.1
    port=65535
kind: ConfigMap
metadata:
  creationTimestamp: "2020-06-24T06:03:25Z"
  name: cm-1
  namespace: default
  resourceVersion: "2027726"
  selfLink: /api/v1/namespaces/default/configmaps/cm-1
  uid: 5865a79d-5309-480a-a67f-4bb73cdf966e
  [root@k8s-master01 cm]# kubectl logs testcm3-pod 
host=127.0.0.1
port=3308
[root@k8s-master01 cm]# cat cm3.yaml 
apiVersion: v1 
kind: Pod 
metadata: 
 name: testcm3-pod 
spec: 
 containers: 
 - name: testcm3 
   image: busybox 
   command: [ "/bin/sh", "-c", "cat /etc/config/aaa" ] 
   volumeMounts: 
   - name: config-volume 
     mountPath: /etc/config
 volumes: 
 - name: config-volume 
   configMap: 
    name: cm-1
[root@k8s-master01 cm]# kubectl logs testcm3-pod 
host=127.0.0.1
port=3308

当然我们也可以在 ConfigMap 值被映射的数据卷⾥去控制路径,如下 Pod 定义:

[root@k8s-master01 cm]# kubectl get configmaps cm-1 -o yaml 
apiVersion: v1
data:
  aaa: |
    host=127.0.0.1
    port=3308
  bbb: |
    host=127.0.0.1
    port=65535
kind: ConfigMap
metadata:
  creationTimestamp: "2020-06-24T06:03:25Z"
  name: cm-1
  namespace: default
  resourceVersion: "2027726"
  selfLink: /api/v1/namespaces/default/configmaps/cm-1
  uid: 5865a79d-5309-480a-a67f-4bb73cdf966e
[root@k8s-master01 cm]# cat cm4.yaml 
apiVersion: v1 
kind: Pod 
metadata: 
 name: testcm4-pod 
spec:
  containers: 
  - name: testcm4 
    image: busybox 
    command: [ "/bin/sh","-c","cat /etc/config/path/to/bbb" ] 
    volumeMounts: 
    - name: config-volume 
      mountPath: /etc/config 
  volumes: 
  - name: config-volume 
    configMap: 
     name: cm-1
     items:        ##yaml文件中挂载点为/etc/config,而command字段执行是另一个路径,与挂载目录不匹配,因此引入items
                       ##items存在的意义就是映射路径关系,path字段映射为path/to/bbb,那么command字段的内容就可以访问到了
     - key: bbb
       path: path/to/bbb
 [root@k8s-master01 cm]# kubectl logs testcm4-pod 
 host=127.0.0.1
 port=65535

另外需要注意的是,当 ConfigMap 以数据卷的形式挂载进 Pod 的时,这时更新 ConfigMap (或删掉重 建 ConfigMap ), Pod 内挂载的配置信息会热更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值