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 应用的包管理工具,主要用来 ...
 
随机推荐
- 一文了解 Conda(包教包会,不会留言)
			
Conda 使用指南 Conda 是一个开源包管理和环境管理系统,能够以跨平台的方式进行软件包的安装.管理和依赖管理,特别适用于 Python 和 R 语言的环境管理.本文整理了常见 Conda 命令 ...
 - java程序设置开机自启
			
Linux系统jar包开机自启 第一步:创建service文件 sudo nano etc/systemd/system/myapp.service 第二步:将下面代码复制到刚才创建的文件里面,保存 ...
 - sqluldr2linux64.bin命令行下的Oracle数据导出工具
			
sqluldr2.bin是Oracle数据库下,数据导出的工具 (1)query导出 ./sqluldr2.bin user=用户/密码@主机IP/数据库名 query="select ...
 - css动画(仿微信聊天页面)
			
微信聊天框以其简洁直观的界面和流畅的交互体验而广受欢迎.本文将展示如何利用HTML和CSS技术,在自己的网页上实现类似微信的聊天框效果.我们将一步步指导您完成,让网站或应用也能拥有专业且用户友好的聊天 ...
 - CF1487-B Cat Cycle
			
一个规律题目要多做多积累 , 脑子不太灵活 CF1487 Cat Cycle 题目大意: 两只猫A,B, A猫从n -> n-1 -> n-2 ... -> 1 -> 2 .. ...
 - CUDA编程学习 (1)——CUDA C介绍
			
1. 内存分配和数据移动 API 函数 CUDA编程模型是一个异构模型,需要CPU和GPU协同工作.在CUDA中,host 和 devic e 是两个重要的概念,我们用host指代CPU及其内存,而用 ...
 - Python 潮流周刊#76:用 50 行 Python 代码实现 BASIC(摘要)
			
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
 - 在Keil中使用ST-LINK烧录STM32程序指南
			
前言 之前玩STM32都是用J-LINK烧录程序,不仅便捷,而且烧录的速度比用串口快好多. 最近我接了几个32单片机的毕设单子,便买了几块C8T6的最小系统板用来开发.最初我还是用J-LINK烧录C8 ...
 - 使用gulp 压缩js
			
js 编写后文件太大,可以使用gulp 来进行压缩. 具体步骤如下: 1.创建一个工作目录 在该目录下安装 gulp npm install gulp 安装gulp-uglify 模块 npm ins ...
 - element-ui季度选择组件
			
1.基于elementui开发的季度选择组件 2.调用 <el-quarter-picker v-model="start_time" :size="size&qu ...