当前位置: 首页 > 知识库问答 >
问题:

如何在没有单独的环境变量系统的情况下从Helm本地获取值?

巫马阳飙
2023-03-14

我有一个使用Helm和Kubernetes部署的Python应用程序。我想从main.py中取出硬编码变量,并使它们在helm中可配置。问题是,如果我将它们从main.py中取出,那么我就失去了使用python3main.py运行代码的能力。那么我就失去了快速测试和迭代的能力,因为我需要为3-4个地方的每个参数维护两个单独的系统。

HOST = "http://host" 
PORT = 1234
if __name__ == '__main__':
    connect_to_server(HOST, PORT)
host: "http://host"
port: "1234"

使用字符串作为环境变量integer,如Helm文档所示。

env:
  - name: HOST
    value: {{ required "host is required!" .Values.host | quote }}
  - name: PORT
    value: {{ required "port is required!" .Values.port | quote }}

if __name__ == '__main__':
    try:
        HOST = os.environ['HOST']
        PORT = int(os.environ['PORT'])
        connect_to_server(HOST, PORT)
    except IndexError as e:
        print("Unable to run app! No env vars defined outside Helm!")
        raise e

如果我保持上面的设置不变,当我执行python main.py时,它将不会运行。如果我想要使用普通的旧python3main.py运行它,那么我需要建立一个完全独立的并行系统来本地管理我的环境变量。这并不理想,而且感觉像是一个超级痛苦的管理。我希望能够继续在本地快速测试事情,而不需要在整个应用程序中为环境变量添加一堆try/catch异常。我知道我可以通过各种方式导入env vars,但我不想用相同的信息维护两个不同的系统。我如何在Helm图表中添加env变量,同时在本地的Python应用程序中仍然灵活?有没有办法导入我的本地values.yaml并将它们设置为与cronjob.yaml(即HOST)中同名的环境变量?或者,对于这个用例,还有其他我不知道的解决方案吗?

共有1个答案

李辉
2023-03-14

您可以采取的一个选项是继续允许环境变量,但在未设置环境变量的情况下提供默认值。可以使用get()方法轻松完成此操作:

if __name__ == '__main__':
    HOST = os.environ.get('HOST', 'http://host')
    PORT = int(os.environ.get('PORT', '1234'))
    connect_to_server(HOST, PORT)
 类似资料:
  • 本文向大家介绍PowerShell获取系统环境变量的方法,包括了PowerShell获取系统环境变量的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍在PowerShell中,如何获取环境变量的值。可以列出所有的环境变量,也可以指定通过变量名称来获取环境变量的值。 在开发过程中,经常需要用到环境变量(比如当前计算机名、登录的用户名、Path环境变量等),那么在PowerShell中如何知道有

  • 有没有一种简单的方法可以以灵活的方式向Kubernetes中的几个容器提供环境变量,无论是通过Helm还是另一种工具? 我目前正在考虑使用Kustomize来完成Helm填写模板后的最后一英里更改,但我却一直在设置Kustomize补丁。在我的场景中,环境变量由Helm在ConfigMap中填写。我想添加一个字段来读取ConfigMap并将给定的环境变量添加到容器中。我想通过kustoMize将e

  • 问题内容: 如何在应用程序上下文中读取系统环境变量? 我想要类似的东西: 要么 取决于环境。 我的应用程序上下文中可以有这样的东西吗? 根据系统环境变量设置实际值的地方 我正在使用Spring 3.0 问题答案: 你接近:o)Spring 3.0添加了Spring Expression Language。你可以使用 结合应该可以解决你的问题。 还请注意@yiling的评论: 为了访问系统环境变量(

  • 我使用了,但对于当前的问题,它没有帮助。我希望能够创建特定于项目的包: 我尝试了多种方法,但如何获得

  • 问题内容: 这个问题已经在这里有了答案 : 如何在没有换行符或空格的情况下进行打印? (22个答案) 3年前关闭。 我想知道在打印某些内容时如何删除其他空格。 就像我这样做时: 输出将是: 但是我想要: 有什么办法吗? 问题答案: 如果您不需要空格,请不要使用。使用字符串串联或格式化。 级联: 格式: 后者要灵活得多,请参见方法文档和“ 格式化字符串语法” 部分 。 您还将遇到较早的格式化样式:

  • 当正在构建映像路径时,这就是我想要构建映像路径的方式,其中有docker注册表地址,我想要从ConfigMap获取它。 有没有关于如何使用头盔来解决这个问题的建议?谢谢