Kubernetes笔记(十五)--ConfigMap

kubectl获取命名空间下所有configmap集合的方法 此方法比较高级,你可以创建一个自定义的Go模板来精确控制哪些字段会被展示。下面是一个例子,获取所有命名空间下的ConfigMap但会忽略和在上述命令中,---metadata:data:{{- end }}{{- end }}此模板文件迭代所有ConfigMap对象,只包含名称、命名空间以及数据字段。注意,模板语法可能根据你想要显示的确切内容和格式有所不同。这样导出的会有些强迫症,还是不太推荐! 阅读详情

ConfigMap

前面的课程中我们学习了Servie的使用,Service是Kubernetes系统中非常重要的一个核心概念,我们还会在后面 的课程中继续学习Service的一些使用方法的。这节课我们来学习另外一个非常重要的资源对象:ConfigMap,我们知道许多应用经常会有从配置文件、命令行参数或者环境变量中读取一些配置信息,这些配置信息我们肯定不会直接写死到应用程序中去的,比如你一个应用连接一个redis服务,下一次想更换一个了的,还得重新去修改代码,重新制作一个镜像,这肯定是不可取的,而ConfigMap就给我们提供了向容器中注入配置信息的能力,不仅可以用来保存单个属性,也可以用来保存整个配置文件,比如我们可以用来配置一个redis服务的访问地址,也可以用来保存整个redis的配置文件。

创建

ConfigMap 资源对象使用key-value形式的键值对来配置数据,这些数据可以在Pod里面使用,ConfigMap和我们后面要讲到的Secrets比较类似,一个比较大的区别是ConfigMap可以比较方便的处理一些非敏感的数据,比如密码之类的还是需要使用Secrets来进行管理。我们来举个例子说明下ConfigMap的使用方法:

kind: ConfigMap
apiVersion: v1
metadata:
  name: cm-demo
  namespace: default
data:
  data.1: hello
  data.2: world
  config: |
    property.1=value-1
    property.2=value-2
    property.3=value-3

其中配置数据在data属性下面进行配置,前两个被用来保存单个属性,后面一个被用来保存一个配置文件。

当然同样的我们可以使用kubectl create -f xx.yaml来创建上面的ConfigMap对象,但是如果我们不知道怎么创建ConfigMap的话,不要忘记kubectl是我们最好的老师,可以使用kubectl create configmap -h来查看关于创建ConfigMap的帮助信息,

Examples:
  # Create a new configmap named my-config based on folder bar
  kubectl create configmap my-config --from-file=path/to/bar

  # Create a new configmap named my-config with specified keys instead of file basenames on disk
  kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt

  # Create a new configmap named my-config with key1=config1 and key2=config2
  kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2

我们可以看到可以从一个给定的目录来创建一个ConfigMap对象,比如我们有一个testcm的目录,该目录下面包含一些配置文件,redis和mysql的连接信息,如下:

$ ls testcm
redis.conf
mysql.conf

$ cat testcm/redis.conf
host=127.0.0.1
port=6379

$ cat testcm/mysql.conf
host=127.0.0.1
port=3306

然后我们可以使用from-file关键字来创建包含这个目录下面所有配置文件的ConfigMap:

$ kubectl create configmap cm-demo1 --from-file=testcm
configmap "cm-demo1" created

其中from-file参数指定在该目录下面的所有文件都会被用在ConfigMap里面创建一个键值对,键的名字就是文件名,值就是文件的内容。

创建完成后,同样我们可以使用如下命令来查看ConfigMap列表:

$ kubectl get configmap
NAME       DATA      AGE
cm-demo1   2         17s

可以看到已经创建了一个cm-demo1的ConfigMap对象,然后可以使用describe命令查看详细信息:

kubectl describe configmap cm-demo1
Name:         cm-demo1
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
mysql.conf:
----
host=127.0.0.1
port=3306

redis.conf:
----
host=127.0.0.1
port=6379

Events:  <none>

我们可以看到两个key是testcm目录下面的文件名称,对应的value值的话就是文件内容,这里值得注意的是如果文件里面的配置信息很大的话,describe的时候可能不会显示对应的值,要查看键值的话,可以使用如下命令:

$ kubectl get configmap cm-demo1 -o yaml
apiVersion: v1
data:
mysql.conf: |
host=127.0.0.1
port=3306
redis.conf: |
host=127.0.0.1
port=6379
kind: ConfigMap
metadata:
creationTimestamp: 2018-06-14T16:24:36Z
name: cm-demo1
namespace: default
resourceVersion: “3109975”
selfLink: /api/v1/namespaces/default/configmaps/cm-demo1
uid: 6e0f4d82-6fef-11e8-a101-525400db4df7

除了通过文件目录进行创建,我们也可以使用指定的文件进行创建ConfigMap,同样的,以上面的配置文件为例,我们创建一个redis的配置的一个单独ConfigMap对象:

$ kubectl create configmap cm-demo2 --from-file=testcm/redis.conf
configmap "cm-demo2" created
$ kubectl get configmap cm-demo2 -o yaml
apiVersion: v1
data:
  redis.conf: |
    host=127.0.0.1
    port=6379
kind: ConfigMap
metadata:
  creationTimestamp: 2018-06-14T16:34:29Z
  name: cm-demo2
  namespace: default
  resourceVersion: "3110758"
  selfLink: /api/v1/namespaces/default/configmaps/cm-demo2
  uid: cf59675d-6ff0-11e8-a101-525400db4df7

我们可以看到一个关联redis.conf文件配置信息的ConfigMap对象创建成功了,另外值得注意的是–from-file这个参数可以使用多次,比如我们这里使用两次分别指定redis.conf和mysql.conf文件,就和直接指定整个目录是一样的效果了。

另外,通过帮助文档我们可以看到我们还可以直接使用字符串进行创建,通过–from-literal参数传递配置信息,同样的,这个参数可以使用多次,格式如下:

$ kubectl create configmap cm-demo3 --from-literal=db.host=localhost --from-literal=db.port=3306
configmap "cm-demo3" created
$ kubectl get configmap cm-demo3 -o yaml
apiVersion: v1
data:
  db.host: localhost
  db.port: "3306"
kind: ConfigMap
metadata:
  creationTimestamp: 2018-06-14T16:43:12Z
  name: cm-demo3
  namespace: default
  resourceVersion: "3111447"
  selfLink: /api/v1/namespaces/default/configmaps/cm-demo3
  uid: 06eeec7e-6ff2-11e8-a101-525400db4df7
使用

ConfigMap创建成功了,那么我们应该怎么在Pod中来使用呢?我们说ConfigMap这些配置数据可以通过很多种方式在Pod里使用,主要有以下几种方式:

设置环境变量的值
在容器里设置命令行参数
在数据卷里面创建config文件

首先,我们使用ConfigMap来填充我们的环境变量:

apiVersion: v1
kind: Pod
metadata:
  name: testcm1-pod
spec:
  containers:
    - name: testcm1
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: cm-demo3
              key: db.host
        - name: DB_PORT
          valueFrom:
            configMapKeyRef:
              name: cm-demo3
              key: db.port
      envFrom:
        - configMapRef:
            name: cm-demo1

这个Pod运行后会输出如下几行:

$ kubectl logs testcm1-pod
......
DB_HOST=localhost
DB_PORT=3306
mysql.conf=host=127.0.0.1
port=3306
redis.conf=host=127.0.0.1
port=6379
......

我们可以看到DB_HOST和DB_PORT都已经正常输出了,另外的环境变量是因为我们这里直接把cm-demo1给注入进来了,所以把他们的整个键值给输出出来了,这也是符合预期的。

另外我们可以使用ConfigMap来设置命令行参数,ConfigMap也可以被用来设置容器中的命令或者参数值,如下Pod:

apiVersion: v1
kind: Pod
metadata:
  name: testcm2-pod
spec:
  containers:
    - name: testcm2
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(DB_HOST) $(DB_PORT)" ]
      env:
        - name: DB_HOST
          valueFrom:
            configMapKeyRef:
              name: cm-demo3
              key: db.host
        - name: DB_PORT
          valueFrom:
            configMapKeyRef:
              name: cm-demo3
              key: db.port

运行这个Pod后会输出如下信息:

$ kubectl logs testcm2-pod
localhost 3306

另外一种是非常常见的使用ConfigMap的方式:通过数据卷使用,在数据卷里面使用ConfigMap,就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容:

apiVersion: v1
kind: Pod
metadata:
  name: testcm3-pod
spec:
  containers:
    - name: testcm3
      image: busybox
      command: [ "/bin/sh", "-c", "cat /etc/config/redis.conf" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: cm-demo2

运行这个Pod的,查看日志:

$ kubectl logs testcm3-pod
host=127.0.0.1
port=6379

当然我们也可以在ConfigMap值被映射的数据卷里去控制路径,如下Pod定义:

apiVersion: v1
kind: Pod
metadata:
  name: testcm4-pod
spec:
  containers:
    - name: testcm4
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/path/to/msyql.conf" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: cm-demo1
        items:
        - key: mysql.conf
          path: path/to/msyql.conf

运行这个Pod的,查看日志:

$ kubectl logs testcm4-pod
host=127.0.0.1
port=3306

另外需要注意的是,当ConfigMap以数据卷的形式挂载进Pod的时,这时更新ConfigMap(或删掉重建ConfigMap),Pod内挂载的配置信息会热更新。这时可以增加一些监测配置文件变更的脚本,然后reload对应服务。

Kubernetes K8S之存储ConfigMap详解 K8S之存储ConfigMap概述与说明,并详解常用ConfigMap示例 阅读详情

相关推荐

(k8s)kubernetes中ConfigMap和Secret

ConfigMap是一种API对象,用来将非机密性的数据保存到键值对中。使用时,Pod可以将其用作环境变量、命令行参数或存储卷中的配置文件。ConfigMap将你的环境配置信息和容器镜像解耦,便于应用配置的修改。注意:ConfigMap并不提供保密或加密功能。如果你想存储的数据是机密性的,请使用Secret,或者使用其他第三方工具来保存你的数据的私密性,而不是用ConfigMap。

Richardlygo的博客 1409

Kubernetes 详解 ConfigMap

这些 key 的内容可能会很大,所以在 kubectl describe 的输出中,只能够看到键的名字和他们的大小。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容。这个参数可以使用多次,你可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的。

小楼一夜听春雨,深巷明朝卖杏花 1266

spring-cloud-kubernetes自动同步k8s的configmap更新

以上就是实战工程的所有代码了,仅仅只是引入了少量jar依赖,以及在启动配置文件中指定了configmap的信息和同步模式,即完成了获取配置文件的所有操作,至于代码中用到配置文件的地方,和使用SpringCloud Config并无差别。以上就是开启自动更新的步骤了,您基于上一章的源码做上述更改即可,也可以随同本文一起重新开发一个全新应用,来实现获取configmap的配置,并且实时同步configmap的变化;#更新配置信息的模式:polling是主动拉取,event是事件通知。

2401_89317758的博客 831

kubernetes—ConfigMap 与 Secret

1. Secret 是一种包含少量敏感信息,例如密码、token 或 key 的对象这样的信息可能会被放在Pod spec 中或者镜像中;将其放在一个secret 对象中可以更好地控制它的用途,并降低意外暴露的风险2.ConfigMap 主要解决配置文件的存储问题,而Secret 主要用来解决密码、token、秘钥等敏感数据①在创建、查看和编辑Pod的流程中Secret 暴露风险较小②系统会对Secret 对象采取额外的预防措施,例如避免将其写入磁盘中可能的位置③。

qq_41619571的博客 2887

树莓派与OpenCV实现人脸识别(OpenCV安装篇)

主要看了以下两位博客的文章完成的,也遇到了不少的坑,在这里一一填补说明。 链接: https://blog.youkuaiyun.com/weixin_42163073/article/details/107308759. 链接: https://blog.youkuaiyun.com/weixin_42573595/article/details/108526850. 树莓派与OpenCV实现人脸识别(OpenCV安装篇)一、材料准备:二、系统烧录三、安装OpenCV依赖项四、下载OpenCV-4.3.0五、为OpenCV配置P

weixin_45880057的博客 1万+

谷歌学术用publish-or-perish来对引用量排序

用谷歌学术搜索文献的时候发现不能按照引用量高低进行排序,网上提供了这个软件。 下载地址如下:Publish or Perish (harzing.com)https://harzing.com/resources/publish-or-perish 关于软件界面页面和各种指标的介绍,可以参考中科大的这个PPT: 文献分析软件——publish or perish(精品·公开课件).ppt (book118.com)https://max.book118.com/html/2018/1124/813

m0_48878989的博客 1万+

Kubernetes基础:ConfigMap:增删改查

Kubernetes基础:ConfigMap:增删改查

weixin_49131823的博客 1174

铝合金外壳表面处理工艺全解析:从阳极氧化到瓷泳喷涂的7种方法对比

本文全面解析了铝合金外壳的7种主流表面处理工艺,包括阳极氧化、粉末喷涂、瓷泳喷涂等。通过对比其原理、性能、成本与应用场景,为产品设计师和工程师提供了从防护性、装饰性到功能性的立体选型框架,帮助您根据具体需求选择最佳工艺方案。

weixin_29278805的博客 741

(三十七)综合案例:使用Configmap-reload动态热加载Configmap中的配置文件

在k8s集群中,当configmap以volume的形式挂载到pod内时,更新configmap,k8s会自动将更改的配置文件内容同步到pod挂载的文件中,这个并不是立刻生效的,大约需要1分钟左右,实际案例中,如果应用程序支持热更新功能,所谓热更新就是通过http接口的方式就可以更新程序的配置,如果支持热更新机制就可以使用configmap-reload监控配置文件的变更,当配置文件变更后调用程序接口自动将应用程序进行更新。​ 2.准备一套pv、pvc,用于持久化prometheus监控系统的数据。

11 2386

[UVM]UVM TLM2.0简介及应用实例分析

本文介绍了TLM2.0在UVM中的实现与应用。TLM2.0作为SystemC模型间的核心传输机制,相比TLM1.0提供了更丰富的特性,包括双向阻塞/非阻塞接口、时间标记和统一数据包。文章详细解析了TLM2.0在UVM中的接口实现方式,包括socket类型定义、数据传输机制以及时间标记处理。通过一个具体实例,展示了如何在UVM组件中使用TLM2.0的initiator和target socket进行数据传输,并说明了标准数据包格式和精确时间标记的优势。最后指出TLM2.0在UVM中的实现主要是为了与Syste

元直的博客 5392

SSE 传输过程中,丢失空格和回车符,怎么解决?

Server - Sent Events(SSE)即服务器发送事件,是 HTML5 中的一项 Web API,用于实现服务器向客户端浏览器推送实时数据的功能。

933

k8s基础(7)—Kubernetes-ConfigMap

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时,

dghfttgv的博客 1370

AOSP 8.0.0编译中的ANDROID_DATA缺失问题解决方案

在AOSP编译过程中,环境变量和路径设置的正确性至关重要。遇到相关的错误时,检查并修正环境配置通常是解决问题的关键。希望本文提供的分析和解决方案能帮助你顺利编译AOSP。

m0_74337424的博客 396

k8s 配置管理中心Configmap详解

在Kubernetes(K8s)集群中,ConfigMap作为一种重要的资源对象,扮演着配置管理中心的角色。本文旨在深入剖析ConfigMap的概念、用途、操作方式以及最佳实践,帮助读者更好地理解和应用这一功能强大的配置管理工具。

博客虽小,世界尽在其中 3394

鲁棒优化 (Robust Optimization) 算法详解及案例分析

鲁棒优化是一种用于处理不确定性优化问题的方法。其目标是在不确定性参数的可能取值范围内,找到一个对不确定性具有鲁棒性的解。

闲人编程的博客 4326

如何程序化的将 Wire 文件转换成 STEP、CATIA、DWG、NX、FBX 等格式

Wire 文件是专有格式,只有 Autodesk Alias 软件能够直接打开和编辑。 虽然可以在 Alias 软件中手动打开文件并导出为 STEP,但在实际工作中,经常会遇到需要转换数十甚至数百个文件的场景。如果每次都手动操作软件进行转换,不仅效率低下,还容易出错,批量场景下会非常麻烦。因此,程序化、自动化的转换方案变得至关重要。

weixin_44211633的博客 450

Kubernetes(k8s)ConfigMap详解及应用

文章目录一、ConfigMap概述二、ConfigMap创建1)通过命令行创建configmap(key-value键值对)2)通过文件创建configmap3)通过文件夹创建configmap4)通过yaml文件创建三、ConfigMap简单使用1)用作环境变量2)用作命令行参数3)使用volume将ConfigMap作为文件或目录直接挂载 一、ConfigMap概述 ConfigMap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用

匠人精神,持之以恒! 6586

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Kubernetes 之 ConfigMap

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时,可以将其用作环境变量、命令行参数或者存储卷中的配置文件。通过使用 ConfigMap 可以将你的配置数据和应用程序代码分开。

千度阿三的博客 2579

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

基于 Readme.md 编写交互式组件文档:react-styleguidist 分节示例中的样式继承与 Playground 实战

在 react-styleguidist 中,组件的使用说明主要写在组件目录下的 `Readme.md`(或与组件同名的 `.md` 文件)中,其中的 `jsx` 代码块会被自动编译成可实时编辑、实时预览的交互式 Playground。本文以仓库内 `examples/sections` 示例里的 Label 组件为例,逐层讲解「一段四行 Readme 如何变成文档页面」「示例如何继承全局样式」「

gitblog_00694的博客 922

spring-cloud-kubernetes与k8s的configmap

spring-cloud-kubernetes-config是spring-cloud-kubernetes框架下的一个库,用于将kubernetes的configmap作为配置文件,提供给springboot应用

程序员欣宸的博客 8650

Kubernetes的ConfigMap

Kubernetes的ConfigMap

duke_ding2的博客 1675

kubernetes(k8s) ConfigMap实战

目录前言实战从本地文件创建ConfigMap程序镜像Deployment配置文件运行程序查看配置文件修改配置小结 前言 ConfigMap将配置和容器分离,容器外挂配置,当有变更时,改动ConfigMap,便可以全局生效。相当于一个配置中心的角色。 下面我将以一个简单的Java应用为例,部署运行。利用ConfigMap把配置外挂进来。看下会有什么效果。 实战 从本地文件创建ConfigMap 创建ConfigMap的方式,推荐从本地文件创建而不是直接命令,这样好维护些。 我们先建立applic

愤怒的苹果ext的博客 2199

Kubernetes之ConfigMap

Configmap 是 k8s 中的资源对象,用于保存非机密性的配置的,数据可以用 key/value键值对的形式保存,也可通过文件的形式保存。

qq_33906471的博客 1483

k8s configmap 详解, 从理解 k8s volumes 挂载方式, 带你解决挂载 configmap 的种种疑难杂症, 以及 k8s 中如何创建 configmap

ConfigMap 顾名思义,是用于保存配置数据的键值对,可以用来保存单个属性,也可以保存配置文件。Secret 可以为 Pod 提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以使用 ConfigMap。

aifeier的博客 6234
上一篇: Kubernetes笔记(十四)--Serviece
下一篇: Kubernets笔记(十六)--Secrect
那记忆微凉
博客等级 码龄9年 412粉丝 387原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值