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 应用的包管理工具,主要用来 ...
随机推荐
- 云原生周刊 | 人类、机器人与 Kubernetes
近日 Grafana 官网发表了一篇博客介绍了 2022 年比较有意思.脑洞大开的一些 Grafana 使用案例,比如监控特斯拉 Model 3 的充电状态.OTA 更新状况等等. 海事技术供应商 R ...
- 在 KubeSphere 中部署高可用 Redis 集群
作者:余生大大,大数据开发工程师,云原生爱好者,KubeSphere 社区用户. 前言 Redis 是在开发过程中经常用到的缓存中间件,在生产环境中为了考虑稳定性和高可用一般为集群模式的部署. 常规部 ...
- 网络应用模型的经典分类:C/S 与 P2P
网络应用无处不在,从我们日常使用的社交媒体到远程文件传输,网络应用模型是支撑这些通信和服务的基础架构.通常,这些网络应用根据其结构原理可以被大致划分为两大类:C/S(Client/Server)模型和 ...
- Linux(Redhat 7.6)安装PG(Postgresql 9.6.0)
Linux(Redhat 7.6)安装PG(Postgresql 9.6.0) 1. 摘要 需要在Linux上安装postgres数据库,指定安装目录,简单测试各种配置.安装包下载地址: //源码 h ...
- Lattice、Xilinx FPGA reg初始化赋值问题
一.起因 最近在开发Lattice的一款低功耗FPGA时,遇到了reg初始化复位问题,经过在网上搜寻相关资料整理如下: 二.FPGA中reg的初始化方式 在定义时初始化,例如: reg r_test ...
- PCI-5565-反射内存RFM2G的学习与使用
1.介绍 反射内存集成在反射内存卡上,我们使用的是PCI总线的反射内存卡PCI5565,还有PCIE和其它总线类型的反射内存卡,原理差不多.在两台计算机的PCI插槽插两块反射内存卡,然后通过光纤连接. ...
- 干货分享:Air780E开发板如何使用?
一.概述 CORE-AIR780E 开发板是合宙通信推出的基于 Air780E 模组所开发的,包含电源,SIM 卡,USB,天线,音频等必要功能的最小硬件系统.以方便用户在设计前期对 Air780 ...
- Windows 使用 Intel(R) Arc(TM) GPU 推理ONNX 模型
这不刚换了一个笔记本电脑,Thinkpad T14P,带有Intel ARC GPU,今天我们来尝试用这个GPU来推理ONNX模型. 环境安装 查阅了相关文档,最好使用py310环境,其他版本可能存在 ...
- spring IOC 实现原理模拟实现
原文系装载: http://blog.sina.com.cn/s/blog_6a7f00ed01011dyv.html 最近对spring IOC AOP 机制实现原理了解了下,在此做下整理,希望能给 ...
- js 实现可缓存方法
1.概述 有些场景下,如果一些函数需要大量的运算,但是他们的传入的参数是一样的,这个时候,我们可以将这些运算缓存下来,之后的运算就可以不用重复计算了. 2.实现方法 <script> // ...