1、简介
在Kubernetes中,ConfigMap是一种API对象,用于管理非机密性的配置信息。它们允许从应用程序代码中分离出配置文件或配置键值对,提高应用程序的可移植性和可维护性。ConfigMap可以在不修改容器镜像的情况下,通过环境变量、命令行参数或文件系统的任意文件来向Pod中的容器提供配置信息。这里只说明一下挂载场景,详细介绍可参考上一篇:Kubernetes K8S中ConfigMap管理容器化应用的配置
2、优势
解耦配置与容器镜像: 将配置数据与容器镜像分离,使得容器镜像更加通用和可复用,而配置数据可以根据需要进行灵活调整。
动态配置: 可以在不重新构建容器镜像的情况下,通过更新 ConfigMap 来动态地更改容器的配置。
适用于不同环境: 可以为不同的环境(例如开发、测试、生产)创建不同的 ConfigMap,从而实现环境间配置的隔离和管理。
3、单文件挂载到空目录
创建配置文件
[root@mast01 wenjian]# vim application-1.conf
name: “application”
platform: “linux”
purpose: “demo”
company: “huqi”
version: “v2.1.0”
管理配置文件
通过kubectl命令行来生成configmap
通过文件直接创建
[root@mast01 wenjian]# kubectl -n default create configmap application-config –from-file=application-1.conf
configmap/application-config created
会生成配置文件,查看内容,configmap的key为文件名字
[root@mast01 wenjian]# kubectl -n default get cm application-config -oyaml
apiVersion: v1
data:
application-1.conf: |
name: “application-1”
platform: “linux”
purpose: “demo”
company: “huqi”
version: “v2.1.0”
kind: ConfigMap
metadata:
creationTimestamp: “2024-08-23T08:48:56Z”
name: application-config
namespace: default
resourceVersion: “75644”
uid: 082d1538-bae8-4001-8fe9-265d34cadd15
通过yaml文件直接创建
[root@mast01 wenjian]# vim application-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: application-config
namespace: default
data:
application-1.conf: |
name: “application”
platform: “linux”
purpose: “demo”
company: “luffy”
version: “v2.1.0”
创建configmap
[root@mast01 wenjian]# kubectl create -f application-config.yaml
configmap/application-config created
使用配置文件
[root@mast01 wenjian]# vim demo-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: default
spec:
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
volumes:
– configMap:
name: application-config
name: config
containers:
– name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
volumeMounts:
– mountPath: “/etc/application”
name: config
创建并查看
[root@mast01 wenjian]# kubectl create -f demo-deployment.yaml
deployment.apps/demo created
修改configmap文件的内容,观察pod中是否自动感知变化
[root@mast01 wenjian]# kubectl edit cm application-config
整个configmap文件直接挂载到pod中,若configmap变化,pod会自动感知并拉取到pod内部。
但是pod内的进程不会自动重启,所以很多服务会实现一个内部的reload接口,用来加载最新的配置文件到进程中。
4、多文件挂载
配置多个配置文件
[root@mast01 wenjian]# vim application-1.conf
name: “application-1”
platform: “linux”
purpose: “demo”
company: “luffy”
version: “v2.1.0”
[root@mast01 wenjian]# vim application-2.conf
name: “application-2”
platform: “linux”
purpose: “demo”
company: “luffy”
version: “v2.1.0”
使用两种方式创建
[root@mast01 wenjian]# kubectl delete cm application-config
[root@mast01 wenjian]# kubectl create cm application-config –from-file=application-1.conf –from-file=application-2.conf
[root@mast01 wenjian]# kubectl get cm application-config -oyaml
观察Pod已经自动获取到最新的变化
[root@mast01 wenjian]# kubectl exec demo-55c649865b-gpkgk ls /etc/application/
application-1.conf
application-2.conf
挂载到pod已存在的目录中
[root@mast01 wenjian]# kubectl exec demo-55c649865b-gpkgk ls /etc/profile.d
color_prompt
locale
更改deployment的挂载目录
[root@mast01 wenjian]# vim demo-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: default
spec:
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
volumes:
– configMap:
name: application-config
name: config
containers:
– name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
volumeMounts:
– mountPath: “/etc/profile.d”
name: config
重建pod
[root@mast01 wenjian]# kubectl apply -f demo-deployment.yaml
deployment.apps/demo created
查看pod内的/etc/profile.d目录,发现已有文件被覆盖
[root@mast01 wenjian]# kubectl exec demo-77d685b9f7-68qz7 ls /etc/profile.d
application-1.conf
application-2.conf
5、挂载子路径
配置多个配置文件
application-1.conf挂载到/etc/application/
application-2.conf挂载到/etc/profile.d
configmap保持不变,修改deployment文件
[root@mast01 wenjian]# vim demo-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: default
spec:
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
volumes:
– name: config
configMap:
name: application-config
items:
– key: application-1.conf
path: application1
– key: application-2.conf
path: application2
containers:
– name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
volumeMounts:
– mountPath: “/etc/application/application-1.conf”
name: config
subPath: application1 #使用subPath,该目录下已经有其他文件且不希望被覆盖掉
– mountPath: “/etc/profile.d/application-2.conf”
name: config
subPath: application2 #使用subPath,该目录下已经有其他文件且不希望被覆盖掉
测试挂载
[root@mast01 wenjian]# kubectl apply -f demo-deployment.yaml
deployment.apps/demo created
[root@mast01 wenjian]# kubectl exec demo-78489c754-shjhz ls /etc/application
application-1.conf
[root@mast01 wenjian]# kubectl exec demo-78489c754-shjhz ls /etc/profile.d/
application-2.conf
color_prompt
locale
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/420489.html