K8S 数据卷volumes之ConfigMap
文章目录
- 一、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相关推荐
- K8S 数据卷volumes之Secret
文章目录 一.Secret介绍 二.Secret的创建 (一)通过命令行创建secret 1. 通过文件创建secret 2. 通过文件夹创建secret 3. 命令行声明键值对创建secret (二 ...
- Docker数据卷—Volumes
一.引入Docker数据卷的必然性 为了实现容器与主机之间.容器与容器之间共享文件,容器中数据的持久化,将容器中的数据备份.迁移.恢复等,Docker加入了数据卷(volumes)机制.简单的讲,就是 ...
- Docker容器的数据卷(volumes)
目录 1.容器数据卷技术解决什么问题 docker可将应用和环境打包成一个镜像.容器是镜像的实例化. 我们的数据如果都在容器中,一旦容器删除,数据就会丢失. 数据卷技术可将容器产生的数据同步到本地,容 ...
- docker 数据卷 mysql_Docker 入门教程(五)数据卷 Volumes
有些容器在运行的时候是会产生数据的: 这种容器就叫做有状态容器: 比如说 MySQL 容器: 我们在创建镜像的时候希望保留的是 MySQL 各种配置以及扩展: 并不想把 MySQL 的数据也打包到镜像 ...
- docker基础---数据卷volumes
1.数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 卷会一直存在 ...
- 云原生存储详解:容器存储与 K8s 存储卷
作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...
- k8s挂载目录_云原生存储详解:容器存储与 K8s 存储卷
作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...
- docker修改镜像的存储位置_云原生存储详解:容器存储与 K8s 存储卷(内含赠书福利)...
作者 | 阚俊宝 阿里巴巴技术专家 参与文末留言互动,即有机会获得赠书福利! 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新 ...
- 云原生存储详解:容器存储与K8s存储卷
作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...
最新文章
- [文档].Altera – SOPC Builder组件开发攻略
- 基于LSTM的电商评论情感分析-TensorFlow2实现(内附源码)【自然语言处理NLP-100例】
- hdu1528 Card Game Cheater
- Flex与.NET互操作(八):使用FluorineFx网关实现远程访问
- php无法下单功能,PHP如何解决并发下单问题?(不一定是下单,举个例)
- [渝粤教育] 中国地质大学 计算机文化基础 复习题
- 读大师的书 说自己的话——《传世经典书丛评注版》邀你来点评
- java 代码走查_代码走查检查表(JAVA).doc
- QListView 的高性能加载方案
- 人工智能知识全面讲解:最简单的神经元模型
- java lua脚本_在Java中使用Lua脚本语言
- Mac垃圾文件清理指南
- pdf及word文档的读取 pyPDF2,docx
- MySQL面试:索引为啥使用B+树而不是B树
- NFT Insider #59:a16z推出6亿美元基金专用于游戏初创公司,The Sandbox发布LAND持有者路线图
- 明年春天见!罗永浩发声:还完债当天就重返科技行业
- 三分钟看完京东区块链白皮书
- Prometheus使用cAdvisor监控Docker容器指标
- CFileDialog的使用(MFC-C++)
- MOOC翁恺老师零基础学Java语言课程编程题——第六周
热门文章
- SoFiA2用户手册自翻译
- iOS上线APP在App Store地址
- OpenStack的产品化历程
- 红黑树 -- 增删查改
- 批量将多个文件夹整理合并到一个文件夹中
- java try catch 输入字符串_java – 没有在try / catch中捕获NumberFormatException
- windows下hadoop安装时出现error Couldn‘t find a package.json file in “D:\\hadoop\hadoop-2.7.7\\sbin“问题
- Cocos Creator 安卓复制功能
- 1.[QT | QCharts | 动态显示]折线图标题字体大小无法更改
- 量子计算机的研究进展,量子计算原理及研究进展.pdf