你好,我认为你应该忘记 Kubernetes,想想你的 Django 应用程序的架构和功能。我猜你已经构建了一个网络应用程序,它提供了一些“上传图像”功能,然后你有代码可以在某处“存储”这个图像。在非常简单的场景中,如果您在笔记本电脑上运行应用程序,您的 Web 应用程序被配置为将此内容保存到本地文件夹,更高级的示例是您将应用程序部署到 VM 或云 vm,例如 AWS EC2 实例,并且您的应用程序正在将文件保存到此 EC2 实例的本地存储中。问题是双重的 - 如果我们部署了 2 个 Web 应用程序实例会发生什么 - 可以配置和运行 - 以便它们“共享”同一个文件夹来保存图像?我想这就是你想要的 否则,您的应用程序将不会水平扩展,每个用户都必须点击每个单独的实例 - 才能上传或检索特定图像。所以考虑到这是你的应用程序的设计决定,我很确定你已经解决了,你需要考虑 - 我如何共享文件夹?一个存储桶,以便我的网络应用程序的所有实例都可以保存文件?如果您在任何云上运行 3 个不同的 vm,则必须使用某种类型的 clour 存储,以便所有三个实例都指向相同的物理存储位置或 NFS 驱动器,或者您可以将数据保存到云存储服务S3!我很确定您已经解决了,您需要考虑 - 我如何共享文件夹?一个存储桶,以便我的网络应用程序的所有实例都可以保存文件?如果您在任何云上运行 3 个不同的 vm,则必须使用某种类型的 clour 存储,以便所有三个实例都指向相同的物理存储位置或 NFS 驱动器,或者您可以将数据保存到云存储服务S3!我很确定您已经解决了,您需要考虑 - 我如何共享文件夹?一个存储桶,以便我的网络应用程序的所有实例都可以保存文件?如果您在任何云上运行 3 个不同的 vm,则必须使用某种类型的 clour 存储,以便所有三个实例都指向相同的物理存储位置或 NFS 驱动器,或者您可以将数据保存到云存储服务S3!
牢记以上所有内容,并清楚地了解您需要将应用程序与区域设置存储的概念分离,特别是如果您想让它尽可能地无状态(无论这对您意味着什么),拥有您的 Web 应用程序,被打包为 docker 容器并作为 pod 部署在 kubernetes 集群中 - 将文件保存到本地存储不会有任何进展,因为每个 pod、每个 docker 容器都将使用底层的 kubernetes worker (vm) 存储来保存文件,因此另一个实例将在其他一些虚拟机等上保存文件等。
Kubernetes 为想要在 kubernetes 集群中“共享”的应用程序(pod)提供了这种抽象,一些本地存储,当然还有持久化。我上面没有添加的东西是 pod 和 worker 存储(意味着如果你将文件保存在 kubernetes worker 或 pod 中)一旦这个 vm / 实例重新启动,你将丢失你的数据。所以你想要一些耐用的东西。
长话短说,
1) 假设您的 kubernetes 集群支持它,您可以将您的应用程序/pod 与 Persistent Volume Claim 一起部署。正在发生的事情是,您可以将某种文件夹/存储安装到您的 pod 上,这些文件夹/存储将由集群可用的任何东西(某种 NFS 存储)进行备份。https://kubernetes.io/docs/concepts/storage/persistent-volumes/
2)您可以“外包”这个需要共享一个公共本地存储给一些外部提供商,例如一个常见的案例使用一个 S3 存储桶,而不是解决 kubernetes 上的问题 - 只需在 kubernetes 中保留和配置应用程序。
我希望我能给你一些基本的想法。