openshift - 如何管理 Openshift 中的设置?
问题描述
在存储库的源代码中找不到 profile.properties 文件?
是否可以在 openshift 中使用环境变量?如果是,如何-Dkeycloak.profile.feature.scripts=enabled
在 Openshift 环境中设置?
解决方案
环境变量是 Openshift 中的一流概念。有很多方法可以使用它们:
- 您可以直接在 BuildConfig 上设置它们以将它们“烘焙到”您的容器中。这不是最佳实践,因为当您在环境中移动它们时它们不会改变,但可能需要配置您的构建或设置不会改变的东西(例如,设置 node.js 使用的端口号以匹配官方节点.js 图像,“PORT=8080”)
- 您可以将这些变量放入 ConfigMap 或 Secret 配置对象中,以便在许多类似的 BuildConfig 之间轻松共享它们
- 您可以直接在 DeploymentConfig 上设置它们,以便为该部署启动的每个 pod 设置它们。这是设置应用程序特定环境变量的一种相当常见的方法。将其用于在多个应用程序之间共享的设置不是一个好主意,因为您必须在许多地方更改公共变量。
- 您可以在 ConfigMap 和 Secrets 中设置它们并将它们应用到多个 DeploymentConfig。这样您就可以在一个地方管理它们。
经常看到开发人员使用一个在 git.env
中命名的文件,而.gitignore
不是在 git 中。过去,我编写了脚本将其加载到 openshift 中的 Secret 中,然后用于envFrom
在部署中设置该密钥。然后有一个.env.staging
and .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 服务。
推荐阅读
- python - Plotly:如何创建一个没有标题的表格?
- javascript - 节点服务器:由于不允许的 MIME 类型(“text/html”),加载模块被阻止
- angular - 无法读取未定义的“管道”
- javascript - 在网页中的 .pdf 或图像文件上绘制点
- python - 如何修复太多 If return 使代码过于复杂
- c# - 我如何将 someting.split() 的一部分存储到它自己的数组中?
- ruby-on-rails - `rake assets:precompile` 在生产中时出现`babel-loader` 依赖错误
- aws-lambda - 编排 GCP 云功能
- haskell - 给出一棵树,其中每个节点的值包含子节点的总和
- flutter - 使用不包含 MainBloc 类型的 Bloc 的上下文调用 BlocProvider.of()