Kubernetes:管理上传的用户内容

问题描述 投票:1回答:2

我有这个想法,我认为我的项目应该发生什么,但我想检查一下,看看这是否先在理论层面上运作。基本上我正在开发一个在Kubernetes上运行的Django站点,但我正在努力设置我的replicationSet / statefulSet来管理上传的内容(图像)。

我最关心的是试图找出如何扩展和维护上传的内容。我的第一个想法是,我需要有一个写入这些文件的卷,但是我可以在缩放时让多个pod以相同的方式写入相同的卷吗?

从我收集的内容来看,似乎并没有这样做。听起来更像是每个pod,或者至少每个节点都拥有它自己的音量。但是对图像的请求是否会达到存储的卷?或者我应该创建一个自定义后端程序来移动东西,以便像NGINX服务器一样提供其他静态内容?

仅供参考 - 这是我的第一个可扩展项目lol。但我真的只是想找到管理上传的最佳方式......或者一般的方式。我会很感激有关这样的事情可能有效的任何解释,想法或幻想图表!

upload kubernetes image-uploading persistent-volumes
2个回答
1
投票

您好我认为您应该忘记kubernetes并考虑Django应用程序的体系结构和功能。我猜你已经构建了一个Web应用程序,它提供了一些“上传图像”功能,然后你就可以在某个地方“存储”这个图像。在非常简单的情况下,如果您在笔记本电脑上运行应用程序,您的Web应用程序配置为将此内容保存到本地文件夹,更高级的示例是您将应用程序部署到VM或云虚拟机,例如AWS EC2实例,您的应用程序将文件保存到此EC2实例的本地存储。问题是双重的 - 如果我们部署了2个Web应用程序实例会发生什么 - 可以配置和运行 - 以便他们“共享”相同的文件夹来保存图像吗?我想这就是你想要的,其他明智的你的应用程序不会横向扩展,每个用户都必须点击每个单独的实例 - 以便上传或检索特定的图像。因此,考虑到这是您的应用程序的设计决策,我相信您已经解决了,您需要思考 - 我如何共享文件夹?一个桶,以便我的所有Web应用程序实例都可以保存文件?如果在任何云上旋转3个不同的vms,则必须使用某种clour存储,以便所有三个实例指向相同的物理存储位置或NFS驱动器,或者您可以将数据保存到云存储服务S3!

考虑到以上所有因素,并清楚地了解您需要将应用程序与区域存储的概念分离,特别是如果您希望将其设置为无状态(无论对您而言),请使用您的Web应用程序,打包为docker容器并作为pod部署在kubernetes集群中 - 将文件保存到本地存储不会有任何进展,因为每个pod,每个docker容器将使用底层kubernetes worker(vm)存储来保存文件,所以另一个实例将保存文件在其他一些vm等。

Kubernetes为想要在kubernetes集群中“共享”的应用程序(pod)提供了这种抽象,一些本地存储当然可以保留它。我上面没有添加的东西是pod和worker存储(意味着如果你将文件保存在kubernetes worker或pod中),一旦重启vm / instance,你将丢失数据。所以你想要耐用的东西。

简而言之,

1)您可以部署应用程序/ pod以及持久卷声明,假设您的kubernetes集群支持它。发生的事情是你可以在你的pod上安装某种文件夹/存储,它将由你的集群可用的任何东西备份 - 某种NFS存储。 https://kubernetes.io/docs/concepts/storage/persistent-volumes/

2)您可以“外包”这种需求以共享一个共同的本地存储到一些外部提供商,例如常见的情况使用S3存储桶,而不是解决kubernetes上的问题 - 只需在kubernetes中保留和配置应用程序。

我希望我能给你一些基本的想法。


0
投票

注意:Kubernetes 1.14现在(2019年3月)附带耐用本地存储管理现在GA,其中:

  • 使本地连接(非网络连接)存储可用作持久卷源。
  • 允许用户利用持久性本地存储kubernetes / kubernetes通常更便宜和改进的性能:#73525#74391#74769 kubernetes / enhancements:#121kep

这可能有助于为您的案例确保真正持久的存储。

© www.soinside.com 2019 - 2024. All rights reserved.