文章目录

  • 一、ConfigMap介绍
  • 二、ConfigMap创建
    • (一)通过命令行创建configmap
      • 1. 通过文件创建configmap
      • 2. 通过文件夹创建configmap
      • 3. 命令行声明键值对创建configmap
    • (二)通过资源清单文件创建configmap
  • 三、ConfigMap的使用
    • 1. 将ConfigMap中的数据设置为容器的环境变量
    • 2. 使用Volume将ConfigMap作为文件或目录挂载

一、ConfigMap介绍

ConfigMap是一种比较特殊的存储卷,它的主要作用是以键值对的形式来存储配置信息的。

ConfigMap是一种API对象,用来将非加密数据保存到键值对中。可以用作环境变量、命令行参数或者存储卷中的配置文件。

ConfigMap可以将环境变量配置信息和容器镜像解耦,便于应用配置的修改。

二、ConfigMap创建

(一)通过命令行创建configmap

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

1. 通过文件创建configmap

用法:

# 创建,configmap简写为cm
# 第一种是将文件名作为键,文件内容作为值
kubectl create cm configmap名 --from-file=文件名 --from-file=文件名 ... -n namespace
# 第二种,不以文件名作为键,自定义键
kubectl create cm configmap名 --from-file=键值1=文件名 --from-file=键值2=文件名 ... -n namespace
# 查看
kuebctl get cm -n namespace
kubectl describe cm cm名 -n namespace
# 删除
kubectl delete cm cm名 -n namespace
kubectl delete cm --all -n namespace # 删除所有cm

【例 】

[root@k8s-master ~]# echo admin > file1
[root@k8s-master ~]# echo 12345 > file2# 第一种是将文件名作为键,文件内容作为值
[root@k8s-master ~]# kubectl create configmap my-cm1 --from-file=file1 --from-file=file2
configmap/my-cm1 created
[root@k8s-master ~]# kubectl describe cm my-cm1
Name:         my-cm1
Namespace:    default
Labels:       <none>
Annotations:  <none>
Data
====
file1:
----
admin
file2:
----
12345
Events:  <none>
# 两个键值对,file1:admin 和 file2:12345 ,文件名作为键,文件内容作为值# 第二种,不以文件名作为键,自定义键
# 创建
[root@k8s-master ~]# kubectl create configmap my-cm2 --from-file=user=file1 --from-file=password=file2
configmap/my-cm2 created# 查看
[root@k8s-master ~]# kubectl get cm
NAME    DATA   AGE
my-cm1   2      30s
my-cm2   2      8s
[root@k8s-master ~]# kubectl describe cm my-cm2
Name:         my-cm2
Namespace:    default
Labels:       <none>
Annotations:  <none>
Data
====
password:
----
12345
user:
----
admin
Events:  <none>
# 两个键值对,password:12345 和 user:admin

2. 通过文件夹创建configmap

用法:

# 创建
kubectl create cm cm名 --from-file=目录名 -n namespace
# 该目录下的每个文件被定义为一个键值对,其中文件名作为键,文件内容作为值# 查看
kuebctl get cm cm名 -n namespace
kubectl describe cm cm名 -n namespace# 删除
kubectl delete cm cm名 -n namespace

【例 】

[root@k8s-master ~]# mkdir cm-test
[root@k8s-master ~]# echo zhangsan > cm-test/sname
[root@k8s-master ~]# echo male > cm-test/sage[root@k8s-master ~]# kubectl create cm dir-cm --from-file=cm-test/
configmap/dir-cm created[root@k8s-master ~]# kubectl get cm
NAME     DATA   AGE
dir-cm   2      5s
my-cm    2      13m
[root@k8s-master ~]# kubectl describe cm dir-cm
Name:         dir-cm
Namespace:    default
Labels:       <none>
Annotations:  <none>
Data
====
sage:
----
male
sname:
----
zhangsan
Events:  <none>
# 两个键值对 sage:male 和 sname:zhangsan,每个文件对应一个键值对,其中文件名作为键,文件内容作为值

3. 命令行声明键值对创建configmap

用法:

# 创建
kubectl create cm cm名 --from-literal=键1=值1 --from-literal=键2=值2 ... -n namespace# 查看
kuebctl get cm -n namespace
kubectl describe cm cm名 -n namespace# 删除
kubectl delete cm cm名 -n namespace

【例 】

[root@k8s-master ~]# kubectl create cm literal-cm --from-literal=key1=hello --from-literal=key2=world
configmap/literal-cm created
[root@k8s-master ~]# kubectl describe cm literal-cm
Name:         literal-cm
Namespace:    default
Labels:       <none>
Annotations:  <none>
Data
====
key1:
----
hello
key2:
----
world
Events:  <none>

(二)通过资源清单文件创建configmap

用法:

# 资源清单文件
apiVersion: v1
kind: ConfigMap
metadata:name: namespace:
data:key1: value1key2: value2...# 下面是嵌套写法
data:key1: key2:value2key3:value2...# 创建
kubectl create -f 资源清单文件
kubectl apply -f 资源清单文件# 查看
kubectl describe cm cm名 -n namespace
kubectl describe -f 资源清单文件# 删除
kubectl delete cm cm名 -n namespace
kubectl delete -f 资源清单文件

【例 】

[root@k8s-master ~]# vim mycm.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mycmnamespace: test
data:key1: hellokey2: world# 创建
[root@k8s-master ~]# kubectl create -f mycm.yaml
configmap/mycm created# 查看
[root@k8s-master ~]# kubectl describe cm mycm -n test
Name:         mycm
Namespace:    test
Labels:       <none>
Annotations:  <none>Data
====
key1:
----
hello
key2:
----
world
Events:  <none># 删除
[root@k8s-master ~]# kubectl delete -f mycm.yaml
configmap "mycm" deleted# 嵌套使用
[root@k8s-master ~]# vim mycm2.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mycm2namespace: test
data:zhangsan:sno:1001sage:20ssex:maleyangyin:sno:1002sage:21ssex:female# 创建
[root@k8s-master ~]# kubectl create -f mycm2.yaml
configmap/mycm2 created# 查看
[root@k8s-master ~]# kubectl describe -f mycm2.yaml
Name:         mycm2
Namespace:    test
Labels:       <none>
Annotations:  <none>Data
====
yangyin:
----
sno:1002 sage:21 ssex:female
zhangsan:
----
sno:1001 sage:20 ssex:male
Events:  <none>

三、ConfigMap的使用

1. 将ConfigMap中的数据设置为容器的环境变量

[root@k8s-master ~]# vim mycm.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mycmnamespace: test
data:mycm1: hellomycm2: world# 创建
[root@k8s-master ~]# kubectl create -f mycm.yaml
configmap/mycm created# 查看
[root@k8s-master ~]# kubectl describe cm mycm -n test
Name:         mycm
Namespace:    test
Labels:       <none>
Annotations:  <none>Data
====
mycm1:
----
hello
mycm2:
----
world
Events:  <none># 在容器中使用定义的configmap
[root@k8s-master ~]# vim pod-configmap.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-configmapnamespace: test
spec:containers:- name: test-busyboximage: busybox:1.30.1imagePullPolicy: IfNotPresentargs:- sleep- "86400"env:- name: KEY1   # 环境变量名valueFrom:configMapKeyRef:name: mycm # 定义好的cmkey: mycm1  # cm中的键- name: KEY2valueFrom:configMapKeyRef:name: mycmkey: mycm2# 创建
[root@k8s-master ~]# kubectl create -f pod-configmap.yaml
pod/pod-configmap created# 查看
[root@k8s-master ~]# kubectl get pod pod-configmap -n test -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
pod-configmap   1/1     Running   0          43s   10.244.2.220   k8s-node02   <none>           <none># 进入容器验证环境变量
[root@k8s-master ~]# kubectl exec -it pod-configmap -n test -- sh
/ # env
KEY1=hello
KEY2=world
……省略……
/ # echo $KEY1
hello
/ # echo $KEY2
world
/ # exit

2. 使用Volume将ConfigMap作为文件或目录挂载

[root@k8s-master ~]# vim pod-volume-configmap.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-volume-configmapnamespace: test
spec:containers:- name: busyboximage: busybox:1.30.1imagePullPolicy: IfNotPresentargs:- sleep- "86400"volumeMounts:- name: config-volumemountPath: "/my-configmap"volumes:- name: config-volumeconfigMap:name: mycm# 创建
[root@k8s-master ~]# kubectl create -f pod-volume-configmap.yaml
pod/pod-volume-configmap created# 查看
[root@k8s-master ~]# kubectl get pod pod-volume-configmap -n test -o wide
NAME                   READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
pod-volume-configmap   1/1     Running   0          4s    10.244.2.221   k8s-node02   <none>           <none># 验证挂载情况
[root@k8s-master ~]# kubectl exec -it pod-volume-configmap -n test -- sh
/ # cd /my-configmap
/my-configmap # ls
mycm1  mycm2
/my-configmap # ls -l
total 0
lrwxrwxrwx    1 root     root            12 Jun  5 10:12 mycm1 -> ..data/mycm1
lrwxrwxrwx    1 root     root            12 Jun  5 10:12 mycm2 -> ..data/mycm2
/my-configmap # cat mycm1
hello
/my-configmap # cat mycm2
world#可以看到映射已经成功,configmap中的每个键都映射成了一个文件,value映射成为文件的内容
#key--->文件     value---->文件中的内容
#此时如果更新configmap的内容,容器中的值也会动态更新# 修改configmap中的值,在容器内的挂载目录下的文件会同步更新
[root@k8s-master ~]# kubectl edit cm mycm -n test
#  mycm1: hello 修改为 mycm1: hi
configmap/mycm edited# 查看修改是否生效
[root@k8s-master ~]# kubectl describe cm mycm -n test
Name:         mycm
Namespace:    test
Labels:       <none>
Annotations:  <none>
Data
====
mycm2:
----
world
mycm1:
----
hi
Events:  <none># 查看容器内是否同步更新过来
[root@k8s-master ~]# kubectl exec -it pod-volume-configmap -n test -- sh
/ # cd /my-configmap
/my-configmap # cat mycm1
hi
/my-configmap # cat mycm2
world# 删除
[root@k8s-master ~]# kubectl delete -f mycm
mycm2.yaml  mycm.yaml
[root@k8s-master ~]# kubectl delete -f mycm.yaml
configmap "mycm" deleted

通过volume挂载和环境变量的区别:

通过Volume挂载到容器内部时,当该configmap的值发生变化时,容器内部具备自动更新的能力,但是通过环境变量设置到容器内部该值不具备自动更新的能力。

注意:

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

K8S 数据卷volumes之ConfigMap相关推荐

  1. K8S 数据卷volumes之Secret

    文章目录 一.Secret介绍 二.Secret的创建 (一)通过命令行创建secret 1. 通过文件创建secret 2. 通过文件夹创建secret 3. 命令行声明键值对创建secret (二 ...

  2. Docker数据卷—Volumes

    一.引入Docker数据卷的必然性 为了实现容器与主机之间.容器与容器之间共享文件,容器中数据的持久化,将容器中的数据备份.迁移.恢复等,Docker加入了数据卷(volumes)机制.简单的讲,就是 ...

  3. Docker容器的数据卷(volumes)

    目录 1.容器数据卷技术解决什么问题 docker可将应用和环境打包成一个镜像.容器是镜像的实例化. 我们的数据如果都在容器中,一旦容器删除,数据就会丢失. 数据卷技术可将容器产生的数据同步到本地,容 ...

  4. docker 数据卷 mysql_Docker 入门教程(五)数据卷 Volumes

    有些容器在运行的时候是会产生数据的: 这种容器就叫做有状态容器: 比如说 MySQL 容器: 我们在创建镜像的时候希望保留的是 MySQL 各种配置以及扩展: 并不想把 MySQL 的数据也打包到镜像 ...

  5. docker基础---数据卷volumes

    1.数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 卷会一直存在 ...

  6. 云原生存储详解:容器存储与 K8s 存储卷

    作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...

  7. k8s挂载目录_云原生存储详解:容器存储与 K8s 存储卷

    作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...

  8. docker修改镜像的存储位置_云原生存储详解:容器存储与 K8s 存储卷(内含赠书福利)...

    作者 | 阚俊宝  阿里巴巴技术专家 参与文末留言互动,即有机会获得赠书福利! 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新 ...

  9. 云原生存储详解:容器存储与K8s存储卷

    作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...

最新文章

  1. [文档].Altera – SOPC Builder组件开发攻略
  2. 基于LSTM的电商评论情感分析-TensorFlow2实现(内附源码)【自然语言处理NLP-100例】
  3. hdu1528 Card Game Cheater
  4. Flex与.NET互操作(八):使用FluorineFx网关实现远程访问
  5. php无法下单功能,PHP如何解决并发下单问题?(不一定是下单,举个例)
  6. [渝粤教育] 中国地质大学 计算机文化基础 复习题
  7. 读大师的书 说自己的话——《传世经典书丛评注版》邀你来点评
  8. java 代码走查_代码走查检查表(JAVA).doc
  9. QListView 的高性能加载方案
  10. 人工智能知识全面讲解:最简单的神经元模型
  11. java lua脚本_在Java中使用Lua脚本语言
  12. Mac垃圾文件清理指南
  13. pdf及word文档的读取 pyPDF2,docx
  14. MySQL面试:索引为啥使用B+树而不是B树
  15. NFT Insider #59:a16z推出6亿美元基金专用于游戏初创公司,The Sandbox发布LAND持有者路线图
  16. 明年春天见!罗永浩发声:还完债当天就重返科技行业
  17. 三分钟看完京东区块链白皮书
  18. Prometheus使用cAdvisor监控Docker容器指标
  19. CFileDialog的使用(MFC-C++)
  20. MOOC翁恺老师零基础学Java语言课程编程题——第六周

热门文章

  1. SoFiA2用户手册自翻译
  2. iOS上线APP在App Store地址
  3. OpenStack的产品化历程
  4. 红黑树 -- 增删查改
  5. 批量将多个文件夹整理合并到一个文件夹中
  6. java try catch 输入字符串_java – 没有在try / catch中捕获NumberFormatException
  7. windows下hadoop安装时出现error Couldn‘t find a package.json file in “D:\\hadoop\hadoop-2.7.7\\sbin“问题
  8. Cocos Creator 安卓复制功能
  9. 1.[QT | QCharts | 动态显示]折线图标题字体大小无法更改
  10. 量子计算机的研究进展,量子计算原理及研究进展.pdf