将文件持久挂载到 kubernetes 中托管的应用程序的最简单方法是什么?



我有一个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并将其装载到您的工作负载中。

最新更新