如何解决如何将Docker镜像中的数据与Kubernetes VolumeNFS合并
我有一个docker映像,其中包含Director / opt / myfiles中的数据,可以这样说: /opt/myfiles/file1.txt /opt/myfiles/file2.dat
我想将该映像部署到kubernetes并将NFS卷安装到该目录,以便在删除Pod时保留对这些文件的更改。
当我在docker swarm中执行此操作时,我只需将一个空的NFS卷挂载到/ opt / myfiles /,然后启动docker swarm服务,该卷将填充映像中的文件,然后可以使用该服务并且当我删除该服务时,我的NFS服务器上仍然有文件,因此在该服务的下一次启动时,我具有以前的状态。
在kubernetes中,当我将一个空的NFS卷挂载到/ opt / myfiles /时,该pod启动,并且/ opt / myfiles /被一个空目录覆盖,因此我的pod不再从映像中看到文件。
我的音量设置和音量定义:
[...]
volumeMounts:
- name: myvol
mountPath: /opt/myfiles
[...]
volumes:
- name: myvol
nfs:
server: nfs-server.mydomain.org
path: /srv/shares/myfiles
我阅读了一些有关类似问题的主题(例如K8s doesn't mount files on Persistent Volume),并尝试了使用subPath
和subPathExpr
进行文档(https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath中的主题)的尝试,但我都没有所做的更改,默认情况下docker swarm会执行的操作。
kubernetes的行为对我来说似乎很奇怪,因为我已经与docker swarm一起工作了一段时间,而且我对docker swarm的处理方式很熟悉。但是我敢肯定,kubernetes用另一种方式来处理它是有原因的,并且有一些可能得到我所需要的东西。
所以,有人可以看看我的问题,并帮助我找到一种获得以下行为的方法吗?
- 我的图片在某个目录中有文件
- 我想将NFS卷挂载到该目录,因为我需要使数据持久化,例如当我的pod崩溃并移动到另一台主机时,或者由于某种原因我的pod暂时关闭时。
- 我的Pod启动时,我希望用图像中的文件填充该卷
当然,如果有人可以向我解释一下,为什么kubernetes和docker swarm的行为如此不同,我将非常高兴。
非常感谢
解决方法
通常可以在带有初始化容器的Kubernetes中实现。
让我们来看看一个图像,其中文件存储在/mypath
文件夹中。如果您能够将容器重新配置为使用其他路径(例如/persistent
),则可以在容器启动时使用init容器将文件从/mypath
复制到/persistent
。
containers:
- name: myapp-container
image: myimage
env:
- name: path
value: /persistent
volumeMounts:
- name: myvolume
path: /persistent
initContainers:
- name: copy-files
image: myimage
volumeMounts:
- name: myvolume
path: /persistent
command: ['sh','-c','cp /mypath/*.* /persistent']
在这种情况下,您有一个主容器myapp-container
,使用的是NFS卷中/persistent
文件夹中的文件,并且每次容器启动时,/mypath
中的文件都会被复制到该文件夹中初始化容器copy-files
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。