k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)
文章图片
ConfigMap:用于将应用的配置信息与程序的分离。这种方式不仅可以实现应用程序被的复用,而且还可以通过不同的配置实现更灵活的功能。在创建容器时,用户可以将应用程序打包为容器镜像后,通过环境变量或者外接挂载文件的方式进行配置注入。
一、创建ConfigMap
1、使用kubectl命令创建
[root@k8s-master ~]# mkdir /data[root@k8s-master data]# touch my.cnf[root@k8s-master data]# touch php.ini[root@k8s-master data]# touch nginx.conf
【k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)】(1)指定目录
[root@k8s-master ~]# kubectl create configmap test-map --from-file=/data
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/0860eb5fd835437281980975c26d6e1f.jpg)
文章图片
[root@k8s-master ~]# kubectl get configmaps test-map
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/195301bdcdc24153a31f0f876b5597b7.jpg)
文章图片
[root@k8s-master ~]# kubectl describe configmaps test-map
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/caebd529482a4403ac2dd3642949f7f0.jpg)
文章图片
[root@k8s-master ~]# kubectl get configmaps test-map -o yaml
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/8f8c85d2b0ce4a60b25d0ddeefd5cef3.jpg)
文章图片
(2)指定文件
[root@k8s-master ~]# kubectl create configmap test-map --from-file=/data/my.cnf --from-file=/data/php.ini--from-file=/data/nginx.conf
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/369922ebc6624df9ac4e0867d16d33e7.jpg)
文章图片
(3)自定义值(指定字符串)
[root@k8s-master ~]# kubectl create configmap test-map --from-literal=port=3306 --from-literal=datadir=/data/mysql
--from-literal:在命令中定义字面值
例如:
port=3306
datadir=/data/mysql
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/cd1f0dc11d01473f9a0c2e1fd91ff8c6.jpg)
文章图片
2、使用yaml配置文件创建
[root@k8s-master ~]# vim test-map.yaml添加:apiVersion: v1kind: ConfigMapmetadata:name: test-mapdata:poth: /usr/sbin/nginx -t
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/86b33222ac564a439f7eeaf02e841045.jpg)
文章图片
[root@k8s-master ~]# kubectl apply -f test-map.yaml
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/c71460345a9348a9bb88439c93068ed3.jpg)
文章图片
[root@k8s-master ~]# kubectl get configmap
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/7c22aa853a7d4e8db59c34ce78be67fa.jpg)
文章图片
[root@k8s-master ~]# kubectl describe configmaps test-map
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/c8b2dbc3b0c5459b873b80c463cffd3c.jpg)
文章图片
[root@k8s-master ~]# kubectl get configmaps test-map -o yaml
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/722b4bca745342a695035a770bc45e00.jpg)
文章图片
二、使用ConfigMap
- 将ConfigMap中的数据设置为环境变量
- 将ConfigMap中的数据设置为命令行参数
- 使用Volume将ConfigMap作为文件或目录挂载
[root@k8s-master ~]# vim test-map.yaml添加:apiVersion: v1kind: ConfigMapmetadata:name: test-mapdata:aaa: goodbbb: food
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/07674edd012e4dbbb30b1571662f8d3f.jpg)
文章图片
[root@k8s-master ~]# kubectl apply -f test-map.yaml
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/ba8833cdbd0548eb876db4bd76d12039.jpg)
文章图片
[root@k8s-master ~]# kubectl get configmaps test-map
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/d4af57db535f407c84228d98a98ecb6f.jpg)
文章图片
[root@k8s-master ~]# vim test-pod.yaml添加:apiVersion: v1kind: Podmetadata:name: test-podspec:containers:- name: test-podimage: busybox:1.28command: [ "/bin/sh", "-c", "env" ]env:- name: A_AvalueFrom:configMapKeyRef:name: test-mapkey: aaa- name: B_BvalueFrom:configMapKeyRef:name: test-mapkey: bbbrestartPolicy: Never
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/f7791b07146849498bc26cff19c109a8.jpg)
文章图片
[root@k8s-master ~]# kubectl apply -f test-pod.yaml
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/4e523982f3a94c79b9a7e557cca45e40.jpg)
文章图片
[root@k8s-master ~]# kubectl get pod
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/053b0204976045a5a4b318e47968e557.jpg)
文章图片
注意:完成Pod创建,运行结束,才能看到日志信息。
[root@k8s-master ~]# kubectl logs test-pod
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/c1801f9e1b5d4670b1d10b98c8067e28.jpg)
文章图片
2、用作命令行参数
结合上面的例子进行讲解
[root@k8s-master ~]# vim test-pod.yaml修改:apiVersion: v1kind: Podmetadata:name: test-podspec:containers:- name: test-podimage: busybox:1.28command: [ "/bin/sh", "-c", "echo $(A_A) $(B_B)" ]## 使用环境变量env:- name: A_AvalueFrom:configMapKeyRef:name: test-mapkey: aaa- name: B_BvalueFrom:configMapKeyRef:name: test-mapkey: bbbrestartPolicy: Never
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/a48c356ee1634ffaad5679bdd9e0cc57.jpg)
文章图片
[root@k8s-master ~]# kubectl get pod
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/d3f840bfab0044be872a508d21109b8b.jpg)
文章图片
[root@k8s-master ~]# kubectl logs test-pod
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/d046eb2dd73d4ccf9dff75342d8198bc.jpg)
文章图片
3、通过volumeMount使用ConfigMap
网站目录:/usr/share/nginx/html
(1) 创建ConfigMap
[root@k8s-master ~]# mkdir /data/[root@k8s-master ~]# echo "welcome to dodo web server" > /data/index.html[root@k8s-master ~]# kubectl create configmap test-map --from-file=/data/
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/2b45d8c3094b414eb60a4fa362bb22ab.jpg)
文章图片
[root@k8s-master ~]# kubectl get configmaps test-map
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/151a1a4bd0764c599748fba16f3e34d3.jpg)
文章图片
(2)创建Pod使用ConfigMap
[root@k8s-master ~]# vim test-pod.yaml添加:apiVersion: v1kind: Podmetadata:name: test-podspec:containers:- name: test-podimage: nginx:1.16ports:- name: httpcontainerPort: 80volumeMounts:- name: test-volumemountPath: /usr/share/nginx/htmlvolumes:- name: test-volumeconfigMap:##挂载configMapname: test-map##指定configMap的名称
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/b3794c27fbb24002b44839468eef535d.jpg)
文章图片
[root@k8s-master ~]# kubectl apply -f test-pod.yaml
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/688f38cd93c94841b66761c60eeda5d8.jpg)
文章图片
[root@k8s-master ~]# kubectl get pod -o wide
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/ed842492dc354b2b8d97e8f9121ed0a8.jpg)
文章图片
[root@k8s-master ~]# kubectl exec -it test-pod -- sh
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/3b3244eee62d4b9ab73630c8c0298b96.jpg)
文章图片
访问web服务
[root@k8s-master ~]# curl 10.244.41.2
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/c198ca24f83c49cc966815227456e954.jpg)
文章图片
三、ConfigMap的使用限制
ConfigMap必须在Pod之前创建(除非您把 ConfigMap 标志成”optional”)。如果您引用了一个不存在的 ConfigMap, 那这个Pod是无法启动的。就像引用了不存在的 Key 会导致 Pod 无法启动一样。
ConfigMap受Namespace限制,只有处于相同的Namespace中的Pod可以引用它;
ConfigMap中的配额管理还未能实现;
kubelet值支持可以被API Server管理的Pod使用ConfigMap。kubelet在当前Node上通过 --manifest-url 或 --config 自动创建的静态Pod将无法引用ConfigMap;
在Pod对ConfigMap进行挂载(volumeMount)操作时,容器内部只能挂载为目录,无法挂载为文件。
四、kubernetes集群中Secret与ConfigMap区别:
Secret主要是用来解决密码、token、密钥等敏感数据的配置问题,它有三种类型:
Service Account :用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;
Opaque : base64编码格式的Secret,用来存储密码、密钥等;
kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息。
而ConfigMap就是主要解决配置文件。可以解耦配置和镜像的分离。比如说在配置文件或者环境变量等等之类。kubernetes通过ConfigMap来实现对容器中应用的配置管理。
![k8s使用volume将ConfigMap作为文件或目录直接挂载_《蹲坑学kubernetes》之17-19(ConfigMap)](https://img.it610.com/image/info8/65265b080f5b433ca281f8ca9630fbce.jpg)
文章图片
推荐阅读
- k8s使用volume将ConfigMap作为文件或目录直接挂载_ConfigMap用管理对象的方式管理配置...
- Java|云原生DevOps(k8s/docker/springcloudalibaba)
- 机器使用成本下降|机器使用成本下降 50%,TDengine 在同程旅行基础监控中的实践
- laravel-admin使用filter过滤聚合字段
- 使用 Jetpack Compose 提升 Play 商店的用户体验
- k8s集群搭建过程详解
- gofs使用教程-基于golang的开源跨平台文件同步工具
- RenderDoc图形调试器详细使用教程(基于DirectX11)
- 【北亚数据库数据恢复】使用delete命令未添加where子句删除全表数据的Mysql数据库数据恢复
- Yii2.0 redis的配置和使用