首页 > 解决方案 > 如何管理 Openshift 中的设置?

问题描述

在存储库的源代码中找不到 profile.properties 文件?

是否可以在 openshift 中使用环境变量?如果是,如何-Dkeycloak.profile.feature.scripts=enabled在 Openshift 环境中设置?

标签: openshiftkeycloak

解决方案


环境变量是 Openshift 中的一流概念。有很多方法可以使用它们:

  1. 您可以直接在 BuildConfig 上设置它们以将它们“烘焙到”您的容器中。这不是最佳实践,因为当您在环境中移动它们时它们不会改变,但可能需要配置您的构建或设置不会改变的东西(例如,设置 node.js 使用的端口号以匹配官方节点.js 图像,“PORT=8080”)
  2. 您可以将这些变量放入 ConfigMap 或 Secret 配置对象中,以便在许多类似的 BuildConfig 之间轻松共享它们
  3. 您可以直接在 DeploymentConfig 上设置它们,以便为该部署启动的每个 pod 设置它们。这是设置应用程序特定环境变量的一种相当常见的方法。将其用于在多个应用程序之间共享的设置不是一个好主意,因为您必须在许多地方更改公共变量。
  4. 您可以在 ConfigMap 和 Secrets 中设置它们并将它们应用到多个 DeploymentConfig。这样您就可以在一个地方管理它们。

经常看到开发人员使用一个在 git.env中命名的文件,而.gitignore不是在 git 中。过去,我编写了脚本将其加载到 openshift 中的 Secret 中,然后用于envFrom在部署中设置该密钥。然后有一个.env.stagingand .env.live,我们git secret加密到git中。

文件的问题.env在于它们往往会变得凌乱,并且在一段时间后会出现未使用的垃圾。所以我们将文件分成一个 Secret 作为数据库凭据,每个 api creds 的单独 Secrets,一个用于应用程序特定设置的 ConfigMap。用于共享设置的 ConfigMap。

这些天来,我们使用 Helmfile 从基于 git webhooks 的 git 加载我们的所有配置。所有配置都是 git repo 中的 yaml(使用秘密 yaml 加密)。如果您将更改合并到 config git repo,则 webhook 处理程序会解密配置并运行 Helmfile 以更新 openshift 中的设置。我正在开源所有内容,包括使用聊天机器人在GitHub 上管理发布(可选)

我还应该说,openshift 会自动创建许多环境变量来帮助您配置应用程序。在每个项目中,每个 pod 中都设置了许多变量,告诉您在该项目中设置的所有服务的详细信息。

Openshift 还为您的服务设置内部 dns 条目。这意味着如果 App A 使用 App B,您不必自己为 A 配置 B 的 URL。相反,B 会有一个 dns 条目,您可以使用 openshift 在 A 上设置的 env var 来计算要使用的 dns 条目和要使用的端口号(例如,dns 条目包括项目名称,并且会自动设置为 env var通过 openshift)。因此,我们的应用程序可以使用该技术找到在同一项目中运行的 redis 服务。


推荐阅读