• k8s用 ConfigMap 管理配置(13)


    一、ConfigMap介绍

      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 配置文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myconfigmap
    data:
      config1: mysqlip=192.168.11.6
      config2: zabbixip=192.168.11.7

      文件中的数据直接以明文输入。

    [root@ren7 yaml]# kubectl apply -f configmap.yml 
    configmap/myconfigmap created
    [root@ren7 yaml]# kubectl get configmap
    NAME          DATA   AGE
    myconfigmap   2      24s

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

    (1)Volume 方式:

    [root@ren7 yaml]# cat pod5.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod4
    spec:
      containers:
        - name: mypod4
          image: reg.yunwei.com/learn/busybox:latest
          args: 
          - /bin/sh
          - -c
          - sleep 10; touch /tmp/healthy; sleep 30000
          volumeMounts:
          - mountPath: "/etc/foo"
            name: foo
            readOnly: true
      volumes:
        - name: foo
          configMap: 
            name: myconfigmap
    [root@ren7 yaml]# kubectl apply -f pod5.yaml 
    pod/mypod4 created
    [root@ren7 yaml]# kubectl exec -it mypod4 sh
    / # cd /etc/foo/
    /etc/foo # ls
    config1  config2
    /etc/foo # cat config1 
    mysqlip=192.168.11.6/etc/foo # 
    /etc/foo # cat config2 
    zabbixip=192.168.11.7/etc/foo # 
    /etc/foo # exit

    (2)环境变量方式:

    [root@ren7 yaml]# cat pod6.yml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod5
    spec:
      containers:
        - name: mypod5
          image: reg.yunwei.com/learn/busybox:latest
          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@ren7 yaml]# kubectl apply -f pod6.yml 
    pod/mypod5 created
    [root@ren7 yaml]# kubectl exec -it mypod5 sh
    / # 
    / # echo $CONFIG_1
    mysqlip=192.168.11.6
    / # echo $CONFIG_2
    zabbixip=192.168.11.7/ # exit

    二、configmap实践

      大多数情况下,配置信息都以文件形式提供,所以在创建 ConfigMap 时通常采用 --from-file 或 YAML 方式,读取 ConfigMap 时通常采用 Volume 方式。

      比如给 Pod 传递如何记录日志的配置信息:

    (1)可以采用 --from-file 形式,则将其保存在文件 logging.conf 中,然后执行命令:kubectl create configmap myconfigmap1 --from-file=./logging.conf

    (2)如果采用 YAML 配置文件,其内容则为:

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

      创建并查看 ConfigMap:

      在 Pod 中使用此 ConfigMap,配置文件为:

      ① 在 volume 中指定存放配置信息的文件相对路径为 myapp/logging.conf。
      ② 将 volume mount 到容器的 /etc 目录。

      创建 Pod 并读取配置信息:

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

    小结

      我们学习了如何向 Pod 传递配置信息。如果信息需要加密,可使用 Secret;如果是一般的配置信息,则可使用 ConfigMap。

      Secret 和 ConfigMap 支持四种定义方法。Pod 在使用它们时,可以选择 Volume 方式或环境变量方式,不过只有 Volume 方式支持动态更新。

  • 相关阅读:
    容器技术之Dockerfile(一)
    容器技术之Docker常用命令说明
    容器技术之Docker数据卷
    Cypress与TestCafe WebUI端到端测试框架简介
    API测试之Postman使用全指南(原来使用 Postman测试API如此简单)
    【PyMuPDF和pdf2image】Python将PDF转成图片
    2020 | 可替代Selenium的测试框架Top15
    AWS EC2+Docker+JMeter构建分布式负载测试基础架构
    Appium移动端自动化测试--元素操作与触摸动作
    Appium移动端自动化测试--使用IDE编辑并强化脚本
  • 原文地址:https://www.cnblogs.com/renyz/p/11755276.html
Copyright © 2020-2023  润新知