【问题标题】:How to create an upload folder for a web app in Kubernetes?如何在 Kubernetes 中为 Web 应用程序创建上传文件夹?
【发布时间】:2019-10-16 22:21:30
【问题描述】:

我们正在试验 Kubernetes 并考虑迁移我们的 web 应用程序,该应用程序目前托管在具有 vps 和负载平衡的经典公共云中。

我想知道如何在我们的 dockerized 应用程序中管理上传文件夹(具有写入/读取权限),其中存储了我们用户上传的文件。

由于我们在应用程序中使用大量文件上传,是否有可能拥有一个持久的数据存储,webapp 可以在其中上传文件并通过 webapp 管理它们?我是否必须更改我的应用程序的代码并将文件保存到外部对象存储中,或者有更快的方法通过本地文件系统来做到这一点?

谢谢!

【问题讨论】:

标签: node.js docker kubernetes


【解决方案1】:

我猜如果您运行多个 pod,您会想要某种共享文件系统吗?所以所有上传的文档都可以在一个位置使用,而不是分散在几个持久卷中?如果是这种情况,您需要某种分布式文件存储,例如 Amazon S3。更好的是,您可以使用 Kubernetes NFS,以便您的代码认为它使用的是本地文件系统,但它由分布式文件存储支持。

看看这个例子:https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs。 NFS 可以使用来自 GKE、Azure 或 AWS 的持久卷。

【讨论】:

    【解决方案2】:

    持久卷是正确的方法。您可以在 Veerendra 提供的链接中了解更多信息。为方便起见,您可以使用一些托管的 Kubernetes Engine,例如 GKE/EKS/AKS,因为 PV 部分在那里被简化了。您可以从 GCP here 找到一个很好的指南。

    关于重写应用程序 - 可能需要做一些小的更改,因为您将需要使用 Pod 级别的数据库。它也将是一个更合适的解决方案,因为您将获得一种基于负载和 Kubernetes 的其他几个功能来扩展和缩小应用程序的简单方法。

    我不会在这里担心 LoadBalancer。首先,您将 dockerize 您的应用程序,然后将其放入 Pod 中,该 Pod 将成为 Deployment 的一部分,然后将存储抽象为 PV。要了解这一切是如何工作的,您可以从这个简单的实验室 Deploying PHP Guestbook application with Redis 开始。您可以找到另一个关于将 PV 与 Deployment 和 StatefulSets 结合使用的有用资源here

    【讨论】:

      【解决方案3】:

      正如评论所述,persistent voulmes 是一个选项。您可以创建一个 AWS 卷,并将其附加到 pod。这个post 描述了如何做到这一点。

      但是,您可能会遇到一个问题。您无法扩展实例的数量。我认为,kubernetes 不允许在副本之间共享单个 elb。这个问题突出显示here。如那里所述,最好切换到像 s3 这样的对象存储。尽管可能需要更改代码,但这将是最佳解决方案。

      【讨论】:

        猜你喜欢
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 2014-11-11
        • 2016-08-01
        • 1970-01-01
        • 2011-02-27
        • 2014-02-06
        • 2018-06-24
        相关资源
        最近更新 更多