分别测试使用 ConfigMap 挂载 Env 和 Volume 的情况。

Kubernetes ConfigMap在envFrom变量、env/valueFrom与Volume挂载中的热更新测试与实践 ConfigMap是Kubernetes中一个关键的配置管理资源,它使得配置文件和参数的管理与容器化应用解耦,从而实现配置的动态调整与应用的无缝更新。通过ConfigMap,开发者可以将配置数据存储在Kubernetes集群中,供应用在运行时访问和使用。在实际应用中,ConfigMap的更新常常是不可避免的,而如何保证这些更新能够快速且无缝地反映到应用中,成为了一个关键问题。特别是在Env变量和Volume挂载的场景中,ConfigMap的热更新机制是否能够顺利应用,直接影响到系统的稳定性与灵活性。 阅读详情

 

更新使用ConfigMap挂载的Env

使用下面的配置创建 nginx 容器测试更新 ConfigMap 后容器内的环境变量是否也跟着更新。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: harbor-001.jimmysong.io/library/nginx:1.9
        ports:
        - containerPort: 80
        envFrom:
        - configMapRef:
            name: env-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO

获取环境变量的值

$ kubectl exec `kubectl get pods -l run=my-nginx  -o=name|cut -d "/" -f2` env|grep log_level
log_level=INFO

修改 ConfigMap

$ kubectl edit configmap env-config

修改 log_level 的值为 DEBUG。

再次查看环境变量的值。

$ kubectl exec `kubectl get pods -l run=my-nginx  -o=name|cut -d "/" -f2` env|grep log_level
log_level=INFO

实践证明修改 ConfigMap 无法更新容器中已注入的环境变量信息。

更新使用ConfigMap挂载的Volume

使用下面的配置创建 nginx 容器测试更新 ConfigMap 后容器内挂载的文件是否也跟着更新。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: harbor-001.jimmysong.io/library/nginx:1.9
        ports:
        - containerPort: 80
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config
      volumes:
        - name: config-volume
          configMap:
            name: special-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  log_level: INFO
$ kubectl exec `kubectl get pods -l run=my-nginx  -o=name|cut -d "/" -f2` cat /etc/config/log_level
INFO

修改 ConfigMap

$ kubectl edit configmap special-config

修改 log_level 的值为 DEBUG。

等待大概10秒钟时间,再次查看环境变量的值。

$ kubectl exec `kubectl get pods -l run=my-nginx  -o=name|cut -d "/" -f2` cat /tmp/log_level
DEBUG

我们可以看到使用 ConfigMap 方式挂载的 Volume 的文件中的内容已经变成了 DEBUG。

Known Issue: 如果使用ConfigMap的subPath挂载为Container的Volume,Kubernetes不会做自动热更新:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#mounted-configmaps-are-updated-automatically

ConfigMap 更新后滚动更新 Pod

更新 ConfigMap 目前并不会触发相关 Pod 的滚动更新,可以通过修改 pod annotations 的方式强制触发滚动更新。

$ kubectl patch deployment my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20180411" }}}}}'

这个例子里我们在 .spec.template.metadata.annotations 中添加 version/config,每次通过修改 version/config 来触发滚动更新。

总结

更新 ConfigMap 后:

  • 使用该 ConfigMap 挂载的 Env 不会同步更新
  • 使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新

ENV 是在容器启动的时候注入的,启动之后 kubernetes 就不会再改变环境变量的值,且同一个 namespace 中的 pod 的环境变量是不断累加的,参考 Kubernetes中的服务发现与docker容器间的环境变量传递源码探究。为了更新容器中使用 ConfigMap 挂载的配置,需要通过滚动更新 pod 的方式来强制重新挂载 ConfigMap。

参考

私信我获取KubeCon China 2019门票折扣码和报名SOFAStack Cloud Native Workshop

Kubernetes ConfigMap实战:从配置解耦到企业级应用部署 在云原生应用部署中,配置管理是连接应用代码与运行环境的关键环节。传统硬编码方式将配置与镜像捆绑,导致部署僵化、缺乏弹性,违背了不可变基础设施的原则。Kubernetes通过ConfigMap这一原生资源对象,实现了配置数据与容器镜像的解耦,将配置外置为可独立管理的键值对或文件。其核心价值在于支持配置的动态更新与版本控制,无需重建镜像即可调整应用行为,显著提升了部署灵活性和运维效率。ConfigMap可通过环境变量注入、文件挂载等多种方式供Pod使用,特别适用于微服务架构下的多环境配置管理、共享中间件连接信息 阅读详情

相关推荐

ConfigMap学习笔记

ConfigMAP 一般用configmap去管理一些配置文件,或者一些大量的环境变量信息 ConfigMap将配置和pod分开,有一个nginx ,nginx.Conf->configmap.nginx更易于配置文件的更改和管理 ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时,Pods可以将其用作环境变量、命令行参数或者存储卷中的配置文件 ConfigMap | Kubernetes ConfigMap 允许你将配置文件与镜像文件分离,以使容器化...

rendongxingzhe的博客 7412

通过configmap创建环境变量

如下是deployment的containers字段下添加环境变量方式。LIVES是环境变量起的名字gameenvcm是configmap的名称key:lives是环境变量的key这样configmap中key的值付值给LIVES,进容器env命令可以看到环境变量。

h2728677716的博客 659

第5章 ConfigMap & Secret 配置管理

│ ConfigMap & Secret 知识体系 ││ ││ ConfigMap = 非敏感配置 │ Secret = 敏感配置 ││ (明文存储) │ (base64编码,不是加密) ││ ││ 四种创建: ││ --from-literal │ --from-file │ --from-file=目录 │ YAML ││ ││ 三种注入: ││ env → 单key环境变量,不支持热更新 ││ envFrom → 批量环境变量,不支持热更新 │。

老韩的Linux云计算架构师进阶之路 42

配置分离:ConfigMap

云原生要素-配置分离:ConfigMap&Secret 什么是ConfigMap ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。 举一个例子更直观的看出ConfigMap是什么:比如我有一个nginx的Pod资源,那么ConfigMap就相当于nginx.conf这个配置文件。 需要注意的是:这个 Pod 和 ConfigMap 必须要在同一个 命名空间 中,不可跨命名空间。 ConfigMap供容器使用的典型用法如下: 生成容器内的环境变量。 设置容器启动命令的启

皮皮的博客 4265

从Podfile到分享成功:ShareSDK小红书模块集成全流程实战(附视频分享代码)

本文详细介绍了iOS应用如何通过ShareSDK集成小红书分享功能的全流程,包括环境配置、SDK初始化、图片和视频分享实现,以及常见问题排查和性能优化策略。特别针对视频分享这一高频需求场景,提供了完整的代码示例和实战技巧,帮助开发者快速实现社交分享功能。

weixin_42540248的博客 226

STK之Commu模块之三仿真卫星通信链路参数计算

考虑上述衰减的影响,可以得到卫星接收机输入端的载波功 [C] = [PT] +[GT] +[GR] -[L] -[L1] -[L2] (

juanhuokang2681的博客 8268

k8s ConfigMap热更新

ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中,下文主要是探究 ConfigMap 的创建和更新流程,以及对 ConfigMap 更新后容器内挂载的内容是否同步更新的测试。 测试示例 假设我们在defaultnamespace 下有一个名为nginx-config的 ConfigMap,可以使用kubectl命令来获取: $ ...

atarik@163.com 7717

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3194

Kubernetes - 实战:创建 ConfigMap/Secret 对象、分别使用环境变量Env和 Volume 配置ConfigMap/Secret 对象

这样,当 Pod 启动时,ConfigMap 中的数据会以文件形式挂载到指定的路径,Secret 的内容同样会以安全的方式挂载到 Pod 的文件系统中。环境变量则直接在容器启动时设置为对应 ConfigMap 或 Secret 中的键值。在 Kubernetes 中,ConfigMap 和 Secret 是两种用于存储和传递配置数据的对象。我们可以使用 ConfigMap 存储非敏感的应用配置,而 Secret 则用于存储敏感信息,如密码、密钥等。在 Pod 定义的 YAML 文件中,可以在。

qq_33240556的博客 617

AT32F403A ADC通道管理与转换模式实战解析

本文深入解析AT32F403A微控制器的ADC模块,重点阐述其通道管理机制与四种转换模式(序列模式、抢占自动转换模式、反复模式、分割模式)的实战应用。通过详细的配置步骤与代码示例,帮助开发者高效实现模拟数字转换,优化数据采集性能与系统响应。

sky77的博客 280

风力发电机缺陷检测平台

风力发电机缺陷检测平台相关内容展示

weixin_39779415的博客 1111

ConfigMap热更新

有一天,同事遇到了客户的奇怪的需求:主动触发pod的重建,但是又不能影响到pod中的业务。当时我就想到,给相关deployment配置滚动更新呀。但是,紧接着问题就来了,怎么触发这个滚动更新呢?接下来,就想到了ConfigMap的热更新可以触发Deploy的滚动升级呀,这样不就能将pod重建了吗?但是,同事测试后却发现ConfigMap更新后,但是缺没看到Deployment的滚动升级呢?这是为何...

Cui_Cui_666的博客 2881

uniapp - 解决 uni.chooseImage 在苹果 IOS 真机上点击没反应的问题,苹果手机点击 uni.chooseImage方法不生效,也不报任何错误(解决苹果ios系统点击无效问题)

uniapp小程序h5网页苹果ios系统点击uni.chooseImage不执行点击无效,uniapp使用uni.chooseImage方法点击没反应怎么办,uniappuni.chooseImage在ios苹果手机运行点击不触发,uniappuni.chooseImage苹果ios系统点击无效,uniapp项目ios端云打包之后uni.chooseImage不生效了,uniapp打包之后uni.chooseImage()无法打开相机,uniapp苹果手机无法打开相机和相册,uniapp网页h5微信支

🏆 前端领域优质创作者 1万+

Kubernetes ConfigMap热更新测试 – 探究ConfigMap的创建和更新流程

ConfigMap热更新测试 ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中,下文主要是探究 ConfigMap 的创建和更新流程,以及对 ConfigMap 更新后容器内挂载的内容是否同步更新的测试。 测试示例 假设我们在 default namespace 下有一个名为 nginx-config...

weixin_34112900的博客 1479

【Python基础】FastAPI 从入门到项目实战操作详解

【Python基础】FastAPI从入门到使用实战操作详解

congge_study的博客 454

智能合约监控告警:提示工程架构师用AI Prompt实现精准预警

当AI大模型(尤其是代码理解模型如CodeLlama、GPT-4 Code)与区块链数据结合,智能合约监控迎来范式革新。AI模型如何精准理解智能合约的业务特殊性?如何避免"AI幻觉"导致的误报?如何让模型学会区分"正常异常"与"攻击前兆"?答案藏在"提示工程"(Prompt Engineering)中。理解特定智能合约的业务逻辑(如DeFi协议的清算机制、NFT的铸造规则)识别复杂的攻击模式(如重入攻击的调用链特征、闪电贷的套利路径)结合链上链下数据进行多维度推理(如关联价格波动与异常交易)

AI架构全栈开发实战笔记 1011

保姆级万字实操|K8s 存储 Volume/PV/PVC + ConfigMap/Secret 完整详解

Kubernetes存储与配置管理摘要 本文系统讲解了Kubernetes存储卷类型和配置管理机制: 存储卷部分: 详细解析emptyDir临时卷、hostPath本地卷、NFS共享卷的特点与使用场景 深入讲解PV/PVC持久化存储机制,包括访问模式、回收策略等核心概念 通过busybox多容器Pod实验演示emptyDir和hostPath的实际应用 配置管理部分: 介绍ConfigMap和Secret两种核心配置资源 涵盖创建方法、环境变量注入、文件挂载等使用方式 提供动态更新配置的完整实验示例 实战应

Augustsky12138的博客 202

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Kubernetes—Volume与Configure

ConfigMap 是一个存储其他对象所需要使用的配置的API 对象。ConfigMap 使用data和binaryData字段,保存键值对数据。data字段,用来保存 UTF-8 字符串binaryData字段,用来保存二进制数据(base64 编码的字串)ConfigMap 的名字必须是一个合法的DNS 子域名。data或binaryData字段下面的每个键的名称都必须由字母、数字或者或组成。在data下保存的键名不可以与在binaryData下出现的键名有重叠。ConfigMap 使用建议。

weixin_73616238的博客 274

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Kubernetes ConfigMap 配置管理:从核心原理到生产实践

在云原生应用架构中,配置管理是连接应用代码与运行环境的关键环节。其核心原理在于将配置数据与应用镜像解耦,实现外部化与集中化管理,从而提升应用的可移植性和部署灵活性。这项技术为现代微服务提供了动态、声明式的配置注入能力,其价值在于支持多环境部署、简化运维流程并保障配置安全。典型的应用场景包括为容器化应用提供环境变量、配置文件以及非敏感的运行时参数。本文聚焦于 Kubernetes 中的 ConfigMap,深入解析其作为内置配置管理中心的工作机制,涵盖创建、注入、更新等全流程操作,并探讨如何与 Secret

weixin_34245749的博客 427

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

K8S学习笔记之Kubernetes 配置管理 ConfigMap

0x00 概述 很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用到 k8s 的另外一种资源,那就是 ConfigMap。 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等。而...

dengxiangbao3167的博客 253

Kubernetes ConfigMap配置管理:从核心原理到企业级实战指南

在云原生应用部署中,配置管理是连接应用代码与运行环境的关键环节。其核心原理在于将配置数据外部化,实现与应用程序的解耦,从而提升部署的灵活性和环境一致性。这项技术的核心价值在于支持"一次构建,处处运行"的云原生理念,通过声明式管理简化运维。典型的应用场景包括微服务架构中的多环境配置分发、数据库连接字符串管理以及应用功能开关的动态调整。本文聚焦于Kubernetes中的ConfigMap资源,深入解析其作为集群内配置中心的四种核心使用模式:环境变量注入、命令行参数传递、文件卷挂载以及特定路径条目映射。针对企业级

weixin_34050519的博客 376

Kubernetes 中的 ConfigMap 与 Secret:安全高效管理配置的终极指南

本文系统介绍了Kubernetes中的配置管理工具ConfigMap和Secret。ConfigMap用于存储非敏感配置数据,支持环境变量注入、命令行参数和数据卷挂载三种使用方式;Secret专用于管理敏感信息,需配合静态加密和RBAC权限控制确保安全。文章详细比较了两者的特性差异,提供了热更新方案选择建议(应用内监听/Sidecar/Reloader),并推荐生产环境使用ExternalSecretsOperator集成外部密钥管理系统。此外,还介绍了Kustomize和Helm在多环境配置管理中的应用,

油墨香^-^的博客 598

K8s ConfigMap实战全解:从创建到热更新的核心操作与避坑指南

本文全面解析Kubernetes ConfigMap的核心操作与实战技巧,涵盖从创建、使用到热更新的全流程。通过详细示例和避坑指南,帮助开发者高效管理K8s配置,实现配置与容器镜像的解耦,提升DevOps效率。特别针对ConfigMap的热更新、版本控制和生产环境优化提供了实用解决方案。

weixin_33675507的博客 170

Kubernetes 配置管理 ConfigMap(十二)

目录 一、背景 二、创建 ConfigMap 2.1、通过 --from-literal 2.2、通过 --from-file 2.3、通过--from-env-file 2.4、YAML 配置文件 三、ConfigMap...

weixin_30394251的博客 116
上一篇: k8s-configmap
下一篇: Kubernetes的ConfigMap说明
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值