zoukankan      html  css  js  c++  java
  • k8s —— 用configmap管理配置(转发)

    一、ConfigMap介绍管理配置:

    ConfigMap介绍

    Secret 可以为 Pod 提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap
    ConfigMap 的创建和使用方式与 Secret 非常类似,主要的不同是数据以明文的形式存放。
    与 Secret 一样,ConfigMap 也支持四种创建方式:
     

    1. 通过 --from-literal

    kubectl create configmap yourconfigmap --from-literal=config3 --from-literal=config4
    每个 --from-literal 对应一个信息条目。

     

    [root@cicd yml]# kubectl get configmap
    NAME            DATA      AGE
    yourconfigmap   1         2h

     

     

    2. 通过 --from-file

    echo -n mysql=192.168.253.9 > ./config3
    echo -n rabbit=192.168.253.10> ./config4
    kubectl create configmap myconfigmap --from-file=./config3  --from-file=./config4
    每个文件内容对应一个信息条目。
     

    3. 通过 --from-env-file

    cat << EOF > env.txt
    config3= mysql
    config4= rabbitmq
    EOF
    kubectl create configmap myconfigmap --from-env-file=env.txt
    文件 env.txt 中每行 Key=Value 对应一个信息条目。
     

    4. 通过 YAML 配置文件: 

    然后创建configmap。

    复制代码
    [root@cicd yml]# kubectl apply -f configmap.yml 
    configmap "keyconfigmap" created
    [root@cicd yml]# kubectl get configmap
    NAME            DATA      AGE
    keyconfigmap    2         3s
    yourconfigmap   1         2h
    复制代码
    文件中的数据直接以明文输入。
    与 Secret 一样,Pod 也可以通过 Volume 或者环境变量的方式使用 Secret。 
     

    (1)Volume 方式:

     

    (2)环境变量方式:

     

    需要注意的是上图的key值对应的是configmap.yml文件中的

    data:
      config3: mysql=192.168.253.9
      config4: rabbitmq=192.168.253.10

    所以要注意书写,然后configmap的名字也要与选择的configmap对上。

     
    如果报错:
    [root@cicd yml]# kubectl apply -f pod6.yml
    error: error converting YAML to JSON: yaml: line 12: mapping values are not allowed in this context
    此报错是因为没有对齐造成映射的目录没有生效。

     

    configmap实践

    大多数情况下,配置信息都以文件形式提供,所以在创建 ConfigMap 时通常采用 --from-file 或 YAML 方式读取 ConfigMap 时通常采用 Volume 方式。
    比如给 Pod 传递如何记录日志的配置信息:
     
    (1)可以采用 --from-file 形式,则将其保存在文件 logging.conf 中,然后执行命令:kubectl create configmap myconfigmap1 --from-file=./logging.conf
    (2)如果采用 YAML 配置文件,其内容则为:
     
    [root@cicd yml]# vim configmap2.yml
    注意别漏写了 Key logging.conf 后面的 | 符号。
     
    创建并查看 ConfigMap:
    复制代码
    [root@cicd yml]# kubectl apply -f configmap2.yml 
    configmap "newconfigmap" unchanged
    [root@cicd yml]# kubectl get configmap
    NAME            DATA      AGE
    keyconfigmap    2         13m
    newconfigmap    1         2h
    复制代码
    在 Pod 中使用此 ConfigMap,配置文件为:
     
    [root@cicd yml]# vim pod8.yml
    ① 在 volume 中指定存放配置信息的文件相对路径为 myapp/logging.conf
    注意value值logging.conf与configmap2.yml的文件名对应,并且与下一行的path路径下文件名对应,要改一起改,不然不要变动。
     
    ② 将 volume mount 到容器的 /etc 目录。
    创建 Pod 并读取配置信息:
     
    复制代码
    [root@cicd yml]# kubectl apply -f pod8.yml 
    pod "mypod-c4" created
    [root@cicd yml]# kubectl get pod
    NAME       READY      STATUS            RESTARTS   AGE
    mypod-c4   1/1       running             0          10s
    mypod5     1/1       Running             0          41m
    复制代码

    如果报错:

    1、pull image "busybox:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout
    则可能因为仓库没有及时给与反应,稍等再查看状态

    2、Error response from daemon: Get https://reg.yunwei.edu/v2/: x509: certificate signed by unknown authority
    此报错是因为ca证书,重新发送一份到该节点。重启docker即可。

    然后进入mypod-c4验证结果:

    复制代码
    [root@cicd yml]# kubectl exec -it mypod-c4 sh
    / # cd /etc/
    /etc # ls
    foo          hostname     localtime    network      resolv.conf
    group        hosts        mtab         passwd       shadow
    /etc # cd foo/
    /etc/foo # ls
    myapp
    /etc/foo # cd myapp/
    /etc/foo/..2019_06_24_10_29_53.083470832/myapp # ls
    logging.conf
    /etc/foo/..2019_06_24_10_29_53.083470832/myapp # cat logging.conf 
    class: logging.handlers.RotatingFileHandler
    formatter: precise
    level: INFO
    filename: %hostname-%timestamp.log
    复制代码
    发现配置信息已经保存到 /etc/myapp/logging.conf 文件中。与 Secret 一样,Volume 形式的 ConfigMap 也支持动态更新

     

    小结

    我们学习了如何向 Pod 传递配置信息。如果信息需要加密,可使用 Secret;如果是一般的配置信息,则可使用 ConfigMap。
    Secret 和 ConfigMap 支持四种定义方法。Pod 在使用它们时,可以选择 Volume 方式或环境变量方式,不过只有 Volume 方式支持动态更新
  • 相关阅读:
    c#时间函数
    .NET中的lock(C#版本)
    关于OpenSmtp邮件标题过长,附件名,用户名出现乱码问题的终及解决Dll文件
    Windbg 用法
    使用OpenXML将数据导入到Excel模板中
    Compiere源码workspace的两个配置文件内容
    我学MEF系列(8):MEF+Unity实现可扩展拦截器
    基于插件架构的简单的Winform框架(上)
    我学Flash/Flex(2):AS3读取XML文件内容
    我学Flash/Flex(1):Action Script3.0基础知识
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/13633425.html
Copyright © 2011-2022 走看看