我有一个docker映像,我想在kubernetes中运行它。一个集群已经存在,我可以kubectl
它。
docker镜像将是静态的,但它需要一个数据文件。在我的docker compose本地运行时,它将被指定为
services:
mysvc:
image: my-image
volumes:
- /home/me/data.dat:/data.dat
我想将/home/me/data.dat
上传到kubernetes cluster/pod,在那里它将被挂载到容器中的/data.dat
。
稍后,当应用程序运行时,我想重新上传此文件,因此它将在运行容器中被替换。
如果容器由于任何原因重新启动,我希望挂载最近上传的data.dat
版本。
最简单的方法是什么?
以下是一个思想实验,我没有在现实世界中尝试过,但这是我尝试解决问题的方式:
创建一个持久卷+持久卷声明,访问模式设置为ReadOnlyMany/ReadWriteMany,将其装载在pod中,然后使用kubectl cp将文件上传到装载的路径。我假设这将把文件上传到持久卷,使安装该卷的每个pod都可以访问它。如果容器重新启动,它应该使用最新上传的文件重新装载持久卷。
这个问题没有单一的答案:
如果文件大小低于1MB,您可以将其存储为ConfigMap
ConfigMap不是为保存大块数据而设计的。存储在ConfigMap中的数据不能超过1 MiB。如果需要存储大于此限制的设置,则可能需要考虑装入卷或使用单独的数据库或文件服务。
如果文件大小超过1MB:
-
您有多少个节点?
-
单个节点:您可以将其放入主机中,并使用hostPath/本地进行装载
-
多个节点:
-
你的pod有节点亲和性吗(换句话说,你的pod是否总是在同一个节点上运行?(:你可以使用hostPath/local^参见上面的
-
无关联(pod可以分配给任何工作节点(:使用诸如NFS之类的PersistentVolume并将其装载到您的工作负载中。
-
-