作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_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相关推荐

  1. [云原生专题-16]:容器 - 在Windows主机上搭建Docker环境

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  2. 【2022分布式存储峰会】腾讯云存储为您带来:云原生时代下的数据湖存储服务

    大会时间:今日15:00-15:30 大会主题:云原生时代下的数据湖存储服务 2022年4月14日,由百易传媒 (DOIT) 与厦门大学信息学院联合主办的"2022分布式存储论坛峰会&quo ...

  3. [云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  4. 从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念

    作者| 阿里巴巴资深技术专家.CNCF 9个 TCO 之一 李响 一.什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台.Kubernetes 这个 ...

  5. 【云原生】学习K8s,读完这篇就够了

    目录 前言 K8s集群架构及核心概念 架构图 K8s组件 api service controller manager scheduler etcd kubelet kube-proxy 其他重要插件 ...

  6. 从2.0到3.0,安全可信正在成为云原生的下一核心

    <中智观察>第1542篇推送 记者:白 编辑:小瑞瑞 头图来源:图虫创意 "没有云原生,就没有真正的数字化和智能化."在华为云TechWave 全球技术峰会(应用现代化 ...

  7. KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎

    [来源:阿里巴巴云原生公众号] 美国西部时间 2020 年 11 月 18 日,在云原生技术"最高盛宴"的 KubeCon 北美峰会 2020 上,CNCF 应用交付领域小组(CN ...

  8. KubeVela 高可扩展的云原生应用平台与核心引擎

    https://www.oschina.net/news/121015/kubevela-open-source 目录 什么是 KubeVela ? KubeVela 解决了什么问题? 1. 应用开发 ...

  9. 火山引擎张鑫解读云原生2021:K8s 开先河、技能全栈、业务“无感”

    作者 | 张鑫 责编 | 杨阳 出品 | CSDN(ID:CSDNnews) 2015年2月的纽约周边,在皑皑白雪覆盖下的Woodlock避暑山庄中,我参加了Google内部的首次"Clou ...

最新文章

  1. Maven build标签
  2. java 通配符 泛型_java中泛型之类型通配符(?)
  3. 重磅!GitHub 开源负载均衡组件 GLB Director
  4. 前端学习(3191):react中案例
  5. 王腾疑似喜提Redmi Note10系列新机:最高搭载1亿像素主摄
  6. 关于“时间序列回归”,这些你必须知道的事!
  7. 【BZOJ1901】Zju2112 Dynamic Rankings 主席树+树状数组
  8. 《ARM64体系结构编程与实践》开始预订了
  9. tomcat日志配置(停止日志或修改日志路径)
  10. linux如何编辑配置文件,如何编辑保存LINUX的配置文件
  11. Raid5磁盘阵列数据恢复成功案例/服务器数据恢复方案
  12. 从今起,我蹲马步,苦练基本功
  13. 数据小助手:DataAssistant开篇
  14. strlen、strcpy、strcmp、strcat函数的实现
  15. 祝贺!2022 Rust中文社区线上Hackathon评审结果出炉!
  16. 教你解决线上频出MySQL死锁问题
  17. VsCode使用Git连接Gitee和GitHub
  18. mysql ceil_MySQL笔记之数学函数详解_MySQL - ceil
  19. pdf文件怎么修改文字
  20. matplotlib显示opencv图像有色差

热门文章

  1. bashrc java_bashrc添加环境变量 linux怎么配置path环境变量
  2. 25. Deep Weighted MaxSAT for Aspect-based Opinion Extraction 阅读笔记
  3. 魔鬼字典 JavaScript 笔记 看不懂可以哭~~~
  4. C++简明教程,看这一篇就够了!
  5. 为什么传统电商平台都开始做社区电商了?
  6. 谷歌一雪前耻,全新PaLM 2反超GPT-4,办公全家桶炸裂升级,Bard史诗进化
  7. 记忆集、卡表与写屏障
  8. [OO] Unit3 Summary JML系列
  9. mysql 查询 不用星号,MySQL Cookbook系列博客
  10. C#中int与Int32关系揭秘