每天5分钟玩转Kubernetes | ConfigMap

书籍来源:cloudman《每天5分钟玩转Kubernetes》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:每天5分钟玩转Kubernetes | 汇总_COCOgsta的博客-CSDN博客


Secret可以为Pod提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以用ConfigMap。

ConfigMap的创建和使用方式与Secret非常类似,主要的不同是数据以明文的形式存放。

与Secret一样,ConfigMap也支持四种创建方式:

(1)通过--from-literal:

kubectl create configmap myconfigmap --from-literal=config1=xxx--from-literal=config2=yyy 

每个--from-literal对应一个信息条目。

(2)通过--from-file:

echo -n xxx > ./config1 
echo -n yyy > ./config2 
kubectl create configmap myconfigmap --from-file=./config1 --from-file=./config2 

每个文件内容对应一个信息条目。

(3)通过--from-env-file:

cat << EOF > env.txt 
config1=xxx 
config2=yyy 
EOF 
kubectl create configmap myconfigmap --from-env-file=env.txt 

文件env.txt中每行Key=Value对应一个信息条目。

(4)通过YAML配置文件,如下所示。文件中的数据直接以明文输入。

[root@k8s-master ~]# cat configMap.yml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfigmap
data:
  config1: xxx
  config2: yyy
[root@k8s-master ~]# 

与Secret一样,Pod也可以通过Volume或者环境变量的方式使用Secret。

(1)Volume方式如图10-17所示。

[root@k8s-master ~]# cat myconfigmap.yml 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/healthy; sleep 30000
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    configMap:
      name: myconfigmap
[root@k8s-master ~]# 

(2)环境变量方式如图所示。

[root@k8s-master ~]# cat myconfigmap-2.yml 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/healthy; sleep 30000
    env:
      - name: CONFIG_1
        valueFrom:
          configMapKeyRef:
            name: myconfigmap
            key: config1
      - name: CONFIG_2
        valueFrom:
          configMapKeyRef:
            name: myconfigmap
            key: config2
[root@k8s-master ~]# 

大多数情况下,配置信息都以文件形式提供,所以在创建ConfigMap时通常采用--from-file或YAML方式,读取ConfigMap时通常采用Volume方式。比如给Pod传递如何记录日志的配置信息,如下所示。

class: logging.handlers.RotatingFileHandler
formatter: precise
level: INFO
filename: %hostname-%timestamp.log

可以采用--from-file形式,将其保存在文件logging.conf中,然后执行命令:

kubectl create configmap myconfigmap --from-file=./logging.conf 

如果采用YAML配置文件,其内容则如下所示。

[root@k8s-master ~]# cat myconfigmap-3.yml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfigmap
data:
  logging.conf: |
    class: logging.handlers.RotatingFileHandler
    formatter: precise
    level: INFO
    filename: %hostname-%timestamp.log
[root@k8s-master ~]# 

注意,别漏写了Key logging.conf后面的|符号。

创建并查看ConfigMap,如图所示。

在Pod中使用此ConfigMap,配置文件如下所示。

[root@k8s-master ~]# cat mypod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/healthy; mount -o remount -rw /; sleep 30000
    volumeMounts:
    - name: foo
      mountPath: "/etc/myapp"
  volumes:
  - name: foo
    configMap:
      name: myconfigmap
      items:
        - key: logging.conf
          path: myapp/logging.conf
[root@k8s-master ~]# 

① 在volume中指定存放配置信息的文件相对路径为myapp/logging.conf。

② 将volume mount到容器的/etc目录。

创建Pod并读取配置信息,如图所示。

配置信息已经保存到
/etc/myapp/myapp/logging.conf文件中。与Secret一样,Volume形式的ConfigMap也支持动态更新,留给大家自己实践。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/125168776