网站首页 > 精选教程 正文
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
(1)指定目录
[root@k8s-master ~]# kubectl create configmap test-map --from-file=/data
[root@k8s-master ~]# kubectl get configmaps test-map
[root@k8s-master ~]# kubectl describe configmaps test-map
[root@k8s-master ~]# kubectl get configmaps test-map -o yaml
(2)指定文件
[root@k8s-master ~]# kubectl create configmap test-map --from-file=/data/my.cnf --from-file=/data/php.ini --from-file=/data/nginx.conf
(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
2、使用yaml配置文件创建
[root@k8s-master ~]# vim test-map.yaml
添加:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-map
data:
poth: /usr/sbin/nginx -t
[root@k8s-master ~]# kubectl apply -f test-map.yaml
[root@k8s-master ~]# kubectl get configmap
[root@k8s-master ~]# kubectl describe configmaps test-map
[root@k8s-master ~]# kubectl get configmaps test-map -o yaml
二、使用ConfigMap
- 将ConfigMap中的数据设置为环境变量
- 将ConfigMap中的数据设置为命令行参数
- 使用Volume将ConfigMap作为文件或目录挂载
1、用作环境变量
[root@k8s-master ~]# vim test-map.yaml
添加:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-map
data:
aaa: good
bbb: food
[root@k8s-master ~]# kubectl apply -f test-map.yaml
[root@k8s-master ~]# kubectl get configmaps test-map
[root@k8s-master ~]# vim test-pod.yaml
添加:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: busybox:1.28
command: [ "/bin/sh", "-c", "env" ]
env:
- name: A_A
valueFrom:
configMapKeyRef:
name: test-map
key: aaa
- name: B_B
valueFrom:
configMapKeyRef:
name: test-map
key: bbb
restartPolicy: Never
[root@k8s-master ~]# kubectl apply -f test-pod.yaml
[root@k8s-master ~]# kubectl get pod
注意:完成Pod创建,运行结束,才能看到日志信息。
[root@k8s-master ~]# kubectl logs test-pod
2、用作命令行参数
结合上面的例子进行讲解
[root@k8s-master ~]# vim test-pod.yaml
修改:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: busybox:1.28
command: [ "/bin/sh", "-c", "echo $(A_A) $(B_B)" ] ## 使用环境变量
env:
- name: A_A
valueFrom:
configMapKeyRef:
name: test-map
key: aaa
- name: B_B
valueFrom:
configMapKeyRef:
name: test-map
key: bbb
restartPolicy: Never
[root@k8s-master ~]# kubectl get pod
[root@k8s-master ~]# kubectl logs test-pod
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/
[root@k8s-master ~]# kubectl get configmaps test-map
(2)创建Pod使用ConfigMap
[root@k8s-master ~]# vim test-pod.yaml
添加:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: nginx:1.16
ports:
- name: http
containerPort: 80
volumeMounts:
- name: test-volume
mountPath: /usr/share/nginx/html
volumes:
- name: test-volume
configMap: ##挂载configMap
name: test-map ##指定configMap的名称
[root@k8s-master ~]# kubectl apply -f test-pod.yaml
[root@k8s-master ~]# kubectl get pod -o wide
[root@k8s-master ~]# kubectl exec -it test-pod -- sh
访问web服务
[root@k8s-master ~]# curl 10.244.41.2
三、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来实现对容器中应用的配置管理。
猜你喜欢
- 2024-10-20 K8S Configmap和Secret热更新之Reloader
- 2024-10-20 WebSocket与Nginx的小秘密 ng websocket
- 2024-10-20 入门Elasticsearch,我觉着你看这一篇就够了
- 2024-10-20 还不会MapReduce的离线数据分析?阿里大数据负责人教你
- 2024-10-20 如何使用Nginx实现不同的Hearder值代理到不同的后端服务
- 2024-10-20 从netmap到dpdk,从硬件到协议栈,4个维度让网络体系构建起来
- 2024-10-20 MAPREDUCE快速入门 mapreduce讲解
- 2024-10-20 K8s 配置管理必备!ConfigMap vs Secret,哪个更适合你?
- 2024-10-20 Java8 快速实现List转map 、分组、过滤等操作
- 2024-10-20 client-go获取k8s资源信息 k8s获取pod信息
你 发表评论:
欢迎- 05-16原来汇编中的循环是这么玩儿的
- 05-16什么?Java 中的锁还有状态?
- 05-161.4、Java流程控制语句详解
- 05-16Java基础-循环语句
- 05-16Java虚拟机和Dalvik虚拟机有哪些区别和不同?
- 05-16Java、Python、C语言?5大热门编程语言,我该怎么选?
- 05-16java的就业方向有哪些
- 05-16java好学吗?java是不是最难学的语言?
- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)