【问题标题】:Openshift - Environment variable getting evaluated to hostnameOpenshift - 环境变量被评估为主机名
【发布时间】:2018-12-24 03:56:48
【问题描述】:

我想将一个环境变量传递给正在运行的容器的主机名。这就是我想做的事情

oc new-app -e DASHBOARD_PROTOCOL=http -e ADMIN_PASSWORD=abc@123 -e KEYCLOAK_URL=http://keycloak.openidp.svc:8080 -e KEYCLOAK_REALM=master -e DASHBOARD_HOSTNAME=$HOSTNAME -e GF_INSTALL_PLUGINS=grafana-simple-json-datasource,michaeldmoore-annunciator-panel,briangann-gauge-panel,savantly-heatmap-panel,briangann-datatable-panel grafana/grafana:5.2.1

如何确保 DASHBOARD_HOSTNAME 被评估为正在运行的容器映像的主机名值

【问题讨论】:

  • 使用自定义启动命令进行部署,您应该可以在此处设置DASHBOARD_HOSTNAME=$HOSTNAME,然后执行原始启动命令。

标签: openshift openshift-origin openshift-client-tools openshift-enterprise


【解决方案1】:

要从 pod 中获取主机名值,您可以使用 metadata.name。 按照例如:

  env:
    - name: HOSTNAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.name

【讨论】:

    【解决方案2】:

    创建应用程序后,您可以编辑部署配置 (oc edit dc/<deployment_config>) 或 patch it 以使用 Downward API 配置 DASHBOARD_HOSTNAME 环境变量。

    这可能是个人喜好,但尽管oc new-app 很方便,但我宁愿使用在代码仓库中签入和版本控制的 (declarative) 配置文件,而不是使用 imperative commands

    【讨论】:

    • 使用普通部署配置时$HOSTNAME的值将是pod的名称。当你扩展一个 pod 时,每个实例的名称显然不同,如果 pod 死亡并被替换,它会进一步改变。因此,事后更新部署配置将无济于事,尤其是因为更改部署配置的行为会导致新的部署,因此 pod 名称也会更改。
    • 执行oc new-app -e DASHBOARD_PROTOCOL=http ... grafana/grafana:5.2.1 将创建一些对象——一个图像流、服务......和一个名为“grafana”的 DeploymentConfig (dc),不是吗? dc 将包含来自oc new-app 命令的所有-e 环境变量。使用 Downward API 编辑/修补 dc 以设置 DASHBOARD_HOSTNAME env var(链接到答案中给出的文档)。然后,更改将应用​​于从该 dc 创建的任何新 pod。
    • 对不起,错过了提到向下 API 的特殊性。事后必须修补它并不方便,因此最好使用资源文件/模板来创建部署。
    • @GrahamDumpleton 没问题。是的 - 正如我在回答中提到的,与“命令式命令”相比,我更喜欢声明性配置文件(如 OpenShift 模板或资源文件)。
    猜你喜欢
    • 2020-11-17
    • 2021-08-28
    • 2011-07-04
    • 2016-10-31
    • 2016-08-27
    • 2020-11-16
    • 2010-10-14
    • 2020-07-12
    • 2010-09-24
    相关资源
    最近更新 更多