• 云原生技术 --- k8s配置组件之ConfigMap的学习与使用


    ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
    ConfigMap 将你的环境配置信息和 容器镜像 解耦,便于应用配置的修改。
    ConfigMap中的数据是明文保存的

    适用场景

    使用 ConfigMap 来将你的配置数据和应用程序代码分开。

    • 假设你正在开发一个应用,在调用服务A时,开发环境地址为dev.xxx.com,而生产环境地址为xxxx.com,这时候就可以使用ConfigMap
    • 某些应用程序,例如Hadoop需要有复杂的xml配置文件,这种配置文件,也可以使用ConfigMap进行存储

    注意事项

    • ConfigMap 在设计上不是用来保存大量数据的。在 ConfigMap 中保存的数据不可超过 1 MiB。如果需要保存超出此容量的数据,考虑挂载存储卷 或者使用独立的数据库或者文件服务。
    • ConfigMap 的名字必须是一个合法的 DNS 子域名。不能超过 253 个字符,只能包含小写字母、数字,以及 ‘-’ 和 ‘.’,必须以字母数字开头,必须以字母数字结尾
    • data 或 binaryData 字段下面的每个键的名称都必须由字母数字字符或者 -、_ 或 . 组成。在 data 下保存的键名不可以与在 binaryData 下出现的键名有重叠。
    • data 字段设计用来保存 UTF-8 字符串,而 binaryData 则被设计用来保存二进制数据作为 base64 编码的字串
    • 静态 Pod 中的 spec 字段不能引用 ConfigMap 或任何其他 API 对象。

    使用方式

    可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:

    • 在容器命令和参数内
    • 容器的环境变量
    • 在只读卷里面添加一个文件,让应用来读取
    • 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap

    这些不同的方法适用于不同的数据使用方式。 对前三个方法,kubelet 使用 ConfigMap 中的数据在 Pod 中启动容器。

    第四种方法意味着必须编写代码才能读取 ConfigMap 和它的数据。然而, 由于你是直接使用 Kubernetes API,因此只要 ConfigMap 发生更改, 你的应用就能够通过订阅来获取更新(watch技术实现),并且在这样的情况发生的时候做出反应。 通过直接进入 Kubernetes API,这个技术也可以让你能够获取到不同的名字空间里的 ConfigMap。但是缺点也是同样明显,增加ApiServer和ETCD数据库的压力

    使用示例

    直接使用属性

    ConfigMap配置文件

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: erp-config
    data:
      # 属性键;每一个键都映射到一个简单的值
      host_name: "erp_server"
    

    pod配置文件

    apiVersion: v1
    kind: Pod
    metadata:
      name: configmap-erp-pod
    spec:
      containers:
        - name: erp-server
          image: xxxxxx/erp-server:1.0.1.20210912
          command: ["echo", "${host_name}"]
          env:
            # 定义环境变量
            - name: ENV_PROPERTIES           # 请注意这里和 ConfigMap 中的键名是不一样的
              valueFrom:
                configMapKeyRef:
                  name: erp-config           # 这个值来自 ConfigMap
                  key: host_name             # 需要取值的键
    
    

    将ConfigMap生成文件,供程序挂载使用

    ConfigMap配置文件

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: erp-config
    data:
      application_properties: "application.properties"
      # 类文件键
      application.properties: |
        server.port=8081
        server.context=/
    

    pod配置文件

    apiVersion: v1
    kind: Pod
    metadata:
      name: configmap-erp-pod
    spec:
      containers:
        - name: erp-server
          image: xxxxxx/erp-server:1.0.1.20210912
          env:
            # 定义环境变量
            - name: APPLICATION_PROPERTIES
              valueFrom:
                configMapKeyRef:
                  name: erp-config
                  key: application_properties
          volumeMounts:
            - name: config
              # 设置ConfigMap挂载到程序中的目录
              mountPath: "/erp-server/config"
              readOnly: true
      volumes:
        - name: config
          configMap:
            # 提供你想要挂载的 ConfigMap 的名字
            name: erp-config
            # 来自 ConfigMap 的一组键,将被创建为文件
            items:
              - key: "application.properties"
                path: "application.properties"
    
  • 相关阅读:
    Vue2.7正式发布,终于可以在Vue2项目中使用Vue3的特性了,真香~
    [探索深度学习] 之 神经网络 - 笔记01
    NOIP2011-2018提高组解题报告
    以vgg为backbone的简易图像检索系统
    【数据结构-图论】并查集
    Java并发编程可见性问题
    如何在Odoo中添加水印?
    QT连接Sqlite
    一文教会你如何在内网搭建一套属于自己小组的在线 API 文档?
    1515_人月神话阅读笔记_20年后的人月神话_下篇
  • 原文地址:https://blog.csdn.net/weixin_42321034/article/details/127118768