[云原生专题-39]:K8S - 核心概念 - 存储抽象- pod配置文件的挂载ConfigMap
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122856681
目录
前言:
第1章 ConfigMap概述
1.1 什么是ConfigMap?
1.2 配置信息真正的保存地方
1.3 配置信息保存格式
1.4 创建ConfigMap对象的4种方式
第2章 创建ConfigMap对象, 关联pod内部的配置文件的路径
2.1 通过命令行参数--from-literal创建
2.2 根据键值对文件创建(非configmap文件)
2.3 根据多个键值对文件创建(一个configmap支持多个配置文件)
2.4 根据键值对文件所在文件目录(目录中可能有多个文件)
2.5 根据configmap.yaml文件生成
第3章 创建pod,关联ConfigMap对象
3.1 通过环境变量使用
3.2 通过在pod的命令行下运行的方式(启动命令中)
3.3 作为volume的方式挂载到pod内。
前言:
PV和PVC解决了pod间共享目录的挂载,有时候,我们只期望挂载pod内部的配置文件,以便于在pod外部对pod的配置进行修改,PV和PVC就搞不定了,新的机制来满足上述需求,这就是ConfigMap。
第1章 ConfigMap概述
1.1 什么是ConfigMap?
为了让Docker镜像和Docker镜像运行时的配置文件解耦,以便实现镜像的可移植性和可复用性,进入了ConfigMap。
ConfigMap是用来存储集群中的Pod所需要的配置文件信息的kubernetes资源对象。Map是键值对的映射,是一种字典。
ConfigMap所管辖的配置信息是非加密的非安全性要求的数据。
通过configmpa,多个pods对象可以在集群内部共享相同的配置文件。
1.2 配置信息真正的保存地方
ConfigMap只是用来在集群内部,在Pod外部,描述配置信息的对资源对象,本身并不存放配置信息。所有的配置内容实际上都存储在K8S系统中的etcd,并通过ConfigMap这个对象实现pod之间,pod与pod外部共享配置信息。
1.3 配置信息保存格式
存放在etcd中的配置文件信息,是按照键值对的方式存储的,如IP:value; port:value等。
1.4 创建ConfigMap对象的4种方式
(1)通过指定命令行参数创建,即--from-literal
(2)通过指定特定文件创建,即将一个配置文件创建为一个ConfigMap--from-file=<文件>
(3)通过指定特定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,--from-file=<目录>
(4)事先写好标准的configmap的yaml文件,然后kubectl create -f 创建
第2章 创建ConfigMap对象, 关联pod内部的配置文件的路径
2.1 通过命令行参数--from-literal
创建
$ kubectl create configmap config-map1 --from-literal=db.host=10.5.10.116 --from-literal=db.port='3306'$ kubectl get configmap# 以yaml 格式输出config map的内容
$ kubectl get configmap config-map1 -o yaml >> config-map1.yaml
$ cat config-map1.yaml
[root@k8s-master1 ~]# cat config-map1.yaml
apiVersion: v1
data: # 配置文件的名称datadb.host: 10.5.10.116 # 配置文件的内容db.port: "3306" # 配置文件的内容
kind: ConfigMap
metadata:creationTimestamp: "2022-02-10T06:23:49Z"name: config-map1 # configmap对象的名称namespace: defaultresourceVersion: "72089"uid: 5aaef0ba-2ac3-4a19-a97a-ebbe53c16d84
因此,configmap的内容以字典的形式存在的:
configmap对象的名称:name: config-map1
配置文件的名称:无
配置文件的内容:
db.host: 10.5.10.116
db.port: "3306"
2.2 根据键值对文件创建(非configmap文件)
(1)生成属性文件
touch app.properties
vi app.propertiespropertie1 = 1
propertie2 = 2
propertie3 = 3
(2)根据属性文件生成configmap对象
kubectl create configmap config-map2 --from-file=./app.properties --from-file=./app.params
- --from-file=./app.properties : 指定配置文件名
(3)展现configmap对象的内容
[root@k8s-master1 ~]# kubectl get configmap config-map2 -o yaml
apiVersion: v1
data:app.properties: | # 配置文件的名称propertie1 = 1 # 配置文件的内容propertie2 = 2 # 配置文件的内容propertie3 = 3 # 配置文件的内容
kind: ConfigMap
metadata:creationTimestamp: "2022-02-10T06:35:55Z"name: config-map2 # configmap对象的名称namespace: defaultresourceVersion: "73035"uid: 8d773265-b04f-4017-ace4-c557c1c517fd
configmap对象的名称:name: config-map2
配置文件的名称:app.properties,一个configmap可以包含多个配置文件
配置文件的内容:
propertie1 = 1 # 配置文件的内容
propertie2 = 2 # 配置文件的内容
propertie3 = 3 # 配置文件的内容
2.3 根据多个键值对文件创建(一个configmap支持多个配置文件)
(1)生成多个配置文件
touch app.properties1
vi app.properties1propertie1 = 1
propertie2 = 2
propertie3 = 3touch app.properties2
vi app.properties2propertie1 = 4
propertie2 = 5
propertie3 = 6
(2)根据多个配置文件生成configmap对象
kubectl create configmap config-map3 --from-file=./app.properties1 --from-file=./app.properties2
--from-file=./app.properties : 指定配置文件名
(3)展现configmap对象的内容
2.4 根据键值对文件所在文件目录(目录中可能有多个文件)
方法基本同2.2, 不同的是:--from-file参数指定的是键值对文件所在的目录,而是是文件本身。
$ mkdir config$ kubectl create configmap config-map2 --from-file=./config/
[root@k8s-master1 ~]# kubectl get configmap config-map3 -o yaml
apiVersion: v1
data:app.properties1: |propertie1 = 1propertie2 = 2propertie3 = 3app.properties2: |propertie1 = 4propertie2 = 5propertie3 = 6
kind: ConfigMap
metadata:creationTimestamp: "2022-02-10T09:14:46Z"name: config-map3namespace: defaultresourceVersion: "85423"uid: f0b24171-b45a-460f-8fd8-d11a343d2699
app.properties1: 配置文件1
app.properties2: 配置文件2
通过items来指定configmap中的多个不同的文件名。
2.5 根据configmap.yaml文件生成
这是最标准的方法。
kubectl create configmap config-map1 --from-file=./config-map1.yaml
# 以yaml 格式输出config map的内容
$ kubectl get configmap config-map1 -o yaml >> config-map1.yaml
$ cat config-map1.yaml[root@k8s-master1 ~]# cat config-map1.yaml
apiVersion: v1
data:db.host: 10.5.10.116db.port: "3306"
kind: ConfigMap
metadata:creationTimestamp: "2022-02-10T06:23:49Z"name: config-map1namespace: defaultresourceVersion: "72089"uid: 5aaef0ba-2ac3-4a19-a97a-ebbe53c16d84
configmap对象的名称:name: config-map1
配置文件的名称:无
配置文件的内容:
db.host: 10.5.10.116
db.port: "3306"
第3章 创建pod,关联ConfigMap对象
创建ConfigMap对象后,把配置文件的内容存放在K8S的etcd档案库中,并且通过ConfigMap对象就可以访问键值对的配置文件的值,而不是需要通过文件路径名访问。
前一章创建了configmap对象以及相关的内容,有三种使用configmap中键值对配置的方式。
- 第一种是通过环境变量的方式,直接传递给pod
- 使用configmap中指定的key
- 使用configmap中所有的key
- 第二种是通过在pod的命令行下运行的方式(启动命令中)
- 第三种是作为volume的方式挂载到pod内。
3.1 通过环境变量使用
3.2 通过在pod的命令行下运行的方式(启动命令中)
3.3 作为volume的方式挂载到pod内。
(1)configmap的内容解读
configmap对象的名称:name: config-map1
配置文件的名称:redis-conf, 一个configmap可以包含多个配置文件名。
配置文件的内容:
appendonly=yes
(2)pod的mount映射解读
- 第1个mount
本地的路径:mountpath=data
远程的volume:data
data即不是NFS, 也不是configmap,而是空目录
- 第2个mount
本地的路径:mountpath=redis-master
远程的volume:config
config对象的类型是K8S的configmap,而不是NFS, 也不是本地目录
config对应的configmap的对象名为redis-conf
items: 指定redis-master目录应该包含configmap中哪些配置文件。
key:redis-conf =》指定configmap中一个配置文件名。
path:redis-conf =》 指定configmap中的配置文件名,mount后的文件名。
至此,第2个mount为的映射结果为:redis-master/redis-conf
如果有多个配置文件需要映射到redis-master/目录中,则至少有两个步骤要改进
首先,configmap中有多个配置文件,至少有两个配置文件。
然后,在items再增加新的key和path。
3.4 配置命令详解
$ vi cm-redis.confappendonly = yes
$ kubectl create configmap cm-redis-conf --from-file=./cm-redis.conf[root@k8s-master1 ~]# kubectl get configmap cm-redis-conf -o yaml
apiVersion: v1
data:cm-redis.conf: |+appendonly yeskind: ConfigMap
metadata:creationTimestamp: "2022-02-10T16:44:40Z"name: cm-redis-conf
$ touch redis-pod-cm.yaml apiVersion: v1
kind: Pod
metadata:name: my-redis-pod
spec:containers:- name: my-redis-containerimage: kubernetes/redis:v1env:- name: MASTERvalue: "true"ports:- containerPort: 6379resources:limits:cpu: "0.1"volumeMounts:- mountPath: /redis-master-dataname: data- mountPath: /redis-mastername: configvolumes:- name: dataemptyDir: {}- name: configconfigMap:name: cm-redis-confitems:- key: cm-redis.confpath: redis.conf
$ kubectl apply -f redis-pod-cm.yaml $ kubectl get pod$ kubectl exec -it my-redis-pod -- /bin/sh[root@k8s-master1 ~]# kubectl exec -it my-redis-pod -- /bin/sh
# cd /redis-master-data
# ls# cd /redis-master
# ls
redis.conf# cat redis.conf
appendonly yes
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122856681
[云原生专题-39]:K8S - 核心概念 - 存储抽象- pod配置文件的挂载ConfigMap相关推荐
- [云原生专题-16]:容器 - 在Windows主机上搭建Docker环境
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- 【2022分布式存储峰会】腾讯云存储为您带来:云原生时代下的数据湖存储服务
大会时间:今日15:00-15:30 大会主题:云原生时代下的数据湖存储服务 2022年4月14日,由百易传媒 (DOIT) 与厦门大学信息学院联合主办的"2022分布式存储论坛峰会&quo ...
- [云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- 从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念
作者| 阿里巴巴资深技术专家.CNCF 9个 TCO 之一 李响 一.什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台.Kubernetes 这个 ...
- 【云原生】学习K8s,读完这篇就够了
目录 前言 K8s集群架构及核心概念 架构图 K8s组件 api service controller manager scheduler etcd kubelet kube-proxy 其他重要插件 ...
- 从2.0到3.0,安全可信正在成为云原生的下一核心
<中智观察>第1542篇推送 记者:白 编辑:小瑞瑞 头图来源:图虫创意 "没有云原生,就没有真正的数字化和智能化."在华为云TechWave 全球技术峰会(应用现代化 ...
- KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎
[来源:阿里巴巴云原生公众号] 美国西部时间 2020 年 11 月 18 日,在云原生技术"最高盛宴"的 KubeCon 北美峰会 2020 上,CNCF 应用交付领域小组(CN ...
- KubeVela 高可扩展的云原生应用平台与核心引擎
https://www.oschina.net/news/121015/kubevela-open-source 目录 什么是 KubeVela ? KubeVela 解决了什么问题? 1. 应用开发 ...
- 火山引擎张鑫解读云原生2021:K8s 开先河、技能全栈、业务“无感”
作者 | 张鑫 责编 | 杨阳 出品 | CSDN(ID:CSDNnews) 2015年2月的纽约周边,在皑皑白雪覆盖下的Woodlock避暑山庄中,我参加了Google内部的首次"Clou ...
最新文章
- Maven build标签
- java 通配符 泛型_java中泛型之类型通配符(?)
- 重磅!GitHub 开源负载均衡组件 GLB Director
- 前端学习(3191):react中案例
- 王腾疑似喜提Redmi Note10系列新机:最高搭载1亿像素主摄
- 关于“时间序列回归”,这些你必须知道的事!
- 【BZOJ1901】Zju2112 Dynamic Rankings 主席树+树状数组
- 《ARM64体系结构编程与实践》开始预订了
- tomcat日志配置(停止日志或修改日志路径)
- linux如何编辑配置文件,如何编辑保存LINUX的配置文件
- Raid5磁盘阵列数据恢复成功案例/服务器数据恢复方案
- 从今起,我蹲马步,苦练基本功
- 数据小助手:DataAssistant开篇
- strlen、strcpy、strcmp、strcat函数的实现
- 祝贺!2022 Rust中文社区线上Hackathon评审结果出炉!
- 教你解决线上频出MySQL死锁问题
- VsCode使用Git连接Gitee和GitHub
- mysql ceil_MySQL笔记之数学函数详解_MySQL - ceil
- pdf文件怎么修改文字
- matplotlib显示opencv图像有色差
热门文章
- bashrc java_bashrc添加环境变量 linux怎么配置path环境变量
- 25. Deep Weighted MaxSAT for Aspect-based Opinion Extraction 阅读笔记
- 魔鬼字典 JavaScript 笔记 看不懂可以哭~~~
- C++简明教程,看这一篇就够了!
- 为什么传统电商平台都开始做社区电商了?
- 谷歌一雪前耻,全新PaLM 2反超GPT-4,办公全家桶炸裂升级,Bard史诗进化
- 记忆集、卡表与写屏障
- [OO] Unit3 Summary JML系列
- mysql 查询 不用星号,MySQL Cookbook系列博客
- C#中int与Int32关系揭秘