这里写目录标题

  • 什么是 ConfigMap
  • 创建 ConfigMap
    • 基于目录创建 ConfigMap
        • 创建 conf 目录,里面放置两个文件
        • 基于目录下的所有文件创建 ConfigMap
        • 查看当前创建的 ConfigMap
    • 基于文件创建 ConfigMap
        • 创建测试文件 game-cfg
        • 基于单个文件创建 ConfigMap
        • 查看当前创建的 ConfigMap
        • 使用带有 key 的命令创建 ConfigMap
        • 查看当前创建的 ConfigMap
        • 多次使用使用 --from-file 传入参数,用以从多个文件创建 ConfigMap
        • 查看当前创建的 ConfigMap
    • 基于 ENV 文件创建 ConfigMap
        • 创建测试用的 key-value 文件
        • 创建 ConfigMap
        • 查看当前创建的 ConfigMap
    • 基于字符值创建 ConfigMap
        • 利用字符值创建 ConfigMap
        • 删除已创建的 ConfigMap
    • ConfigMap 实践
        • 使用 valueFrom 定义容器的环境变量
            • 先以字符值的形式创建 ConfigMap
            • 查看当前创建的 ConfigMap
            • 使用 valueFrom 从 ConfigMap 中定义变量
            • 创建 pod
            • 查看 pod 日志
        • 使用 envFrom 定义容器的环境变量
            • 使用 envFrom 从 ConfigMap 由定义变量
            • 创建 Pod
            • 查看 Pod 日志
        • 以文件的形式挂载 Configmap
            • 创建测试文件
            • 使用带有 key 的命令创建 ConfigMap
            • 查看 ConfigMap
            • 编写文件,将名为 spec-config 的 configMap 挂载到容器的/etc/config 目录下
            • 创建 Pod
            • 查看创建结果
            • 登录容器,查看挂载情况
            • 删除 Pod
        • 自定义文件名挂载 ConfigMap
            • 编写 Pod 文件
            • 登录容器,查看挂载情况
        • 指定挂载的文件权限
            • 编写 Pod 文件,指定文件权限
            • 登录容器,查看挂载情况
        • 利用 SubPath 解决挂载覆盖的问题
            • 创建测试用的配置文件
            • 使用带有 key 的命令创建 configMap
            • 查看 configMap
            • 创建 Pod 文件,挂载文件

什么是 ConfigMap

在传统架构中,配置文件往往被保存在宿主机上,程序启动是可以指定某个配置文件,但是使用容器部署时,容器所在的节点并不固定,所以不能使用这种方式,此处在构建镜像时,如果把配置文件也放在容器里面,那么配置文件一旦有更改的话,也是一件非常麻烦的事情。所以k8s 抽象了一个 configMap的概念,将配置与 pod 和组件分开,这有助于保持工作负载的可移植性,使配置更易于更改和管理。比如在生产环境中,可以将 Nginx、Redis 等应用的配置文件存储在 ConfigMap 上,然后将其挂载即可使用

相对于 secret,configMap 更倾向于存储和共享非敏感、未加密的配置信息,假如是集群中使用敏感信息,最好使用 secret

  • ConfigMap 用来在键值对数据库(etcd)中保存非加密数据。一般用来保存配置文件
  • ConfigMap 可以用作环境变量、命令行参数或者存储卷
  • ConfigMap 将环境配置信息与 容器镜像 解耦,便于配置的修改
  • ConfigMap 在设计上不是用来保存大量数据的
  • ConfigMap 中保存的数据不可超过 1 MiB

创建 ConfigMap

ConfigMap 可以用目录(目录下有多个文件)、单个文件或字符值的方式创建,使用 kubectl 创建一个 ConfigMap 的命令格式如下:

kubectl create configmap < map-name >< data-source >
命令字含义
map-nameconfigMap 的名称
data-source数据源,可以使数据的目录、文件或字符值
key文件名或秘钥
value文件内容或字符值

基于目录创建 ConfigMap

创建 conf 目录,里面放置两个文件
[root@k8s-master ~]# mkdir /conf
[root@k8s-master ~]# echo "This is file01" > /conf/file01.conf
[root@k8s-master ~]# echo "This is file02" > /conf/file02.conf

请添加图片描述

基于目录下的所有文件创建 ConfigMap
[root@k8s-master ~]# ku create configmap game-config-1 --from-file=/conf/

请添加图片描述
注意:

ConfigMap 是按namespace 隔离的,不同的namespace 之间的configMap 的名称可以相同,但是不能跨namespace 进行访问,创建ConfigMap 时,可以使用-n 选项指定资源所在的namespace

查看当前创建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-1 -oyaml

注意:

由于该 ConfigMap 是直接基于目录创建的,没有指定 ConfigMap 中的 key 名,因此默认是按照目录下的文件名作为 configMap 数据中的 key 名

基于文件创建 ConfigMap

创建测试文件 game-cfg
[root@k8s-master ~]# echo "This is game-cfg file" > /conf/game.cfg

请添加图片描述

基于单个文件创建 ConfigMap
[root@k8s-master ~]# ku create cm game-config-2 --from-file=/conf/game.cfg 

请添加图片描述

查看当前创建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-2 -o yaml

注意:

由于没有指定 ConfigMap 的 key,因此使用文件名作为 key

使用带有 key 的命令创建 ConfigMap
[root@k8s-master ~]# ku create cm game-config-3 --from-file=self-key=/conf/game.cfg

请添加图片描述

查看当前创建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-3 -o yaml
多次使用使用 --from-file 传入参数,用以从多个文件创建 ConfigMap
[root@k8s-master ~]# ku create cm game-config-4 --from-file=self01-key=/conf/file01.conf --from-file=self02-key=/conf/file02.conf 

请添加图片描述

查看当前创建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-4 -o yaml

基于 ENV 文件创建 ConfigMap

假如有一个文件 game-env-file.cfg,里面存储的 key=value 形式的数据,此类文件可以当做某个应用的环境变量配置,此时可以使用–from-env-file 从 ENV 文件创建 configMap

创建测试用的 key-value 文件
[root@k8s-master ~]# vim /conf/game.env-file.cfg
name01=zhangsan
name02=lisi
name03=wangwu
创建 ConfigMap
[root@k8s-master ~]# ku create cm game-config-env-file --from-env-file=/conf/game.env-file.cfg

请添加图片描述

查看当前创建的 ConfigMap
[root@k8s-master ~]# ku get cm game-config-env-file -o yaml

基于字符值创建 ConfigMap

有时候配置的并不是很多,只有几个 key=value 的参数,可以直接使用 kubectl create configmap--from-lietal 参数来定义命令行的字符值

备注:

lietal:文字的;逐字的

利用字符值创建 ConfigMap
[root@k8s-master ~]# ku create configmap spec-config-1 --from-literal=spec.user01=zhangsan --from-literal=spec.user02=lisi

请添加图片描述

删除已创建的 ConfigMap
[root@k8s-master ~]# ku delete configmap sepc-config-1

ConfigMap 实践

在 kubernetes 中,用户可以使用环境变量引用 configMap 中的数据,当容器启动时,kubernetes会将 ConfigMap 数据作为环境变量注入到容器的进程中。为了使用 ConfigMap 中的数据,用户需要在 pod的规范(spec)中定义一个env 字段,并指定 ConfigMap 中的“键值对

使用 valueFrom 定义容器的环境变量

大部分情况下,ConfigMap 定义的都是配置文件,而不是环境变量,因此需要将 ConfigMap 的文件挂载到 Pod 中,然后 Pod 中的容器就可以引用,此时可以通过 Pod 的 volume 字段进行挂载

先以字符值的形式创建 ConfigMap
[root@k8s-master ~]# ku create configmap spec-config-2 --from-literal=name01=zhangsan --from-literal=name02=lisi

请添加图片描述

查看当前创建的 ConfigMap
[root@k8s-master ~]# ku get cm spec-config-2 -o yaml
使用 valueFrom 从 ConfigMap 中定义变量
[root@k8s-master ~]# vim env-valuefrom.yamlapiVersion: v1
kind: Pod
metadata:name: env-valuefrom
spec:containers:- name: env-valuefromimage: busybox:v1command: [ "/bin/sh","-c","env" ]env:- name: my-name01valueFrom:configMapKeyRef:key: name01name: spec-config-2- name: my-name02valueFrom:configMapKeyRef:key: name02name: spec-config-2restartPolicy: Never
创建 pod
[root@k8s-master ~]# ku create -f env-valuefrom.yaml

请添加图片描述

查看 pod 日志
[root@k8s-master ~]# ku logs env-valuefrom
使用 envFrom 定义容器的环境变量

k8s 从 1.6 的版本开始,引入了一个新的字段 envFrom,实现了在 Pod 中将 configMap 中所有定义的key=value 自动生成为环境变量
使用 envFrom 时,环境变量的名字是 ConfigMap 中数据的 key 名

备注:valueFrom和envfrom的区别

  • 通过 valueFrom 来配置环境变量,Pod 的环境变量名与 configMap 中定义的变量名不必相同valueFrom 是指定变量进行映射
  • 通过 envFrom 会把 ConfigMap 的所有键值对都映射到 Pod 的环境变量中去envFrom 配置的环境变量和 Pod 的环境变量名是相同的
使用 envFrom 从 ConfigMap 由定义变量
[root@k8s-master ~]# vim env-envfrom.yamlapiVersion: v1
kind: Pod
metadata:name: env-envfrom
spec:containers:- name: env-envfromimage: busybox:v1command: [ "/bin/sh","-c","env" ]envFrom:- configMapRef:name: spec-config-2restartPolicy: Never
[root@k8s-master ~]# ku describe cm spec-config
创建 Pod
[root@k8s-master ~]# ku create -f env-envfrom.yaml

请添加图片描述

查看 Pod 日志
[root@k8s-master ~]# ku logs env-envfrom
以文件的形式挂载 Configmap

大部分情况下,ConfigMap 定义的都是配置文件,而不是环境变量,因此需要将 ConfigMap 的文件挂载到 Pod 中,然后 Pod 中的容器就可以引用,此时可以通过 Pod 的 volume 字段进行挂载

创建测试文件
[root@k8s-master ~]# mkdir /etc/conf
[root@k8s-master ~]# echo "This is game-cfg file" > /etc/conf/game.cfg
[root@k8s-master ~]# echo "This is info-cfg file" > /etc/conf/info.cfg

请添加图片描述

使用带有 key 的命令创建 ConfigMap
[root@k8s-master ~]# ku create cm spec-config02 --from-file=app01.conf=/etc/conf/game.cfg  --from-file=app02.conf=/etc/conf/info.cfg

请添加图片描述

查看 ConfigMap
[root@k8s-master ~]# ku get cm spec-config02 -o yaml
编写文件,将名为 spec-config 的 configMap 挂载到容器的/etc/config 目录下
[root@k8s-master ~]# vim dapi-test1-pod.yaml apiVersion: v1
kind: Pod
metadata:name: dapi-test1-pod
spec:containers:- name: dapi-test1-podimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/confvolumes:- name: config-volumeconfigMap:name: spec-config02items:
创建 Pod
[root@k8s-master ~]# ku create -f dapi-test1-pod.yaml

请添加图片描述
注意:

容器的/etc/config 目录会被覆盖掉

查看创建结果
[root@k8s-master ~]# ku get pods
登录容器,查看挂载情况
[root@k8s-master ~]# ku exec -it dapi-test1-pod -- bash
root@dapi-test1-pod:/# ls /etc/conf/
root@dapi-test1-pod:/# ls -l /etc/conf/
删除 Pod
[root@k8s-master ~]# ku delete -f dapi-test1-pod.yaml
自定义文件名挂载 ConfigMap

很多情况下,需要更改挂载的文件名,可以使用 path 字段指定 ConfigMap 挂载的文件名,比如将文件 app2.conf 挂载到/etc/conf 下,并重命名为 app2.cfg

编写 Pod 文件
[root@k8s-master ~]# vim dapi-test2-pod.yamlkind: Pod
metadata:name: dapi-test2-pod
spec:containers:- name: dapi-test2-podimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/confvolumes:- name: config-volumeconfigMap:name: spec-config02items:- key: app01.confpath: app01.cfg- key: app02.confpath: app02.cfg
登录容器,查看挂载情况
[root@k8s-master ~]# ku exec -it dapi-test2-pod -- bash
root@dapi-test2-pod:/# ls -l /etc/conf/
指定挂载的文件权限
编写 Pod 文件,指定文件权限
[root@k8s-master ~]# vim dapi-test3-pod.yamlapiVersion: v1
kind: Pod
metadata:
apiVersion: v1
kind: Pod
metadata:name: dapi-test3-pod
spec:containers:- name: dapi-test3-podimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/confvolumes:- name: config-volumeconfigMap:name: spec-config02items:- key: app01.confpath: app01.cfgmode: 0644- key: app02.confpath: app02.cfgdefaultMode: 0666
登录容器,查看挂载情况
[root@k8s-master ~]# ku exec -it dapi-test3-pod -- bash
root@dapi-test3-pod:/# ls -l /etc/conf/
root@dapi-test3-pod:/# ls -l /etc/conf/..data/
利用 SubPath 解决挂载覆盖的问题

当挂载 ConfigMap 或 Secret 到容器内部时,会覆盖容器中的目录,也就是是说,在容器中的对应的录中,就只剩下我们挂载进去的文件,此目录中其他的文件都会丢失。从而导致容器无法正常运行。为解决挂载覆盖的问题,需要使用 SubPath 的方式进行挂载

创建测试用的配置文件
[root@k8s-master ~]# mkdir /etc/conf
[root@k8s-master ~]# vim /etc/conf/nginx.conf
user  nginx;
#This is my ngin-config
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {worker_connections  1024;
}
http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  ' -  [] "" ''  "" ''"" ""';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}
使用带有 key 的命令创建 configMap
[root@k8s-master ~]# ku create cm nginx-config --from-file=nginx.conf=/etc/conf/nginx.conf 

请添加图片描述

查看 configMap
[root@k8s-master ~]# ku get cm nginx-config -o yaml
创建 Pod 文件,挂载文件
[root@k8s-master ~]# vim dapi-test4-pod.yamlapiVersion: v1
kind: Pod
metadata:name: dapi-test4-pod
spec:containers:- name: dapi-test4-podimage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: nginx-configmountPath: /etc/nginx/nginx.confsubPath: nginx.confvolumes:- name: nginx-configconfigMap:name: nginx-configitems:- key: nginx.confpath: nginx.conf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916277.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916277.shtml
英文地址,请注明出处:http://en.pswp.cn/news/916277.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32+MicroPython:用Python玩转物联网开发

什么是ESP32&#xff1f; ESP32作为当下最热门的物联网开发板&#xff0c;常被比作"嵌入式世界的瑞士军刀"。但很多初学者会混淆芯片、模组和开发板的概念&#xff0c;其实它们的关系很简单&#xff1a; 芯片(Soc)&#xff1a;核心处理器&#xff0c;如ESP32-D0WD模…

opencv学习(图像金字塔)

1.什么是图像金字塔图像金字塔是一种多尺度图像表示方法&#xff0c;通过对原始图像进行下采样&#xff08;缩小&#xff09;和上采样&#xff08;放大&#xff09;&#xff0c;生成一系列不同分辨率的图像集合&#xff0c;形似 “金字塔”&#xff08;底部是高分辨率原始图像&…

从 C# 到 Python:项目实战第五天的飞跃

在前面三天的学习中&#xff0c;我们已经掌握了 Python 的基础语法、数据结构以及一些核心库的使用。今天&#xff0c;我们将通过三个实战项目&#xff0c;深入对比 C# 和 Python 在命令行工具开发、Web 应用开发以及数据处理方面的差异&#xff0c;感受 Python 在实际项目中的…

rabbitmq 03

一、mq的作用和使用场景 MQ的基本作用 MQ&#xff08;Message Queue&#xff0c;消息队列&#xff09;是一种应用程序对应用程序的通信方法&#xff0c;主要作用包括&#xff1a; 异步处理&#xff1a;解耦生产者和消费者&#xff0c;允许生产者发送消息后立即返回&#xff0…

Ubuntu 24.04 显示中文+使用中文键盘

ubuntu 24.04 中文显示中文键盘Ubuntu中文输入重启iBus服务Ubuntu中文输入 安装的Ubuntu24.04&#xff0c;一般默认是英文的&#xff0c;要使用中文的话&#xff0c;可以通过命令行设置&#xff0c;也可以使用‘设置’&#xff0c;在图形化界面中操作。 下面是在‘设置’的图形…

Docker实战:Tomcat容器从部署到自定义网页的完整操作

Docker实战&#xff1a;Tomcat容器从部署到自定义网页的完整操作 继Nginx容器部署后&#xff0c;我们再来实操Tomcat容器的使用——从拉取镜像、启动容器&#xff0c;到端口映射、网页挂载&#xff0c;全程通过实际命令演示&#xff0c;带你掌握Tomcat在Docker中的核心用法。 一…

使用cherry studio离线搭建私人知识库流程记录

本篇文章记录近期尝试在个人笔记本上、全离线状态下搭建知识库的流程。用到的工具包括&#xff1a;Cherry Studio、ollama。主要过程是&#xff1a;首先下载ollama用于管理大模型&#xff1b;然后&#xff0c;从魔塔社区下载需要的deepseek、千问大模型和bge-m3嵌入模型&#x…

【工具类】Linux 环境利用 uv 安装多版本 python

文章目录前置工作环境说明如果kali无法访问网络pypi 换源安装 uvuv 写入环境变量临时写入永久写入无法打开 github 解决方案&#xff08;注意此方法可能也会失效&#xff09;安装多版本 python查看已安装的pythonuv python install到 uv 的 github 主页&#xff0c;找安装文件下…

求职招聘小程序源码招聘小程序开发定制

身份&#xff1a;求职者、企业求职者&#xff1a;完善简历&#xff0c;简历投递企业&#xff1a;企业入驻&#xff0c;查看简历企业会员&#xff1a;半年 、年度 权益&#xff1a;每日发布条数、刷新条数&#xff0c;简历下载数量聊天&#xff1a;求职者可以和企业聊天招聘会…

Git 使用全指南:从配置到免密登录

Git 使用全指南&#xff1a;从配置到免密登录一、Git 基础配置二、Git 代码提交流程2.1 克隆远程仓库2.2 创建并切换分支2.3 暂存文件2.4 提交到本地仓库2.5 拉取远程最新代码2.6 推送本地分支到远程三、VSCode 服务器免密登录配置3.1 生成 Windows SSH 密钥3.2 复制公钥到服务…

组合期权:领式策略

文章目录0.简介1.多头领式策略&#xff08;Long Collar&#xff09;​1.1 策略构成1.2 适用场景​1.3 损益分析1.4 案例示范2.空头领式策略&#xff08;Short Collar&#xff09;​2.1 策略构成2.2 适用场景2.3 损益分析2.4 案例示范参考文献0.简介 领式策略&#xff08;Colla…

ECSPI控制器

目录 SPI协议简介 极性与相位 SPI框图 单字节收发 发送数据流程 接收数据流程 ECSPI控制器 关键特性 时钟源 主机模式 等待状态 片选控制 单突发传输 多突发传输 相位控制 ECSPI Memory Map ECSPI寄存器 ECSPIx_RXDATA ECSPIx_TXDATA ​编辑 ECSPIx_CONREG …

HTTP 与 SpringBoot 参数提交与接收协议方式

HTTP 协议支持多种参数提交方式&#xff0c;主要取决于请求方法(Method)和内容类型(Content-Type)。以下是主要的参数提交协议&#xff1a;1. URL 查询参数 (Query Parameters)请求方法: GET (也可用于其他方法)格式: ?key1value1&key2value2示例: GET /users?id123&…

Lua(数组)

Lua 数组基础概念Lua 中的数组实际上是用整数索引的 table&#xff0c;是一种特殊形式的表。数组索引通常从 1 开始&#xff08;Lua 惯例&#xff09;&#xff0c;但也可以从其他值开始。创建数组通过表构造器初始化数组&#xff1a;-- 索引从 1 开始的数组 local arr {10, …

【Docker项目实战】在Docker环境下部署go-file文件分享工具

【Docker项目实战】在Docker环境下部署go-file文件分享工具一、go-file介绍1.1 go-file简介1.2 go-file特点1.3 go-file使用场景二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下…

C++基础学习——文件操作详解

一、文件流类概述 C 标准库提供了三个主要的文件流类&#xff1a; ifstream (输入文件流)&#xff1a;用于从文件读取数据ofstream (输出文件流)&#xff1a;用于向文件写入数据fstream (文件流)&#xff1a;既可读又可写 这些类都继承自 iostream 类&#xff0c;因此可以使用 …

Android补全计划 DrawerLayout使用

DrawerLayout其实用了很久了&#xff0c;甚至封装了一些代码方便不同项目使用&#xff0c;但重构代码的时候突然意识到这块内容很不成体系&#xff0c;因此又参考了些文档&#xff0c;组建了自己的一个文档。 toolbardrawerlayout能写的效果很多&#xff0c;在此我也只是截取了…

人工智能之数学基础:概率论之韦恩图的应用

韦恩图的应用由于事件的计算有时候太过于抽象了&#xff0c;此时我们可以使用韦恩图的方式来进行验证&#xff0c;我们下面来举一个例子&#xff0c;A∪B&#xff09;-CA∪(B-C)是否成立&#xff1f;我们可以通过韦恩图来完成这个任务&#xff1a;我们通过这种方式来一点一点的…

小白成长之路-部署Zabbix7(二)

文章目录一、zabbix-自动发现二、自动注册三、zabbix-网易云邮箱-发送消息二、zabbix-钉钉告警总结一、zabbix-自动发现 1.在准备两台虚拟机&#xff0c;我的是192.168.144.12,192.168.144.13 server换成zabbix服务器的ip地址 vim /etc/zabbix/zabbix_agentd.conf 2.创建自动…

CMU15445-2024fall-project4踩坑经历

project4目录Task1Task2ReconstructSeqScanTask3InsertCommitTxnMgrDbgGenerateNewUndoLog And GenerateUpdateUndoLogUpdate And Delete垃圾回收Task4Index Insert并发控制Index ScanDelete、Update并发控制主键更新Bonus 1Bonus 2处理写倾斜感谢CMU的教授们给我们分享了如此精…