在kubernetes中, 如果某个pod需要使用到volume, 且要将该volume挂载到宿主机上, 则需要注意存在被覆盖的情况,在这做一个汇总.
当挂载一个文件或者目录,宿主机或者容器存在与否, 所有情况如下:
宿主机 | 容器 | 运行结果 |
---|---|---|
文件存在 | 文件不存在 | 挂载成功,容器中新建文件 |
目录存在 | 目录不存在 | 挂载成功,容器中新建目录 |
文件不存在 | 文件存在 | 挂载成功,宿主机新建该文件,容器中的文件被覆盖为空 |
文件存在 | 文件存在 | 挂载成功,容器内的文件内容被覆盖 |
目录存在 | 目录存在 | 挂载成功,容器内目录内容被覆盖 |
—— | —— | —— |
文件存在 | 目录存在 | 容器启动失败 |
目录存在 | 文件存在 | 容器启动失败 |
—— | —— | —— |
目录不存在 | 目录不存在 | 挂载成功,docker会自动在宿主机和容器内新建此目录 |
目录不存在 | 文件存在 | 容器启动失败 |
目录不存在 | 目录存在 | 挂载成功,容器内目录内容被覆盖(空) |
除了使用volume之外,还经常使用到cofigmap对象,需要特别注意的是,如果使用configmap提示以下错误,
说明这次的挂载将一个路径挂载到了一个文件中, 这里需要使用subpath.