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

16 篇文章 0 订阅
13 篇文章 0 订阅

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"
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北漂的菜小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值