在Kubernetes中,ConfigMap是一种资源对象,用于存储和管理应用的配置数据,这些数据可以被容器化应用读取和使用。以下是如何创建和使用ConfigMap进行配置管理的实战步骤:
创建ConfigMap
通过YAML文件创建ConfigMap
编写一个名为configmap.yaml
的文件,包含以下内容:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app-config
data:
database_url: postgresql://user:password@dbhost:port/dbname
application_mode: production
some_key: some_value
这里我们创建了一个名为my-app-config
的ConfigMap,其中包含了三个键值对配置项。
执行以下命令创建ConfigMap:
kubectl apply -f configmap.yaml
通过命令行直接创建ConfigMap
如果你不想使用YAML文件,也可以直接在命令行中创建:
kubectl create configmap my-app-config \
--from-literal=database_url=postgresql://user:password@dbhost:port/dbname \
--from-literal=application_mode=production \
--from-literal=some_key=some_value
使用ConfigMap
注入环境变量
在Pod定义中,你可以引用ConfigMap中的键值对作为环境变量:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app-container
image: my-app-image
envFrom:
- configMapRef:
name: my-app-config
# 或者逐个指定环境变量
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: my-app-config
key: database_url
挂载为文件
ConfigMap也可以挂载到Pod的文件系统中:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app-container
image: my-app-image
volumeMounts:
- name: config-volume
mountPath: /etc/config
readOnly: true
volumes:
- name: config-volume
configMap:
name: my-app-config
items:
- key: database_url
path: database.conf
- key: application_mode
path: mode.conf
这样,ConfigMap中的键值对会被映射为Pod内指定路径下的文件,例如/etc/config/database.conf
和/etc/config/mode.conf
。
ConfigMap热更新
当ConfigMap的内容发生变化时,如果它已经被挂载到正在运行的Pod中,通常不会自动反映这些变化。为了使Pod能够感知到ConfigMap的更新,可以结合使用livenessProbe
或restartPolicy
来重启容器,或者在设计应用时使其能够监测配置文件的变化并重新加载。
对于某些特殊场景,如Kubernetes 1.20及更高版本引入的volumeMode: FileOrCreate
以及特定的存储驱动程序(如FlexVolume或CSI),可能支持ConfigMap的实时更新而不必重启容器。不过,这需要具体存储插件的支持。