ConfigMap配置文件挂载使用场景

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

联系我们
联系我们
分享本页
返回顶部