赞
踩
简单理解
kubernetes集群可以使用ConfigMap来实现对容器中应用的配置进行管理
(就是可以把一些应用的conf文件内容写到里面)。
可以把ConfigMap看作是一个挂载到pod中的存储卷
详细解释
在 Kubernetes 中,ConfigMap 是一种 API 对象,用于存储非机密数据(如配置文件、环境变量、命令行参数等)。ConfigMap 允许您将应用程序的配置与容器化的应用程序分开管理,从而实现配置的灵活和动态管理。
ConfigMap 的核心概念
组合使用
你可以将 ConfigMap 的数据同时作为环境变量和文件挂载,以灵活满足应用程序的需求。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/45a71beb70394092bc0ed46ac50722ac.png
[root@master ~]# kubectl create configmap cm1 --from-literal=host=127.0.0.1 --from-literal=port=3306
[root@master ~]# kubectl describe cm cm1
通过指定文件创建,即将一个配置文件创建为一个ConfigMap,–from-file=文件路径:
[root@master ~]# echo -n 127.0.0.1 > host
[root@master ~]# echo -n 3306 > port
[root@master ~]# kubectl create configmap cm2 --from-file=./host --from-file=./port
[root@master ~]# kubectl describe cm cm2
通过一个文件内多个键值对,–from-env-file=文件路径
[root@master ~]# vim env.txt
写入
host=127.0.0.1
port=3306
[root@master ~]# kubectl create configmap cm3 --from-env-file=env.txt
[root@master ~]# kubectl describe cm cm3
[root@master ~]# vim cm4.yaml
apiVersion: v1 kind: ConfigMap metadata: name: cm4 data: host: 127.0.0.1 port: "3306" [root@master ~]# kubectl apply -f cm4.yml configmap/cm4 created [root@master ~]# kubectl describe cm cm4 Name: cm4 Namespace: default Labels: <none> Annotations: Data ==== host: ---- 127.0.0.1 port: ---- 3306 Events: <none>
[root@master ~]# vim pod-cm1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-cm1
spec:
containers:
- name: busybox
image: busybox
args: [ "/bin/sh", "-c", "sleep 10000" ]
envFrom:
- configMapRef:
name: cm1
[root@master ~]# kubectl apply -f pod-cm1.yml
[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec pod-cm1 – env
[root@master ~]# vim pod-cm2.yaml
apiVersion: v1 kind: Pod metadata: name: pod-cm2 spec: containers: - name: busybox image: busybox args: [ "/bin/sh", "-c", "sleep 10000" ] volumeMounts: - name: vol-cm mountPath: "/etc/mysql" readOnly: true volumes: - name: vol-cm configMap: name: cm2
[root@master ~]# kubectl apply -f pod-cm2.yml
[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec pod-cm2 – cat /etc/mysql/host
127.0.0.1
[root@master ~]# kubectl exec pod-cm2 – cat /etc/mysql/port
3306
可以看到内容
[root@master ~]# echo “test-test” > nginx.conf #产生测试用的nginx.conf文件
[root@master ~]# kubectl create configmap nginxconf --from-file=/root/nginx.conf
[root@master ~]# kubectl describe cm nginxconf
[root@master ~]# vim pod-nginxconf.yaml
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.20 volumeMounts: # 用volume挂载方式 - name: vol-nginx # 对应下面的volume名 mountPath: "/testdir" # 挂载到容器内部的路径 readOnly: true # 只读 volumes: - name: vol-nginx # 卷名称 configMap: name: nginxconf # configmap的名称
[root@master ~]# kubectl apply -f pod-nginxconf.yaml
[root@master ~]# kubectl exec -it nginx – cat /testdir/nginx.conf
如果修改了value, 那么容器内部会不会更新?
ConfigMap热更新方式
通过环境变量的方式传递给pod。这种方式不会热更新
通过volume的方式挂载到pod内。这种方式会热更新,大概需要半分钟左右。
[root@master ~]# kubectl edit cm nginxconf
修改test-test 为 test-page
[root@master ~]# kubectl exec -it nginx – cat /testdir/nginx.conf #等待一会
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。