读取为文件
ConfigMap中的条目可以被容器以文件的形式读入,这种情况下,需要将ConfigMap作为卷挂载至Pod中的容器中。
在挂载至容器后,默认情况下,容器会将ConfigMap中的条目的键作为文件名,将条目的值作为文件内容。
因为ConfigMap中具有多个条目,因此可以通过在pod.spec.volumes.configMap.items
中进行指定单独挂载的文件。
挂载所有文件
将ConfigMap作为卷挂载,需要下面两步:
定义卷:在
spec.volumes.configMap
中指定name
为预先创建好的ConfigMap资源的名字,即与ConfigMap相关联;挂载卷:在Pod的
spec.containers.volumeMounts
中指定挂载点和挂载的卷名;
下面举一个例子,在容器的/etc/nginx/conf.d
下挂载一个名为config
的configMap卷,该卷与名为fortune-config
的ConfigMap相关联,容器会将该ConfigMap中的所有条目,以条目的键为文件名,值为文件内容,在挂载点中创建这些文件:
挂载指定文件
同样,挂载卷的方式可以只挂载部分文件,而不是将ConfigMap中的所有文件都挂载进Pod。有两种方法可以实现:
优点:挂载点中原本存在的文件不会被隐藏;
缺点:应用于ConfigMap卷时,被挂载的文件不会随着ConfigMap中条目的更新而更新;
利用
spec.volumes.configMap.items
在定义卷时,指定需要被挂载至卷中的条目;优点:被挂载的文件会随着ConfigMap中条目的更新而更新;
缺点:挂载点中原本存在的文件会被隐藏;
这里针对第二种方法进行详细介绍。
下面举一个例子,在容器的/etc/nginx/conf.d
下挂载一个名为config
的configMap卷,该卷与名为fortune-config
的ConfigMap相关联,容器会将该ConfigMap中的键为my-nginx-config.conf
的条目,并且文件名为gzip.conf
,值为该文件的内容,在挂载点中创建该文件:
同步更新
使用ConfigMap卷挂载文件时,可以实现同步更新,即ConfigMap资源中的条目被修改后,挂载至容器中的文件内容也会同步更新。
下面简单了解一下文件被自动更新的过程。
首先检查挂载点,可以看到挂载点中的文件的源头都是..2020_01_08_11_43_56.932719776
,它是以挂载时间为目录名创建的:
my-nginx-config.conf和sleep-interval是ConfigMap中的两个条目
当我们修改ConfigMap中某一个条目的值,再次检查挂载点(不是立刻就有效果的,有延迟),可以看到,文件的源头变成了..2020_01_08_11_51_52.411250185
,不是之前的目录了:
Last updated
Was this helpful?