kubernetes进阶之路(八)~~~ConfigMap

官网https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

ConfigMaps allow you to decouple configuration artifacts from image content to keep containerized applications portable. 

说白了就是用来保存配置数据的键值对,也可以保存单个属性,也可以保存配置文件。

所有的配置内容都存储在etcd中,创建的数据可以供Pod使用。

configMap可以通过以下四种方式进行创建,下面来一一进行讲述。

1 命令行创建

# 创建一个名称为my-config的ConfigMap,key值时db.port,value值是'3306'
kubectl create configmap my-config --from-literal=db.port='3306'

#查看生成的configMap
[root@henry001 ~]# kubectl get configMap
NAME        DATA   AGE
my-config   1      79s

查看yaml的详情信息:

[root@henry001 ~]# kubectl get configmap my-config -o yaml
apiVersion: v1
data:
  db.port: "3306"
kind: ConfigMap
metadata:
  creationTimestamp: "2020-01-01T01:55:18Z"
  name: my-config
  namespace: default
  resourceVersion: "63283"
  selfLink: /api/v1/namespaces/default/configmaps/my-config
  uid: c3358683-2c39-11ea-8e59-00163e2c61c9

2 从配置文件中创建

创建一个文件,名称为myconfig.properties

name=henry
age=18
`创建configmap`
[root@henry001 ~]# kubectl create configmap myconfig --from-file=./myconfig.properties 
configmap/myconfig created

`查看生成的configmap`
[root@henry001 ~]# kubectl get configmap
NAME        DATA   AGE
my-config   1      39m
myconfig    1      19s

`查看configmap的yaml文件`
[root@henry001 ~]# kubectl get configmap myconfig -o yaml
apiVersion: v1
data:
  myconfig.properties: |
    name=henry       #myconfig.properties中的内容
    age=18
kind: ConfigMap
metadata:
  creationTimestamp: "2020-01-01T02:34:45Z"
  name: myconfig
  namespace: default
  resourceVersion: "66726"
  selfLink: /api/v1/namespaces/default/configmaps/myconfig
  uid: 45d3f742-2c3f-11ea-8e59-00163e2c61c9

3 从目录中创建

#创建目录
mkdir config
#进入目录
cd config
#创建两个文件夹
mkdir a
mkdir b
cd ..
`创建configmap`
[root@henry001 ~]# kubectl create configmap config --from-file=config/
configmap/config created

`查看configmap`
[root@henry001 ~]# kubectl get configmap
NAME        DATA   AGE
config      0      13s   #从目录中创建
my-config   1      56m   #命令行生成
myconfig    1      17m   #配置文件生成

查看

[root@henry001 ~]# kubectl get configmap config -o yaml
apiVersion: v1
data:
  a: |
    aaaaaaa
    cccccc            #a文件中的内容
    ss1234
  b: |
    xxxxxxxxxxxxx
    yyyyyyyyyyyyy      #b文件中的内容
    zzzzzzzzzzzz123
kind: ConfigMap
metadata:
  creationTimestamp: "2020-01-01T06:58:55Z"
  name: config
  namespace: default
  resourceVersion: "89928"
  selfLink: /api/v1/namespaces/default/configmaps/config
  uid: 2d473189-2c64-11ea-8e59-00163e2c61c9

可以看到指定目录创建时configmap内容中的各个文件会创建一个key/value对,key是文件名,value是文件内容。

4 通过yaml文件创建

01 创建configmaps.yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO
kubectl apply -f configmaps.yaml
kubectl get configmap

02 执行yaml文件,创建configmap

`创建configmap`
[root@henry001 ~]# kubectl apply -f configmaps.yaml 
configmap/special-config created
configmap/env-config created

`查看创建的configmap`
[root@henry001 ~]# kubectl get configmap
NAME             DATA   AGE
config           0      14m    #从目录中创建
env-config       1      18s    #yaml文件创建
my-config        1      70m    #命令行创建
myconfig         1      31m    #配置文件创建
special-config   1      18s    #yaml文件创建

5 ConfigMap的使用

  • 使用方式
(1)通过环境变量的方式,直接传递给pod
	使用configmap中指定的key
	使用configmap中所有的key
(2)通过在pod的命令行下运行的方式(启动命令中)
(3)作为volume的方式挂载到pod内
  • 注意
(1)ConfigMap必须在Pod使用它之前创建
(2)使用envFrom时,将会自动忽略无效的键
(3)Pod只能使用同一个命名空间的ConfigMap
5.1 通过环境变量使用

使用valueFrom、configMapKeyRef、name

key的话指定要用到的key

01 创建yaml文件

vim  test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        # Define the environment variable
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              # The ConfigMap containing the value you want to assign to SPECIAL_LEVEL_KEY
              name: special-config     
              # Specify the key associated with the value
              key: special.how
  restartPolicy: Never

02 执行yaml文件

kubectl apply -f test-pod.yaml

03 查看

`查看pod`
[root@henry001 controller]# kubectl get pods
NAME            READY   STATUS      RESTARTS   AGE
dapi-test-pod   0/1     Completed   0          89s

`查看日志`
[root@henry001 controller]# kubectl logs dapi-test-pod
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=dapi-test-pod
SHLVL=1
HOME=/root
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
SPECIAL_LEVEL_KEY=very              #名称为special-config的configmap中special.how值为very
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/

5.2 用作命令行参数

在命令行下引用时,需要先设置为环境变量,之后可以用过$(VAR_NAME)设置容器启动命令的启动参数

01 创建yaml文件

vim  test-pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod2
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY)" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how
  restartPolicy: Never

02 执行yaml文件

kubectl apply -f test-pod2.yaml

03 查看

`查看pod`
[root@henry001 controller]# kubectl get pods
NAME             READY   STATUS      RESTARTS   AGE
dapi-test-pod    0/1     Completed   0          14m
dapi-test-pod2   0/1     Completed   0          5s

`查看打印的日志`
[root@henry001 controller]# kubectl logs dapi-test-pod2
very

5.3 作为volume挂载使用

将创建的ConfigMap直接挂载至Pod的/etc/config目录下,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容。

01 创建yaml文件

vim  pod-myconfigmap-volume.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-configmap2
spec:
  containers:
    - name: test-container
      image: busybox
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config
  restartPolicy: Never

02 执行yaml文件

kubectl apply -f  pod-myconfigmap-volume.yaml

03 查看

`查看pod`
[root@henry001 controller]# kubectl get pods
NAME             READY   STATUS      RESTARTS   AGE
dapi-test-pod    0/1     Completed   0          3h28m
dapi-test-pod2   0/1     Completed   0          3h13m
pod-configmap2   0/1     Running     0          3m56s

`进入pod的容器中`
[root@henry001 controller]# kubectl exec -it pod-configmap2 bash
root@pod-configmap3:/# cd /etc/config/

`在/etc/config的文件目录下有一个special.how命名的文件,是名为special-config的configmap的key值`
root@pod-configmap3:/etc/config# ls
special.how

`查看内容,是名为special-config的configmap的value值`
root@pod-configmap3:/etc/config# cat special.how 
very

发布了28 篇原创文章 · 获赞 6 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_33996921/article/details/103861935