k8s系列文章:

configmap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用到Secret,主要用来应对以下场景:

  1. 使用k8s部署应用,当你将应用配置写进代码中,就会存在一个问题,更新配置时也需要打包镜像,configmap可以将配置信息和docker镜像解耦。
  2. 使用微服务架构的话,存在多个服务共用配置的情况,如果每个服务中单独一份配置的话,那么更新配置就很麻烦,使用configmap可以友好的进行配置共享。

其次,configmap可以用来保存单个属性,也可以用来保存配置文件。

创建

你可以通过命令kubectl create configmap -h帮助信息查看具体的创建。

configmap有三种常见创建方式:

**1. 通过yaml / json文件创建(推荐) **

这种是我比较推荐的方式,创建configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
name: test-conf
namespace: test
data:
test-conf: |+
SESSION_LIFETIME: 3600
URL: "http://test-server:8080"

执行命令:

kubectl create -f configmap.yaml

若报错:"namespace 'test' not found",则需要先创建namespace:

kubectl create namespace test

2. 通过--from-file

分别指定单个文件和目录,指定目录可以创建一个包含该目录中所有文件的configmap:

kubectl create configmap *** --from-file=/path

将--from-file指定为单个文件就可以从单个文件中创建:

kubectl create configmap *** --from-file=file1

其中,--from-file可以使用多次,比如:

kubectl create configmap *** --from-file=file1 --from-file=file2

3. . 通过key-value字符串创建

kubectl create configmap *** --from-literal=config1=123 --from-literal=config2=234

4. 通过env文件创建

通过环境文件创建:

kubectl create configmap *** --from-env-file=env.txt

其中,env.txt的文件格式为:

config1=***
config2=***

当使用多个--from-env-file从多个数据源创建configmap时,仅最后一个env文件有效。

查看

可以使用以下命令查看创建成功的configmap:

命令 说明
kubectl get configmaps 查看所有configmap
kubectl get configmaps -n namespace1 查看命名空间为namespace1的所有configmap
kubectl describe configmaps configmap1 查看configmap1的详细信息
kubectl get configmaps configmap1 -o yaml 以yaml文件形式展示configmap详细信息

使用

configmap创建成功之后,如何在pod中使用呢?有以下几种方法:

注意

使用ConfigMap有以下几个限制条件:

  1. ConfigMap必须在pod之前创建
  2. configmap受namespace的限制,只能相同namespace的pod才可以引用

env

通过环境变量获取ConfigMap中的内容。

首先创建configmap:

kubectl create configmap test-config --from-literal=env_model=prd -n test

接下来用作环境变量,创建pod.yaml:

apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: test
spec:
containers:
- name: test-container
image: test:v0.1
env:
- name: TEST-CONF
valueFrom:
configMapKeyRef:
name: test-config
key: env_model

执行命令创建Pod:

kubectl create -f pod.yaml

创建成功之后,执行命令查看pod的详细信息,可以看到已经将configmap中的配置添加到环境变量:

kubectl describe pod test-pod -n test

同时,也支持多个configmap共同创建环境变量。

volume

通过Volume挂载的方式将ConfigMap中的内容挂载为容器内部的文件或目录,这是我平时用的较多的方式。

接下来使用最开始创建的test-conf为例说明,将configmap挂载到特定目录,并保存为指定文件:

apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: test
spec:
containers:
- name: test-container
image: test:v0.1
volumeMounts:
- name: test-volume
mountpath: /app/config
volumes:
- name: test-volume
configMap:
name:test-conf
items:
- key: test-conf
path: config.yaml

以上。

K8S ConfigMap使用的更多相关文章

  1. .NET Core 使用 K8S ConfigMap的正确姿势

    背景 ASP.NET Core默认的配置文件定义在appsetings.json和appsettings.{Environment}.json文件中. 这里面有一个问题就是,在使用容器部署时,每次修改 ...

  2. K8s configMap原理介绍

    给容器内应用程序传递参数的实现方式: 1. 将配置文件直接打包到镜像中,但这种方式不推荐使用,因为修改配置不够灵活. 2. 通过定义Pod清单时,指定自定义命令行参数,即设定 args:[" ...

  3. 5.1.k8s.ConfigMap

    ConfigMap #ConfigMap用于保存配置数据的键值对,可用来保存单个属性,或配置文件 #ConfigMap创建 #使用yaml文件创建ConfigMap #cm-demo.yaml kin ...

  4. k8s configmap 挂载配置文件

    转自https://blog.csdn.net/weixin_34102807/article/details/85965725 1.新建ConfigMap apiVersion: v1 kind: ...

  5. 深入探究 K8S ConfigMap 和 Secret

    ConfigMap 1.什么是 ConfigMap? ConfigMap 是用来存储配置文件的 Kubernetes 资源对象,配置对象存储在 Etcd 中,配置的形式可以是完整的配置文件.key/v ...

  6. ASP.NET Core on K8S深入学习(9)Secret & Configmap

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.Secret 1.1 关于Secret 在应用启动过程中需要一些敏感信息, ...

  7. 虚拟化原理到K8s实践经验路线总结

    以下这些内容均为自行学习总结的内容,很多内容没有写概括介绍,看起来可能会有些突兀,但并不影响整体性,我自己的学习经验告诉我,这些内容还仅仅是最精简的核心部分,周边还有很多可扩展内容,主要是操作系统生态 ...

  8. K8S conul部署

    官网有Helm方式的安装文档(https://www.consul.io/docs/platform/k8s/index.html) 一,准备工作: 1,k8s环境 2,nfs服务器 二,创建PV n ...

  9. configmap使用-完整的configmap文档

    转发 https://www.jianshu.com/p/cf3e2218f283 转发 https://www.kubernetes.org.cn/3138.html 注意:configmap不用也 ...

随机推荐

  1. powershell Google Firefox

    $firefox = @{ DisplayName = "Mozilla Firefox"; filename = "Firefox Setup 68.0b7.msi&q ...

  2. [bzoj4827] [洛谷P3723] [Hnoi2017] 礼物

    Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是 ...

  3. ElEmentUI选择器弹出框定位错乱问题解决(弹出框出现在左上角)

    这个是原问题,我之前是没问题的,后来的突然出现了这个问题,查了好多没找到,后来看文档才发现的.通过这个问题,说明看文档的重要性,嘻嘻 解决办法是在选择器里插入一个 :popper-append-to- ...

  4. java中常用的锁机制

    基础知识 基础知识之一:锁的类型 锁就那么几个,只是根据特性,分为不同的类型 锁的概念 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限 ...

  5. 玩转Django2.0---Django笔记建站基础十(一)(常用的Web应用程序)

    第十章 常用的Web应用程序 Django为开发者提供了常见的Web应用程序,如会话控制.高速缓存.CSRF防护.消息提示和分页功能.内置的Web应用程序大大优化了网站性能,并且完善了安全防护机制,而 ...

  6. 【故障公告】SQL语句执行超时引发网站首页访问故障

    非常抱歉,今天早上 6:37~8:15 期间,由于获取网站首页博文列表的 SQL 语句出现突发的查询超时问题,造成访问网站首页时出现 500 错误,由此给您带来麻烦,请您谅解. 故障的情况是这样的. ...

  7. python(从放弃到从头开始)

    本节内容 Python介绍 发展史 Python 2 or 3? Hello World程序 变量 用户输入 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语句 表达式for ...

  8. Tiny Linux -- tce-load

    Tiny Linux which has its own package manager called "tce-load". There's a list of packages ...

  9. 2、TCP/IP

    TCP/IP协议栈:物理层.数据接口层.网络层.传输层.应用层或网络接口层.网络层.传输层.应用层 TCP/IP协议栈的核心协议:1.TCP2.UDP3.ICMP4.IGMP5.ARP:映射IP→Et ...

  10. FFMPEG结构体分析:AVCodecParameters

    /** * This struct describes the properties of an encoded stream. * * sizeof(AVCodecParameters) is no ...