K8S 之 ConfigMap
摘要
-
本文介绍 K8S 的 ConfigMap ,本文以 CentOS 8 为例。
ConfigMap(别名cm) 介绍
-
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。
-
使用时, Pod 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
-
ConfigMap 将你的环境配置信息和容器镜像解耦,便于应用配置的修改。
-
多个 Pod 可以关联同一个 ConfigMap
ConfigMap 创建及使用
环境变量引用
-
yaml创建
1 | # configmap.yaml |
-
命令行创建
1 | # key:value 方式创建 |
-
将 ConfigMap 中的全部数据作为环境变量使用
1 | # pod.yaml |
-
将 ConfigMap 中的部分数据作为环境变量使用
1 | # pod2.yaml |
-
查看pod日志
1 | $ kubectl logs pods/env-configmap |
存储卷引用
-
yaml创建
1 | # configmap-configfile.yaml |
-
命令行创建
1 | # 注意这里是 --from-file,作为文件配置,而非环境变量 |
-
Pod 挂载 ConfigMap 为文件
1 | # configmap-pod.yaml 文件内容如下: |
-
容器内的
/etc/config/
目录下会有两个文件:
1 | /etc/config/app.properties |
-
如果只想挂载 ConfigMap 中的某些文件,可以通过
items
字段指定:
1 | apiVersion: v1 |
后记
-
--from-env-file=app.env
与--from-file=app.env
的区别
项目 | --from-env-file=app.env |
--from-file=app.env |
---|---|---|
用途 | 解析为环境变量形式键值对 | 按文件整体读入为内容 |
适合场景 | 想把每个变量都单独用掉 | 挂载为配置文件使用 |
data 结构 | 每一行变一个键值对 | 文件名为 key,内容为值 |
读取方式 | 用 envFrom 注入环境变量 |
用 volumeMount 挂载整个文件 |
-
ConfigMap 也支持
二进制
数据,但需要用base64
编码
1 | apiVersion: v1 |
binaryData 和 data 的区别
字段 | 内容类型 | 编码方式 | 适合存储 |
---|---|---|---|
data |
文本(UTF-8) | 明文 | 配置文件、参数、脚本等 |
binaryData |
任意二进制数据 | base64 编码 | 图片、证书、非UTF-8文件等 |
❗注意事项
项目 | 说明 |
---|---|
base64 编码格式 | binaryData 中的值必须是标准 base64,不支持换行 |
解码后大小限制 | ConfigMap 单个对象最大 1MB(无论 data 还是 binaryData) |
二者可共存 | data 与 binaryData 可以同时出现在同一个 ConfigMap 中(字段名不能重复) |
-
修改 ConfigMap 后 :
k edit configmap <configmap-name>
- 如果 Pod 是作为 环境变量 关联的,Pod 不会更新,只能重新创建
- 如果 Pod 是作为 volume 挂载的,Pod 会自动更新(大约几秒后)
-
删除 ConfigMap 后:
k delete configmap <configmap-name>
Pod 状态 | ConfigMap 删除后影响 |
---|---|
正在运行 | 不受影响 |
重启 / 扩容 | 失败:找不到 ConfigMap,无法创建容器 |