文章目录

  • 一、ConfigMap概述
  • 二、ConfigMap创建
    • 1)通过命令行创建configmap(key-value键值对)
    • 2)通过文件创建configmap
    • 3)通过文件夹创建configmap
    • 4)通过yaml文件创建
  • 三、ConfigMap简单使用
    • 1)用作环境变量
    • 2)用作命令行参数
    • 3)使用volume将ConfigMap作为文件或目录直接挂载

一、ConfigMap概述

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

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

二、ConfigMap创建

可以使用 kubectl create configmap 从文件、目录或者 key-value 字符串创建等创建 ConfigMap。

1)通过命令行创建configmap(key-value键值对)

$ kubectl create configmap configmapname --from-literal=key=value
# 获取整个configmap 数据
$ kubectl get configmap configmapname -o go-template='{{.data}}'
# 查看详情
$ kubectl describe configmap configmapname
# 获取具体某个key值
$ kubectl get configmap configmapname -o go-template='{{.data.key}}'
# 删除
$ kubectl delete configmap configmapname
# 再查看
$ kubectl get configmap configmapname

2)通过文件创建configmap

$ echo hello > test1.txt
$ ehco world > test2.txt
$ kubectl create configmap my-config --from-file=key1=test1.txt  --from-file=key2=test2.txt
$ kubectl describe configmap my-config


看到该configmap中有两个键值对,key1:hello 和 key2:world

3)通过文件夹创建configmap

$ mkdir config
$ echo hello > config/test1
$ echo world > config/test2
$ kubectl create configmap dir-config --from-file=config/
$ kubectl describe configmap dir-config

4)通过yaml文件创建

$ cat << EOF > config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: my-config2
data:key1: hellokey2: world
EOF

执行

$ kubectl create -f config.yaml
$ kubectl describe configmap my-config2

三、ConfigMap简单使用

Pod可以通过三种方式来使用ConfigMap,分别为:

  • 将ConfigMap中的数据设置为环境变量
  • 将ConfigMap中的数据设置为命令行参数
  • 使用Volume将ConfigMap作为文件或目录挂载

【注意】

  • ConfigMap必须在Pod使用它之前创建
  • 使用envFrom时,将会自动忽略无效的键
  • Pod只能使用同一个命名空间的ConfigMap

1)用作环境变量

首先创建两个ConfigMap,分别名为special-config和env-config:

$ kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
$ kubectl create configmap env-config --from-literal=log_level=INFO
apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: test-containerimage: busyboxcommand: [ "/bin/sh", "-c", "env" ]env:- name: SPECIAL_LEVEL_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.how- name: SPECIAL_TYPE_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.typeenvFrom:- configMapRef:name: env-configrestartPolicy: Never

执行

$ kubectl apply -f test-pod.yaml
$ kubectl get pod test-pod
# 查看pod日志输出env
$ kubectl logs test-pod

当pod运行结束后,环境变量中会多输出如下:

SPECIAL_LEVEL_KEY=very
SPECIAL_TYPE_KEY=charm
log_level=INFO

2)用作命令行参数

将ConfigMap用作命令行参数时,需要先把ConfigMap的数据保存在环境变量中,然后通过$(VAR_NAME)的方式引用环境变量。

#test-pod-command-args.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod-command-args
spec:containers:- name: test-containerimage: busyboxcommand: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]env:- name: SPECIAL_LEVEL_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.how- name: SPECIAL_TYPE_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.typerestartPolicy: Never

执行

$ kubectl apply -f test-pod-command-args.yaml
$ kubectl get pod test-pod-command-args -o wide
$ kubectl get pod test-pod-command-args -o wide


另开窗口执行,容器没起来,执行下面命令会报错

$ kubectl logs -f test-pod-command-arg

当pod运行结束后,它的输出如下:

very charm

3)使用volume将ConfigMap作为文件或目录直接挂载

【示例1】将创建的ConfigMap直接挂载至Pod的/etc/config目录下,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容

$ cat << EOF >test-pod-mount-volume.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod-mount-volume
spec:containers:- name: test-containerimage: busyboxcommand: [ "/bin/sh", "-c", "cat /etc/config/special.how" ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: special-configrestartPolicy: Never
EOF

执行

$ kubectl apply -f test-pod-mount-volume.yaml
$ kubectl get pod test-pod-mount-volume -o wide

当Pod结束后会输出:

$ kubectl logs test-pod-mount-volume


【示例2】将创建的ConfigMap中special.how这个key挂载到/etc/config目录下的一个相对路径/keys/special.level。如果存在同名文件,直接覆盖

$ cat << EOF >test-pod-mount-volume-path.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod-mount-volume-path
spec:containers:- name: test-containerimage: busyboxcommand: [ "/bin/sh","-c","cat /etc/config/keys/special.level" ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: special-configitems:- key: special.howpath: keys/special.levelrestartPolicy: Never
EOF

执行

$ kubectl apply -f test-pod-mount-volume-path.yaml
$ kubectl get pod test-pod-mount-volume-path -o wide


当Pod结束后会输出:

$ kubectl logs test-pod-mount-volume-path

【示例3】在一般情况下 configmap 挂载文件时,会先覆盖掉挂载目录,然后再将 congfigmap 中的内容作为文件挂载进行。如果想不对原来的文件夹下的文件造成覆盖,只是将 configmap 中的每个 key,按照文件的方式挂载到目录下,可以使用 subpath 参数

$ cat << EOF >test-pod-mount-volume-subpath.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod-mount-volume-subpath
spec:containers:- name: test-containerimage: nginxcommand: ["/bin/sh","-c","sleep 36000"]volumeMounts:- name: config-volumemountPath: /etc/nginx/special.howsubPath: special.howvolumes:- name: config-volumeconfigMap:name: special-configitems:- key: special.howpath: special.howrestartPolicy: Never
EOF

执行

$ kubectl apply -f test-pod-mount-volume-subpath.yaml
$ kubectl get pod test-pod-mount-volume-subpath -o wide

当Pod正在运行中进入pod中查看

$ kubectl exec -ti test-pod-mount-volume-subpath -- /bin/sh
# ls /etc/nginx/
# cat /etc/nginx/special.how


非交互式查看

$ kubectl exec -it test-pod-mount-volume-subpath -- ls /etc/nginx/
$ kubectl exec -it test-pod-mount-volume-subpath -- cat /etc/nginx/special.how

Kubernetes(k8s)ConfigMap详解及应用相关推荐

  1. K8S configmap详解:从文件创建、从文件夹创建及以volume、env环境变量的方式在pod中使用

    K8S configmap详解:从文件创建.从文件夹创建及以volume.env环境变量的方式在pod中使用 ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在 ...

  2. kubernetes,service详解下

    kubernetes,service详解下 HeadLiness类型的Service 在某些场景中,开发人员可能不想使用Service提供的负载均衡功能,而希望自己来控制负载均衡策略,针对这种情况,k ...

  3. 【云原生之k8s】k8s基础详解

    [云原生之k8s]k8s基础详解 前言 一.kubernetes介绍 (1)kubernetes简介 (2)应用部署方式的演变 二.kubernetes组件 (1)kubernetes架构 (2)ma ...

  4. 自动化集成:Kubernetes容器引擎详解

    同系列推荐: Jenkins管理工具详解 Pipeline流水语法详解 Docker容器入门简介 Pipeline整合Docker容器 微服务组件二次浅封装 前言:该系列文章,围绕持续集成:Jenki ...

  5. Kubernetes secret使用详解

    Secret 存在意义 K8s configmap可以注入pod之内成为环境变量或者是配置文件,这些都是以明文方式保存,如果碰到密码这种的以明文方式保存就不行了,Secret更加倾向于保存要加密的文件 ...

  6. 【Kubernetes 系列】详解 ConfigMap 九种创建方式

    作者:半身风雪 上一节:配置 Java 微服务 内容简介:上一节主要学习使用 Kubernetes ConfigMaps 和 Secrets 设置环境变量,本节我们将学习,创建ConfigMap 的1 ...

  7. k8s pod 详解

    https://www.cnblogs.com/kevingrace/p/11309409.html 一.什么是Pod kubernetes中的一切都可以理解为是一种资源对象,pod,rc,servi ...

  8. 使用acs-engine在Azure中国区部署kubernetes集群详解

    1. acs-engine简介 ACS是微软在2015年12月推出的一项基于容器的云端PaaS服务.说简单点,acs-engine就是一个ARM模板生成器,用户只需要配置几个简单的参数来描述容器集群的 ...

  9. K8S YAML 详解

    一.YAML基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便.它实质上是一种通用的数据串行化格式. YAML语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用 ...

最新文章

  1. Java正则表达式细节1
  2. Python学习笔记7:函数对象及函数对象作參数
  3. fcn从头开始_如何使用Go从头开始构建区块链
  4. 前端学习(2574):vuex最佳实践
  5. Lightroom Classic 教程,如何结合使用Photoshop 和 Lightroom?
  6. 苹果开场铃声 android,推荐几款免费安卓、苹果手机铃声剪辑软件?
  7. C# 操作Gmap简单使用方法
  8. 蒙古文输入法linux版,蒙古文输入法下载 德力海蒙古文输入法 V2.1.3 官方安装版(附使用手册) 下载-脚本之家...
  9. linux如何查看读写权限,Linux系统下如何查看及修改文件读写权限
  10. 安装oracle18c前要求,oracle18c安装
  11. FMI飞马网 | AI人工智能:54份行业重磅报告汇总(附下载)
  12. Android之——手机黑名单的实现
  13. NEW RDSP MODE I (模拟,循环节)
  14. 8种微信小程序赚钱方式
  15. 高斯判别算法GDA(吴恩达机器学习c#实践,高斯模板上同心椭圆马氏距离画法,三)
  16. 浏览器--搜索操作符15个实例
  17. 牛客竞赛数学专题班生成函数I 题解
  18. 直播协议 HTTP-FLV 详解
  19. 设备巡检管理系统,为企业降本增效
  20. 前所未有的详细总结 BLAS(一):GEMM Routine(零)

热门文章

  1. 机器学习基础day3
  2. 建立自信心的有效方法
  3. idea 行尾加分号 光标切换到下一行
  4. 音频之Android NDK读写声卡
  5. FPGA设计中约束设计和时序分析方法
  6. NRC新世界城,实名制的区块链如何加快应用落地?
  7. ES6 Template String 模板字符串
  8. Windows 编程[19] - 改变菜单项的状态: GetMenuState、EnableMenuItem
  9. HTML5+CSS3移动商城-首页
  10. Hadoop2.6.0安装教程_单机/伪分布式配置