[云原生专题-39]:K8S - 核心概念 - 存储抽象- pod配置文件的挂载ConfigMap_文火冰糖的硅基工坊的博客-程序员宝宝_pod挂载存储

技术标签: 云原生  linux  configmap  K8S  cloud native  云原生专题  

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_程序员宝宝

本文网址: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
[[email protected] ~]# cat config-map1.yaml
apiVersion: v1
data:                     # 配置文件的名称data
  db.host: 10.5.10.116    # 配置文件的内容
  db.port: "3306"         # 配置文件的内容
kind: ConfigMap  
metadata:
  creationTimestamp: "2022-02-10T06:23:49Z"
  name: config-map1   # configmap对象的名称
  namespace: default
  resourceVersion: "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.properties

propertie1 = 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对象的内容

[[email protected] ~]#  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: default
  resourceVersion: "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.properties1

propertie1 = 1
propertie2 = 2
propertie3 = 3



touch app.properties2
vi app.properties2

propertie1 = 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/
[[email protected] ~]#  kubectl get configmap config-map3 -o yaml
apiVersion: v1
data:
  app.properties1: |
    propertie1 = 1
    propertie2 = 2
    propertie3 = 3
  app.properties2: |
    propertie1 = 4
    propertie2 = 5
    propertie3 = 6
kind: ConfigMap
metadata:
  creationTimestamp: "2022-02-10T09:14:46Z"
  name: config-map3
  namespace: default
  resourceVersion: "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

[[email protected] ~]# cat config-map1.yaml
apiVersion: v1
data:
  db.host: 10.5.10.116
  db.port: "3306"
kind: ConfigMap
metadata:
  creationTimestamp: "2022-02-10T06:23:49Z"
  name: config-map1
  namespace: default
  resourceVersion: "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.conf

appendonly = yes
$ kubectl create configmap cm-redis-conf --from-file=./cm-redis.conf


[[email protected] ~]# kubectl get configmap cm-redis-conf  -o yaml
apiVersion: v1
data:
  cm-redis.conf: |+
    appendonly yes

kind: 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-container
    image: kubernetes/redis:v1
    env:
    - name: MASTER
      value: "true"
    ports:
    - containerPort: 6379
    resources:
      limits:
        cpu: "0.1"
    volumeMounts:
    - mountPath: /redis-master-data
      name: data
    - mountPath: /redis-master
      name: config
  volumes:
  - name: data
    emptyDir: {}
  - name: config
    configMap:
      name: cm-redis-conf
      items:
      - key:  cm-redis.conf
        path: redis.conf

$ kubectl apply -f redis-pod-cm.yaml 


$ kubectl get pod


$ kubectl exec -it my-redis-pod -- /bin/sh


[[email protected] ~]# kubectl exec -it my-redis-pod -- /bin/sh
# cd /redis-master-data
# ls

# cd /redis-master
# ls
redis.conf

# cat redis.conf
appendonly yes

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_程序员宝宝

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122856681

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HiWangWenBing/article/details/122856681

智能推荐

玩转DWZ (一)---项目中怎么使用dwz_weixin_30405421的博客-程序员宝宝

最近一直在找一个完全开源的web客户端框架,看到了dwz,虽然不知道到底怎么样,但还是支持国产,先学习一下。这篇文章先说一下怎么在项目里使用dwz框架。首先先下载dwz:https://code.csdn.net/dwzteam/dwz_jui下载成功后,将压缩包解压,文件夹内如图:接下来在你的web项目的webroot下新建文件夹dwz,然后将上图东西拷贝进去...

Nginx+Tomcat实现高可用和Session会话共享_努力冲的博客-程序员宝宝_192.168.10.101

高可用负载均衡+nginx+会话共享web集群部署+redis哨兵 对于生产环境有了一定规模的tomcat集群业务来说,要实现session会话共享,比较稳妥的方式就是使用数据库持久化session.为什么要持久化session(共享session)呢?因为在客户端每个用户的Session对象存在Servlet容器中,如果Tomcat服务器重启或者宕机的话,那么该session就会丢失,而客户...

PHP 批量导出数据_M义薄云天的博客-程序员宝宝_php 批量导出

/*********************************************方法一******************************************************//** * 批量导出数据 * @param $arr 从数据库查询出来,即要导出的数据 * $name excel表格名 */function expExcel...

iOS使用[UIApplication sharedApplication].keyWindow添加子视图的问题_灵动的monkey的博客-程序员宝宝_[uiapplication sharedapplication].keywindow.subvie

      开发的时候我们经常遇到这样的场景,就是在当前视图界面上添加一个黑色透明的蒙版。一般我们就是新建一个蒙版view,然后加在当前显示的window上。如下:1-1代码     UIWindow *window = [UIApplication sharedApplication].keyWindow;//注:keyWindow当前显示界面的window UIView *subVie...

爬取三千条数据需要多久_傻瓜式爬虫教程,获取你想要的任何数据_weixin_39543478的博客-程序员宝宝

工作后大家就会发现一个问题,工作并不仅仅是做好自己手里这一块就万事大吉的。你需要了解一些基本的上游与下游工作内容,这样在协作沟通的时候双方频率相同,效果往往出奇的好。从个人核心竞争力这块来说,多学多琢磨,往往是有百利而无一害的对不?今天这篇就讲讲数据分析师的上游:爬虫工程师。爬虫是什么?就是我们自己到网页上摘取的数据,这个数据遵循我们制定的规则。比如我们要爬取天猫平板电视的情况:一级爬取:月销量、...

linux运维基础_乐小琛的博客-程序员宝宝_linux运维基础

学习linux运维,当然linux的基础知识是必不可少的,大家可以去“菜鸟教程”学习,与可以参考一下我的网盘,里边有基础的ppt文档(在文章末尾,有网盘的连...

随便推点

vue中 cube-ui 报错 * ./cubeic.ttf in ./node_modules/css-loader??ref--11-oneOf-3-1!./node_modules/postcs_蓝胖子的多啦A梦的博客-程序员宝宝

vue中 cube-ui 报错 * ./cubeic.ttf in ./node_modules/css-loader??ref--11-oneOf-3-1!./node_modules/postcs

C++11新特性(侯捷)——课程笔记(七)_Niu Yutao的博客-程序员宝宝

本部分内容包括decltype和lambda。一、decltypeBy using the new decltype keyword, you can let the compiler find out the type of an expression. This is the realization of the often requested typeof feature. However, the existing typeof implementations were inconsiste

周赛一 1002 uu的水仙花_BIT_ACM的博客-程序员宝宝

Description U老板决定给女票送花,他订了999……9朵水仙花。然而坑爹的花店把花送错了,混杂了其他花卉。所以uu决定将水仙花挑出来。已知uu智商已为负值,无法分辨是不是水仙花,你能帮帮他吗? PS:水仙花用水仙花数代替。 PPS:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 Input 输入数据有多组,每组占一行,包括一个

android:修改preference中view属性_Dev_Hanyu的博客-程序员宝宝

android开发包preference提供了我们一些方面的设置工具,PreferenceActivity,Preference,PreferenceScreen,CheckBoxPreference等,利用他们可以方便的建立应用程序的属性设置。如图:    有些时候,我们并不需要系统给我们的这么单调的ui,我们通常会修改一些属性,比如view的背景,字体的属性等,那么这个时候有两

JDBC驱动加载原理_潜心问典的博客-程序员宝宝_为什么驱动要手动加载 jsbc

前言最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解。所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者一个参考~~~概述一般情况下,在应用程序中进行数据库连接,调用JDBC接口,首先要将特定厂商的JDBC驱动实现加载到系统内存中,然后供系统使用。基本结构图如下:

Linux虚拟文件系统--文件路径名的解析(3)--普通文件名_橙色逆流的博客-程序员宝宝

对于一个文件路径的分量,如果其不为'.'和'..'则属于普通文件名,普通文件名的解析由do_lookup()函数来处理static int do_lookup(struct nameidata *nd, struct qstr *name, struct path *path){ struct vfsmount *mnt = nd->path.mnt; struct

推荐文章

热门文章

相关标签