kubernetes系列(十一) - 存储之configMap
1. configMap简介
应用部署的一个最佳实践就是将应用所需的配置信息与程序分离,这样可以使应用更好地进行复用,通过不同的配置也可以实现更灵活的功能。
所以从v1.2开始,kubernetes提供了一种统一的应用配置管理方案-configMap
1.1 configMap的典型用法
- 生成为容器内的
环境变量 - 设置容器启动命令的启动参数(
需设置为环境变量) - 以
volume形式挂载为容器内部的文件或目录
1.2 configMap的表现形式
configMap以一个或者多个key:value的形式保存,其中:
- 既可以是
loglevel=info的形式 - 也可以表示一个完整的配置文件内容
- 如:server.xml=<?xml...>...
2. configMap的创建方式
2.1 kubectl create命令行创建
2.1.1 从文件创建
- 创建一个测试的配置文件test.json
echo "{ \"id\": \"emm\", \"name\": \"tom\"}" >> test.json
- 从文件创建configmap
key=文件名,value=文件内容
kubectl create cm map2 --from-file=test.json
- 查看创建的configmap
kubectl describe cm map2
2.1.2 从目录创建
- 准备文件夹和文件夹内容
mkdir cmtest && \
echo "{ \"id\": \"emm\", \"name\": \"tom\"}" >> cmtest/test.json &&\
echo "{ \"id\": \"emm\", \"name\": \"tom\"}" >> cmtest/test2.json
- 从文件创建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来替代环境变量
共有两种使用方式:
- 自己指定环境变量名字,使用configmap的值
- 将整个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 热更新的局限
- 热更新只有对volume挂载文件的使用方式有效
- 对该ConfigMap挂载的Env不会同步更新
4.2 修改configmap
kubectl edit configmap log-config
假如有资源挂载了这个configmap,等待大约十秒后就能热更新
kubernetes系列(十一) - 存储之configMap的更多相关文章
- kubernetes系列10—存储卷详解
本文收录在容器技术学习系列文章总目录 1.认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kubel ...
- kubernetes系列(十三) - 存储之Volume
1. Volume简介 1.1 k8s的volume和docker的volume区别 1.2 kubernetes支持的volume类型 2. 重点的volume类型 2.1 emptyDir 2.1 ...
- kubernetes系列(十四) - 存储之PersistentVolume
1. PersistentVolume(PV)简介 1.1 为什么需要Persistent Volume(PV) 1.2 PersistentVolume(PV)和Volume的区别 1.3 PV和P ...
- kubernetes系列之ConfigMap使用方式
作用理解 核心用途就是容器和配置的分离解耦. 如启用一个mysql容器,mysql容器重要的文件有两部分,一部分为存储数据文件,一部分为配置文件my.cnf,存储数据可以用持久存储实现和容器的分离解耦 ...
- Kubernetes K8S之存储ConfigMap详解
K8S之存储ConfigMap概述与说明,并详解常用ConfigMap示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS ...
- Kubernetes 系列(七):持久化存储StorageClass
前面的课程中我们学习了 PV 和 PVC 的使用方法,但是前面的 PV 都是静态的,什么意思?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的 ...
- kubernetes系列11—PV和PVC详解
本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个A ...
- 从0到1使用Kubernetes系列(六):数据持久化实战
本文是从 0 到 1 使用 Kubernetes 系列第六篇,上一篇<从 0 到 1 使用 Kubernetes 系列(五):Kubernetes Scheduling>介绍了 Kuber ...
- Kubernetes系列(四) StatefulSet
作者: LemonNan 原文地址: https://juejin.im/post/6870071267438329869 Kubernetes系列(四) StatefulSet Kubernetes ...
- Kubernetes系列之Helm介绍篇
本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复[K8s实战]获取 介绍 Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来 ...
随机推荐
- Java 当中使用 “google.zxing ”开源项目 和 “github 的 qrcode-plugin” 开源项目 生成二维码
Java 当中使用 "google.zxing "开源项目 和 "github 的 qrcode-plugin" 开源项目 生成二维码 @ 目录 Java 当中 ...
- 3D数学基础:图形和游戏开发(第二版)--读书笔记(1)
简介: 本书是关于3D数学.三维空间的几何和代数的入门教材.它旨在告诉你如何使用数学描述三维中的物体及其位置.方向和轨迹.这不是一本关于计算机图形学.模拟,甚至计算几何的书,但是,如果读者打算研究这些 ...
- Discuz7.2 faq.php页面注入漏洞分析
由于discuz在全局会对GET数组进行addslashes转义,导致该漏洞的产生. 参数问题存在于faq.php的grouppermission函数中. 具体细节访问:网易博客siberia h ...
- 解决浏览器SSL缓存,自动将http跳转至https导致无法访问的问题
PHP交流群 656679284 为PHP广大爱好者提供技术交流,有问必答,相互学习相互进步! 这里汇总一下几大常见浏览器 HSTS 的关闭方法. Safari 浏览器 完全关闭 Safari 删 ...
- css画三角形,对角 √ 勾形
.selected{ border-color: #5FB878; } .selected:after { content: ""; position: absolute; top ...
- 多校A层冲刺NOIP2024模拟赛18
多校A层冲刺NOIP2024模拟赛18 T1 选彩笔(rgb) 签到题,但是没签上... 没想到三维前缀和,直接上了个bitset. 就是直接二分答案,然后枚举这三维每维的区间的起点,前缀和查数量是否 ...
- Python启动一个本地服务器文件下载
日常工作中需要给同事分享下载链接,快速启动一个WebServer即可满足日常需求~ #安装软件 yum install screen -y #启动服务 python -m SimpleHTTPServ ...
- 使用Ollama和Open WebUI管理本地开源大模型
Open WebUI和Ollama介绍 Open WebUI 是一个功能丰富且用户友好的自托管 Web 用户界面(WebUI),它被设计用于与大型语言模型(LLMs)进行交互,特别是那些由 Ollam ...
- 黑盒视角下的RESTful API安全测试
目录 前言 关于OWASP API TOP 10 REST API接口测试思路 接口权限测试 接口校验测试 接口滥用测试 总结 前言 RESTful API(或称RESTful Web API)在线开 ...
- 深入JUnit源码之Runner
初次用文字的方式记录读源码的过程,不知道怎么写,感觉有点贴代码的嫌疑.不过中间还是加入了一些自己的理解和心得,希望以后能够慢慢的改进,感兴趣的童鞋凑合着看吧,感觉JUnit这个框架还是值得看的,里面有 ...