当前位置: 首页 > news >正文

Kubernetes系列-配置存储 ConfigMap Secret

1 ConfigMap介绍

1.1 概述

在部署应用程序时,我们都会涉及到应用的配置,在容器中,如Docker容器中,如果将配置文件打入容器镜像,这种行为等同于写死配置,每次修改完配置,镜像就得重新构建。当然,我们也可以通过挂载包含该文件的卷进行配置管理和修改。而在k8s中,我们要讲一种更好的方式,即ConfigMap,这种资源对象的出现,更是极大的方便了应用程序的配置管理。
ConfigMap是一个或多个key/value的形式保存在k8s中,内部可以管理变量也可以管理完整的配置文件内容。

1.2 用法

  • 生成容器内的环境变量,在pod中可以通过spec.env或者spec.envFrom进行引用。
  • 设置容器启动命令的启动参数,前提是设置为环境变量。
  • 以卷volume的方式挂载到容器内部的文件或目录,通过spec.volumes引用。

注:在使用命令的时候注意单词: configmap等价于cm,cm算是简写,类似于deployment可以使用命令时写成deploy,service可以写成svc,namespace可以写成ns,pod可以写成po。

1.3 应用场景

configmap配置信息和镜像解耦,实现方式是把配置信息放到configmap对象中,然后在pod中作为volume挂载到pod中,从而实现导入配置的目的

适用场景:

  • 通过configmap给pod定义全局环境变量
  • 通过configmap给pod传递命令行参数,如mysql -u -p中的账户名密码都可以通过它传递
  • 通过configmap给pod中的容器服务提供配置文件,配置文件以挂载到容器的形式适用

注意事项:

  • configmap需要在pod使用它之前创建
  • pod和configmap必须在同一个namespace中才能使用
  • 主要用于非安全加密的配置场景
  • configmap通常用于小于1MB的配置,常用于配置文件

1.4 创建

1.4.1 yaml文件方式创建

示例:

apiVersion: v1
kind: ConfigMap
metadata:name: cm-test01
data:appconf01: value01appconf02: value02

命令:

[root@k8s-master k8s]# kubectl create -f cm-test01.yaml 
configmap/cm-test01 created

1.4.2 命令行方式创建

读取文件方式(也可以是目录)通过--from-file参数从文件中读取。可以指定key的名称,若不指定,则默认使用文件名为key。
案例:如当前目录有一个配置文件为test.properties

[root@k8s-master k8s]# cat test.properties 
key01:value01
key02:value02
conf01: value03

命令:

[root@k8s-master k8s]# kubectl create cm cm-test-file --from-file=test.properties
configmap/cm-test-file created

//指定参数方式,通过--from-literal指定keyxx=valuexx创建confimap中的data内配置属性。

[root@k8s-master k8s]#  kubectl create configmap cm-test-literal --from-literal=key01=value01 --from-literal=key02=value02
configmap/cm-test-literal created

1.5 查询

1.5.1 查询configmap列表

[root@k8s-master k8s]# kubectl get cm
NAME               DATA   AGE
cm-test-file       1      3m51s
cm-test-literal    2      3m30s
cm-test01          2      9m2s
kube-root-ca.crt   1      4d16h

1.5.2 查看configmap详细信息

[root@k8s-master k8s]# kubectl describe cm cm-test01
Name:         cm-test01
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
appconf01:
----
value01
appconf02:
----
value02
Events:  <none>
[root@k8s-master k8s]# kubectl describe cm cm-test-file
Name:         cm-test-file
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
test.properties:
----
key01:value01
key02:value02
conf01: value03Events:  <none>
[root@k8s-master k8s]# kubectl describe cm cm-test-literal
Name:         cm-test-literal
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
key01:
----
value01
key02:
----
value02
Events:  <none>

1.5.3 查看yaml输出

[root@k8s-master k8s]# kubectl get cm cm-test01 -o yaml
apiVersion: v1
data:appconf01: value01appconf02: value02
kind: ConfigMap
metadata:creationTimestamp: "2022-08-07T00:18:47Z"name: cm-test01namespace: defaultresourceVersion: "44876"uid: 7492a928-b163-4b86-a3dd-54a7fbe59a10
[root@k8s-master k8s]# kubectl get configmap cm-test-file -o yaml
apiVersion: v1
data:test.properties: |+key01:value01key02:value02conf01: value03kind: ConfigMap
metadata:creationTimestamp: "2022-08-07T00:23:58Z"name: cm-test-filenamespace: defaultresourceVersion: "45341"uid: 818a39b4-cbaf-4643-9541-1119b4d61982
[root@k8s-master k8s]# kubectl get cm cm-test-literal -o yaml
apiVersion: v1
data:key01: value01key02: value02
kind: ConfigMap
metadata:creationTimestamp: "2022-08-07T00:24:19Z"name: cm-test-literalnamespace: defaultresourceVersion: "45372"uid: 051849e0-bf0a-4926-a549-2405dc4963cc

1.6 更新

1.6.1 edit

[root@k8s-master k8s]# kubectl edit cm cm-test01
configmap/cm-test01 edited

通过kubectl describe cm cm-test01查看更新是否生效。

[root@k8s-master k8s]# kubectl describe cm cm-test01
Name:         cm-test01
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
appconf02:
----
value02
appconf01:
----
value001
Events:  <none>

1.6.2 apply

直接更新yaml文件里的值,通过 kubectl apply -f configmap-test01.yaml重新发布一遍进行更新。

1.7 删除

1.7.1 通过yaml文件方式删除

$ kubectl delete -f configmap-test01.yaml

1.7.2 直接删除资源

kubectl delet cm cm-test01

2 ConfigMap和Pod的使用

容器应用对ConfigMap的使用主要是两种:
1)通过环境变量获取ConfigMap的内容:spec.envspec.envFrom
2)通过卷volume挂载的方式将ConfigMap的内容挂载到容器内部的文件或目录:spec.volumes。

2.1 环境变量方式

2.1.1 sepc.env方式

2.1.1.1 创建pod

[root@k8s-master k8s]# vim pod-test01.yamlapiVersion: v1
kind: Pod
metadata:name: cm-pod-test001
spec:containers:- name: cm-testimage: tomcat:8command: [ "/bin/sh", "-c", "env | grep APP"]env:- name: APPCONF01 		# 定义环境变量的名称valueFrom:	  		# key “appconf01”的值获取configMapKeyRef:name: cm-test01	# 环境变量的值来自于configmap cm-test01key: appconf01	# configmap中的配置key为appconf01- name: APPCONF02		# 定义环境变量的名称valueFrom:			# key “appconf02”的值获取configMapKeyRef:name: cm-test01	# 环境变量的值来自于configmap cm-test01key: appconf02	# configmap中的配置key为appconf02restartPolicy: Never		# 重启策略:从不。

执行创建pod:

[root@k8s-master k8s]# kubectl create -f pod-test01.yaml
pod/cm-test001 created

2.1.1.2 查看pod

[root@k8s-master k8s]# kubectl get pods
[root@k8s /cm/test]#  kubectl get pods
NAME             READY     STATUS      RESTARTS   AGE
cm-pod-test001   0/1       Completed   0          1h

2.1.1.3 查看pod日志

[root@k8s-master k8s]# kubectl logs cm-pod-test001
APPCONF01=value01
APPCONF02=value02

说明容器内部的环境变量使用ConfigMap中进行读取的

2.1.2 spec.envFrom方式

2.1.2.1 创建pod

[root@k8s-master k8s]# vim pod-test02.yamlpiVersion: v1
kind: Pod
metadata:name: cm-pod-test002
spec:containers:- name: cm-test2image: tomcat:8command: [ "/bin/sh", "-c", "env"]envFrom:- configMapRef:name: cm-test01  # 根据ConfigMap cm-test01资源自动生成环境变量restartPolicy: Never

执行创建pod:

[root@k8s-master k8s]# kubectl create -f pod-test02.yaml

2.1.2.2 查看pod

[root@k8s-master k8s]#  kubectl get po
NAME             READY     STATUS      RESTARTS   AGE
cm-pod-test001   0/1       Completed   0          2h
cm-pod-test002   0/1       Completed   0          1h
注意:
环境变量的名称受限制:[a-zA-Z][a-zA-Z0-9_]*,不能以数字或非法字符开头。

2.2 卷挂载方式

2.2.1 指定items

[root@k8s-master k8s]#  vim pod-test03.yaml
apiVersion: v1
kind: Pod
metadata:name: cm-pod-test003
spec:containers:- name: cm-test3image: tomcat:8volumeMounts:- name: vm-01-1mountPath: /confvolumes:- name: vm-01-1configMap:name: cm-test-fileitems:- key: key-testpropertiespath: test.propertiesrestartPolicy: Never

2.2.2 不指定items

[root@k8s-master k8s]#  vim pod-test04.yaml
apiVersion: v1
kind: Pod
metadata:name: cm-pod-test004
spec:containers:- name: cm-test4image: tomcat:8volumeMounts:- name: vm-02-2mountPath: /confvolumes:- name: vm-02-2configMap:name: cm-test-filerestartPolicy: Never

进入容器中查看

[root@k8s-master k8s]# kubectl exec -it cm-pod-test004 -c cm-test4 -- bash

进入容器后,ls /conf查看是否有test.properties文件。

[root@k8s-master k8s]#  kubectl exec -it cm-pod-test004 -c cm-test4  -- bash
root@cm-pod-test004:/usr/local/tomcat# ls /conf
test.properties

2.3 补充

关于--from-file的方式的创建指定key和不指定key的区别
1)不指定key名

创建:

[root@k8s-master k8s]# kubectl create cm cm-test-file --from-file=test.properties

输出:

[root@k8s-master k8s]# kubectl get cm cm-test-file -o yaml

2)指定key
创建:

[root@k8s-master k8s]# kubectl create cm cm-test-file02 --from-file=tp=test.properties

输出:

[root@k8s-master k8s]# kubectl get cm cm-test-file -o yaml

若指定key的名称,configmap中将会使用指定名称;若不指定,则默认使用文件名为key。
 

相关文章:

Kubernetes系列-配置存储 ConfigMap Secret

1 ConfigMap介绍 1.1 概述 在部署应用程序时&#xff0c;我们都会涉及到应用的配置&#xff0c;在容器中&#xff0c;如Docker容器中&#xff0c;如果将配置文件打入容器镜像&#xff0c;这种行为等同于写死配置&#xff0c;每次修改完配置&#xff0c;镜像就得重新构建。当然…...

bacnet ddc控制器如何通过485口转发Modbus协议控制modbus执行设备

要将BACnet DDC控制器通过485口转发Modbus协议控制Modbus执行设备&#xff0c;可以按照以下步骤进行&#xff1a; 确定Modbus执行设备的通信参数&#xff1a;包括串口波特率、数据位、停止位和校验位等参数。确保BACnet DDC控制器的485口通信设置与Modbus执行设备一致。 在BAC…...

构建易于运维的 AI 训练平台:存储选型与最佳实践

伴随着公司业务的发展&#xff0c;数据量持续增长&#xff0c;存储平台面临新的挑战&#xff1a;大图片的高吞吐、超分辨率场景下数千万小文件的 IOPS 问题、运维复杂等问题。除了这些技术难题&#xff0c;我们基础团队的人员也比较紧张&#xff0c;负责存储层运维的仅有 1 名同…...

前期自学Java的基础部分总结(二)

一. 抽象类 1.1 抽象类的概述 在java中&#xff0c;一个没有方法体的方法应该定义为抽象方法&#xff0c;而类中如果有抽象方法&#xff0c;该类必须被定义为抽象类 1.2 抽象类的特点 抽象类和抽象方法必须使用abstract关键字修饰 publice abstract class 类名{};public…...

Altova MissionKit 2023Crack

Altova MissionKit 2023Crack MissionKit是一套面向信息架构师和应用程序开发人员的企业级XML、JSON、SQL和UML工具的软件开发套件。MissionKit包括Altova XMLSpy、MapForce、StyleVision和其他市场领先的产品&#xff0c;用于构建当今的真实世界软件解决方案。 使用MissionKit…...

Linux CentOS上快速安装Docker并运行服务

在 CentOS 上快速安装 Docker&#xff0c;可以按照以下步骤进行&#xff1a; 1. 更新系统&#xff1a; sudo yum update 2. 安装 Docker&#xff1a; sudo yum install docker 3. 启动 Docker 服务&#xff1a; sudo systemctl start docker 4. 设置 Docker 开机自启动&…...

TCP三次握手与四次断开

TCP三次握手机制 三次握手是指建立一个TCP连接时&#xff0c;需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。 1、客户端发送建立TCP连接的请求报文&#xff0c;其…...

关于前端与APP录音相关的笔记

文章目录 一、前言二、内容组成1、权限获取2、针对设备兼容3、内容类型转换4、传输存储 三、拓展内容自动播放部分 一、前言 主要针对前端适配录音能力的简要记录&#xff0c;针对默认的wav及其可能需要转换到特定的mp3之类格式以适配需求的问题。&#xff08;这类通常是兼容tt…...

【Java】SpringBoot项目整合FreeMarker加快页面访问速度

文章目录 什么是FreeMarker&#xff1f;它的优点有那些&#xff1f;使用方式 什么是FreeMarker&#xff1f; Freemarker是一个模板引擎技术&#xff0c;它可以将数据和模板结合起来生成最终的输出。它是一种用于生成文本输出&#xff08;如HTML、XML、JSON等&#xff09;的通用…...

conda环境下安装opencv-python包

conda环境下安装opencv-python包 一、#查看环境 conda info --env# conda environments: # base D:\ProgramData\Anaconda3二、激活base环境 进入conda环境 conda init cmd.exe conda activate base三、根据版本号&#xff0c;下载对应的 python-opencv…...

JVM面试题--类加载器

什么是类加载器&#xff0c;类加载器有哪些 类加载子系统&#xff0c;当java源代码编译为class文件之后&#xff0c;由他将字节码装载到运行时数据区 BootStrap ClassLoader 启动类加载器或者叫做引导类加载器&#xff0c;是用c实现的&#xff0c;嵌套在jvm内部&#xff0c;…...

js怎么计算当前一周的日期

你可以使用 JavaScript 的 Date 对象来计算当前一周的日期。首先&#xff0c;你需要获取当前日期&#xff0c;然后使用 Date 对象的 getDay 方法获取当前是星期几(星期日是 0&#xff0c;星期一是 1&#xff0c;以此类推)。然后&#xff0c;你可以根据当前是星期几来计算出本周…...

【图论】差分约束

一.情景导入 x1-x0<9 ; x2-x0<14 ; x3-x0<15 ; x2-x1<10 ; x3-x2<9; 求x3-x0的最大值&#xff1b; 二.数学解法 联立式子2和5&#xff0c;可得x3-x0<23;但式子3可得x3-x0<15。所以最大值为15&#xff1b; 三.图论 但式子多了我们就不好解了&#xff0…...

13 springboot项目——准备数据和dao类

13.1 静态资源下载 https://download.csdn.net/download/no996yes885/88151513 13.2 静态资源位置 css样式文件放在static的css目录下&#xff1b;static的img下放图片&#xff1b;template目录下放其余的html文件。 13.3 创建两个实体类 导入依赖&#xff1a;lombok <!…...

Java 基础进阶总结(一)反射机制学习总结

文章目录 一、初识反射机制1.1 反射机制概述1.2 反射机制概念1.3 Java反射机制提供的功能1.4 反射机制的优点和缺点 二、反射机制相关的 API 一、初识反射机制 1.1 反射机制概述 JAVA 语言是一门静态语言&#xff0c;对象的各种信息在程序运行时便已经确认下来了&#xff0c;内…...

ERROR: transport error 202: gethostbyname: unknown host报错解决方案

Java 9 syntax for remote debugger: -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005Java 8 不适用 *:port&#xff0c;应该使用: -agentlib:jdwptransportdt_socket,servery,suspendn,address5005参考 https://stackoverflow.com/questions/50344957/ja…...

PyTorch高级教程:自定义模型、数据加载及设备间数据移动

在深入理解了PyTorch的核心组件之后&#xff0c;我们将进一步学习一些高级主题&#xff0c;包括如何自定义模型、加载自定义数据集&#xff0c;以及如何在设备&#xff08;例如CPU和GPU&#xff09;之间移动数据。 一、自定义模型 虽然PyTorch提供了许多预构建的模型层&#…...

JavaEE——SpringMVC中的常用注解

目录 1、RestController &#xff08;1&#xff09;、Controller &#xff08;2&#xff09;、ResponseBody 2、RequestMappping &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、使用 【1】、修饰方法 【2】、修饰类 【3】、指定方法类型 【4】、简化版…...

【严重】Metabase 基于H2引擎的远程代码执行漏洞

漏洞描述 Metabase 是一个开源的数据分析和可视化工具。 由于 CVE-2023-38646 的补丁(从H2 JDBC连接字符串中删除INIT脚本以防止命令注入)修复不完全&#xff0c;Metabase 仍受到命令注入的影响。攻击者可使用 H2 作为数据库引擎&#xff0c;通过 /api/setup/validate 端点发…...

0基础学习VR全景平台篇 第75篇:多现场

多现场是指将多台设备的直播画面整合到一个直播活动链接里面&#xff0c;让用户自行选择切换要看哪个直播画面的功能。既可以是同一个活动的不同角度直播&#xff0c;也可以是异地的直播。多现场不需要导播台&#xff0c;并且可以同时支持平面直播和VR直播的混合切换。多现场仅…...

App无辜躺枪?手把手教你搞定腾讯手机管家误报导致的应用商店下架

当合规应用遭遇误报下架&#xff1a;开发者系统性应对指南运动健康类应用被标记为金融诈骗软件&#xff1f;社交工具因"病毒风险"被各大商店紧急下架&#xff1f;这类看似荒谬的误报事件&#xff0c;正在成为中小开发团队的"无妄之灾"。某知名运动App开发团…...

Unity Il2CppDumper原理与实战:解析元数据与二进制对齐

1. 这不是“破解工具”&#xff0c;而是Unity开发者该懂的二进制真相课 你刚在Unity Asset Store下载了一个功能惊艳的插件&#xff0c;却在打包iOS后发现部分逻辑失效&#xff1b;或者接手一个没有源码的旧项目&#xff0c;只有一堆 .dll 和 .so 文件&#xff0c;连主入口…...

IPFS去中心化存储实战指南:黑马程序员音乐播放器项目开发完整教程

IPFS去中心化存储实战指南&#xff1a;黑马程序员音乐播放器项目开发完整教程 【免费下载链接】BlockChain 黑马程序员 120天全栈区块链开发 开源教程 项目地址: https://gitcode.com/gh_mirrors/blockchain95/BlockChain 你是否想过如何构建一个真正去中心化的音乐播放…...

tools.simonwillison.net图像处理工具集:从裁剪到优化的完整指南

tools.simonwillison.net图像处理工具集&#xff1a;从裁剪到优化的完整指南 【免费下载链接】tools Assorted useful tools, almost entirely generated using LLMs 项目地址: https://gitcode.com/gh_mirrors/tools23/tools tools.simonwillison.net图像处理工具集是一…...

告别拍脑袋规划!用ArcGIS做绿道选线:如何科学量化坡度、水域、道路成本并加权计算

科学规划绿道的ArcGIS高阶技法&#xff1a;从成本栅格构建到最优路径生成绿道规划从来不是简单的"两点之间直线最短"&#xff0c;而是需要综合考虑地形、生态、人文等多维因素的复杂决策过程。传统规划中常见的"拍脑袋"决策方式&#xff0c;往往导致建成后…...

sudo企业级应用【20260525】001篇

文章目录 一、总体设计思路 1️⃣ 设计原则 2️⃣ 日志策略(重点) 二、10 个真实生产场景(含 sudoers 配置) 🔹 Linux 系统管理(3 个) ✅ 场景 1:基础运维(用户 / 权限) ✅ 场景 2:磁盘与文件系统 ✅ 场景 3:网络与防火墙 🔹 云管理(2 个) ✅ 场景 4:云 CLI …...

孤舟笔记 互联网常用框架篇三 Dubbo是如何动态感知服务下线的?注册中心和服务端双保险

文章目录先说结论机制一&#xff1a;注册中心通知机制二&#xff1a;心跳检测机制三&#xff1a;连接事件感知机制四&#xff1a;定时拉取四种机制的协作回答技巧与点评加分回答面试官点评个人网站微服务环境下&#xff0c;服务实例随时可能上下线——重启、扩容、宕机……调用…...

别被忽悠了!2026亲测靠谱的AI论文网站|避坑精选版

2026 年学术写作工具已高度分化&#xff0c;千笔AI与ThouPen为全流程首选&#xff0c;豆包、DeepSeek 为专项强手&#xff1b;避坑关键&#xff1a;拒绝假文献、严控 AIGC 率、优先国内适配、免费试用先行。 一、TOP3 全流程首选&#xff08;亲测不踩雷&#xff09; 1. 千笔AI&…...

在Hermes Agent项目中接入Taotoken作为自定义模型供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Hermes Agent项目中接入Taotoken作为自定义模型供应商 基础教程类&#xff0c;针对使用Hermes Agent框架的开发者&#xff0c;详…...

3分钟快速安装BetterNCM插件管理器,让你的网易云音乐功能翻倍

3分钟快速安装BetterNCM插件管理器&#xff0c;让你的网易云音乐功能翻倍 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼吗&#xff1f;想要解锁更多个…...