1. configMap简介

应用部署的一个最佳实践就是将应用所需的配置信息与程序分离,这样可以使应用更好地进行复用,通过不同的配置也可以实现更灵活的功能。

所以从v1.2开始,kubernetes提供了一种统一的应用配置管理方案-configMap

1.1 configMap的典型用法

  1. 生成为容器内的环境变量
  2. 设置容器启动命令的启动参数(需设置为环境变量)
  3. volume形式挂载为容器内部的文件或目录

1.2 configMap的表现形式

configMap以一个或者多个key:value的形式保存,其中:

  • 既可以是loglevel=info的形式
  • 也可以表示一个完整的配置文件内容
    • 如:server.xml=<?xml...>...

2. configMap的创建方式

2.1 kubectl create命令行创建

2.1.1 从文件创建

  1. 创建一个测试的配置文件test.json
echo "{ \"id\": \"emm\", \"name\": \"tom\"}" >> test.json
  1. 从文件创建configmap

key=文件名,value=文件内容

kubectl create cm map2 --from-file=test.json
  1. 查看创建的configmap
kubectl describe cm map2

2.1.2 从目录创建

  1. 准备文件夹和文件夹内容
mkdir cmtest && \
echo "{ \"id\": \"emm\", \"name\": \"tom\"}" >> cmtest/test.json &&\
echo "{ \"id\": \"emm\", \"name\": \"tom\"}" >> cmtest/test2.json
  1. 从文件创建configmap

key=文件夹下的每个文件名,value=文件内容

kubectl create cm map2 --from-file=cmtest/

2.1.3 使用字面值创建

使用文字值创建,利用--from-literal参数传递配置信息

  • 该参数可以使用多次
kubectl create cm testname --from-literal=key1=value1 --from-literal=key2=value2

2.2 使用yaml资源清单创建

下图分别演示了

  • key对应一个value
  • key对应一整个配置文件
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-name-1
namespace: default
data:
key1: "hahah"
key2: |
{
"property1": "value1",
"property2": true
}

3. configMap的使用

3.1 使用configMap来替代环境变量

共有两种使用方式:

  1. 自己指定环境变量名字,使用configmap的值
  2. 将整个configmap里面的k/v映射成环境变量
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: hub.coreqi.cn/library/myapp:v1
command: [ "/bin/sh", "-c", "env" ]
# 自己指定环境变量名字,使用configmap的值
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.how
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.type # 将整个configmap里面的`k/v`映射成环境变量
   envFrom:
   - configMapRef:
   name: env-config
restartPolicy: Never

3.2 使用configMap设置容器启动命令的启动参数(需设置为环境变量)

导入方式和环境变量一样的,这里主要体现的是一种思想,如下

  • 能直接echo输出环境变量,说明也能直接作为启动命令的参数使用
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: hub.coreqi.cn/library/myapp:v1
# 这里输出使用环境变量,说明也能当启动参数
command: [ "/bin/sh","-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.how
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.type
restartPolicy: Never

3.3 通过数据卷插件volume使用ConfigMap

3.3.1 把整个configmap挂载到路径下

  • 此时这个路径下的

    • 文件名=key
    • 文件内容=value
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: hub.coreqi.cn/library/myapp:v1
command: [ "/bin/sh", "-c", "cat /etc/config/special.how" ]
# 把config-volume挂载到下面的路径下
volumeMounts:
- name: config-volume
mountPath: /etc/config
# 导入“special-config”的configmap,并命名为config-volume
volumes:
- name: config-volume
configMap:
name: special-config
restartPolicy: Never

3.3.2 把configmap某个key的值,挂载到具体的文件

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: hub.coreqi.cn/library/myapp:v1
command: [ "/bin/sh", "-c", "cat /etc/config/special.how" ]
# 把config-volume下的key1的值。完整地赋值给appsettings.Production.json
volumeMounts:
- name: config-volume
mountPath: /app/appsettings.Production.json
subPath: key1
# 导入“special-config”的configmap,并命名为config-volume
volumes:
- name: config-volume
configMap:
name: special-config
restartPolicy: Never

4. configMap的热更新

4.1 热更新的局限

  1. 热更新只有对volume挂载文件的使用方式有效
  2. 对该ConfigMap挂载的Env不会同步更新

4.2 修改configmap

kubectl edit configmap log-config

假如有资源挂载了这个configmap,等待大约十秒后就能热更新

kubernetes系列(十一) - 存储之configMap的更多相关文章

  1. kubernetes系列10—存储卷详解

    本文收录在容器技术学习系列文章总目录 1.认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kubel ...

  2. kubernetes系列(十三) - 存储之Volume

    1. Volume简介 1.1 k8s的volume和docker的volume区别 1.2 kubernetes支持的volume类型 2. 重点的volume类型 2.1 emptyDir 2.1 ...

  3. kubernetes系列(十四) - 存储之PersistentVolume

    1. PersistentVolume(PV)简介 1.1 为什么需要Persistent Volume(PV) 1.2 PersistentVolume(PV)和Volume的区别 1.3 PV和P ...

  4. kubernetes系列之ConfigMap使用方式

    作用理解 核心用途就是容器和配置的分离解耦. 如启用一个mysql容器,mysql容器重要的文件有两部分,一部分为存储数据文件,一部分为配置文件my.cnf,存储数据可以用持久存储实现和容器的分离解耦 ...

  5. Kubernetes K8S之存储ConfigMap详解

    K8S之存储ConfigMap概述与说明,并详解常用ConfigMap示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS ...

  6. Kubernetes 系列(七):持久化存储StorageClass

    前面的课程中我们学习了 PV 和 PVC 的使用方法,但是前面的 PV 都是静态的,什么意思?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的 ...

  7. kubernetes系列11—PV和PVC详解

    本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个A ...

  8. 从0到1使用Kubernetes系列(六):数据持久化实战

    本文是从 0 到 1 使用 Kubernetes 系列第六篇,上一篇<从 0 到 1 使用 Kubernetes 系列(五):Kubernetes Scheduling>介绍了 Kuber ...

  9. Kubernetes系列(四) StatefulSet

    作者: LemonNan 原文地址: https://juejin.im/post/6870071267438329869 Kubernetes系列(四) StatefulSet Kubernetes ...

  10. Kubernetes系列之Helm介绍篇

    本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复[K8s实战]获取 介绍 Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来 ...

随机推荐

  1. Java 当中使用 “google.zxing ”开源项目 和 “github 的 qrcode-plugin” 开源项目 生成二维码

    Java 当中使用 "google.zxing "开源项目 和 "github 的 qrcode-plugin" 开源项目 生成二维码 @ 目录 Java 当中 ...

  2. 3D数学基础:图形和游戏开发(第二版)--读书笔记(1)

    简介: 本书是关于3D数学.三维空间的几何和代数的入门教材.它旨在告诉你如何使用数学描述三维中的物体及其位置.方向和轨迹.这不是一本关于计算机图形学.模拟,甚至计算几何的书,但是,如果读者打算研究这些 ...

  3. Discuz7.2 faq.php页面注入漏洞分析

    由于discuz在全局会对GET数组进行addslashes转义,导致该漏洞的产生. 参数问题存在于faq.php的grouppermission函数中.   具体细节访问:网易博客siberia h ...

  4. 解决浏览器SSL缓存,自动将http跳转至https导致无法访问的问题

    PHP交流群  656679284  为PHP广大爱好者提供技术交流,有问必答,相互学习相互进步! 这里汇总一下几大常见浏览器 HSTS 的关闭方法. Safari 浏览器 完全关闭 Safari 删 ...

  5. css画三角形,对角 √ 勾形

    .selected{ border-color: #5FB878; } .selected:after { content: ""; position: absolute; top ...

  6. 多校A层冲刺NOIP2024模拟赛18

    多校A层冲刺NOIP2024模拟赛18 T1 选彩笔(rgb) 签到题,但是没签上... 没想到三维前缀和,直接上了个bitset. 就是直接二分答案,然后枚举这三维每维的区间的起点,前缀和查数量是否 ...

  7. Python启动一个本地服务器文件下载

    日常工作中需要给同事分享下载链接,快速启动一个WebServer即可满足日常需求~ #安装软件 yum install screen -y #启动服务 python -m SimpleHTTPServ ...

  8. 使用Ollama和Open WebUI管理本地开源大模型

    Open WebUI和Ollama介绍 Open WebUI 是一个功能丰富且用户友好的自托管 Web 用户界面(WebUI),它被设计用于与大型语言模型(LLMs)进行交互,特别是那些由 Ollam ...

  9. 黑盒视角下的RESTful API安全测试

    目录 前言 关于OWASP API TOP 10 REST API接口测试思路 接口权限测试 接口校验测试 接口滥用测试 总结 前言 RESTful API(或称RESTful Web API)在线开 ...

  10. 深入JUnit源码之Runner

    初次用文字的方式记录读源码的过程,不知道怎么写,感觉有点贴代码的嫌疑.不过中间还是加入了一些自己的理解和心得,希望以后能够慢慢的改进,感兴趣的童鞋凑合着看吧,感觉JUnit这个框架还是值得看的,里面有 ...