如何通过类似于 Kubernetes 的 CloudFoundry 清单挂载文件?

How to mount a file via CloudFoundry manifest similar to Kubernetes?

对于 Kubernetes,我曾经将包含功能标志的文件挂载为 key/value 对。我们的 UI 然后会简单地获取文件并读取值。

像这样:What's the best way to share/mount one file into a pod?

现在我想对 CloudFoundry 的清单文件执行相同的操作。如何挂载文件以便在部署时在 /dist 文件夹中可用?

添加更多信息,当我们挂载文件时,UI 之后可以下载文件并读取内容。我们正在使用 React 并且对服务器的任何调用都必须经过 Apigee 层。

将文件装载到 CloudFoundry 应用程序的典型方法称为 Volume Services。这需要一个远程文件系统,如 NFS 或 SMB,并将其安装到您的应用程序容器中。

我认为这不是您想要的。挂载在单个文件中可能有点矫枉过正。不过你完全可以走这条路。

也就是说,CloudFoundry 没有类似于 Kubernetes 的内置概念,您可以在 Kubernetes 中获取配置并将其挂载为文件。使用 CloudFoundry,您确实有一些类似的选择。虽然它们并不完全相同,因此您必须确定是否适合您的需要。

  1. 您可以通过环境变量传递配置(或通过用户提供的服务绑定,但这也通过环境变量 VCAP_SERVICES 传递)。这不会是一个文件,但也许你可以让你的 UI 阅读它(你没有提到 UI 如何获取该文件,所以我无法进一步评论。如果你详细说明在这一点上,如果它是 HTTP 或从磁盘读取,我也许可以扩展这个选项。

    如果它绝对需要是一个文件,您的应用程序可以在启动时读取环境变量内容并将其写入磁盘。如果您的应用程序无法像使用 Nginx 那样执行此操作,则可以在应用程序的根目录中包含一个 .profile 脚本来读取它并生成文件。例如:echo "$CFG_VAR" > /dist/file 或生成该文件所需的任何操作。

    使用环境变量时的一些注意事项。其中可以包含多少信息是有限制的(抱歉,我不知道我头脑中的确切值,但我认为它大约是 128K)。它也不适合二进制配置,在这种情况下,您需要先对数据进行 base64 编码。

  2. 您可以从配置服务器中提取配置文件并将其缓存在本地。这可能非常简单。您的应用程序启动时做的第一件事就是伸出手来下载文件,将其放在磁盘上,文件将在应用程序的生命周期内一直存在。

    如果你没有像 运行 Nginx 这样的服务器端应用程序,你可以在你的根目录中包含一个 .profile 脚本(可以是任何可执行脚本)可以使用 curl 或其他工具下载和设置该配置的应用程序。

    您可以将“配置服务器”替换为 HTTP 服务器、Git 存储库、Vault 服务器、CredHub、数据库,或者任何您可以持久存储数据的地方。

  3. 不推荐,但您也可以使用应用程序推送您的配置文件。这就像将它包含在您推送的目录或存档中一样简单。这具有将您的配置耦合到您推送的应用程序位的明显缺点。根据您的工作地点、您必须遵守的政策以及您使用的工具,这可能重要也可能无关紧要。

您可能还可以使用其他变体。在应用程序启动时或通过 .profile 脚本在应用程序中加载文件非常灵活。