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 应用的包管理工具,主要用来 ...
随机推荐
- OpenPSG:离AGI再进一步,首个开放环境关系预测框架 | ECCV'24
全景场景图生成(PSG)的目标是对对象进行分割并识别它们之间的关系,从而实现对图像的结构化理解.以往的方法主要集中于预测预定义的对象和关系类别,因此限制了它们在开放世界场景中的应用.随着大型多模态模型 ...
- JavaScript初始化对象数组
一.{} 我们都知道JavaScript的数据结构是松散的,比如说你定义一个变量 var temp; 那么你可以随手这样定义temp.attr1 = "参数1",因为对于Java ...
- 用ffmpeg压缩视频、提高声音、加水印 命令记录
ffmpeg -i in.mp4 -i LOGOW.png -filter_complex overlay=W-w:56 -c:v libx264 -x264-params "crf=35& ...
- SpringBoot项目集成MinIO
一.MinIO的下载安装以及基本使用 1.下载地址:https://dl.min.io/server/minio/release/windows-amd64/minio.exe 2.下载好后需要手动创 ...
- for Qbert sometimes we stay in lives == 0 condtion for a few frames —— baselines中环境包装器EpisodicLifeEnv的分析
相关: baselines中环境包装器EpisodicLifeEnv的分析 一直不是很理解在reinforcement leanrning算法在atari游戏的observation的交互过程中对li ...
- 基于pikachu靶场的水平越权详解
1. pikachu靶场搭建 如果你在之前已经使用过phpstudy了,参考pikachu 靶场环境搭建 如果在靶场搭建中遇到一些问题,参考皮卡丘靶场搭建遇到的问题大全 2. 水平越权简介 水平越权是 ...
- 血泪史: k8s Initial timeout of 40s passed.
背景: k8s不管是 kubeadm init 和join都会报错 kubelet-start] Writing kubelet configuration to file "/var/li ...
- 2023NOIP A层联测25 T4 滈葕
2023NOIP A层联测25 T4 滈葕 配血实验与2-SAT. 思路 \(z=1\) 表示配血实验发生凝集反应,设 \(a_i,b_i\) 分别表示第 \(i\) 个人有无凝集原 A,B.(无凝集 ...
- 【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...
- 不依赖 Spring,你会如何自实现 RabbitMQ 消息的消费(一)
开心一刻 上午一好哥们微信我哥们:哥们在干嘛,晚上出来吃饭我:就我俩吗哥们:对啊我:那多没意思,我叫俩女的出来哥们:好啊,哈哈哈晚上吃完饭到家后,我给哥们发消息我:今天吃的真开心,下次继续哥们:开心尼 ...