我有一个使用Helm和Kubernetes部署的Python应用程序。我想把硬编码的变量从主.py让他们在头盔里可以配置。问题是如果我把它们从主.py然后我就失去了用python3 main.py
运行代码的能力。然后我就失去了快速测试和迭代的能力,因为我需要在3-4个位置为每个参数维护两个独立的系统。你知道吗
main.py
在提取硬编码变量之前:HOST = "http://host"
PORT = 1234
if __name__ == '__main__':
connect_to_server(HOST, PORT)
host: "http://host"
port: "1234"
根据Helm docs,对环境变量integer使用字符串。你知道吗
env:
- name: HOST
value: {{ required "host is required!" .Values.host | quote }}
- name: PORT
value: {{ required "port is required!" .Values.port | quote }}
main.py
提取硬编码变量后::
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
时运行。如果我想用普通的旧的python3 main.py
运行它,那么我需要建立一个完全独立的并行系统来本地管理我的环境变量。这不太理想,而且管理起来很麻烦。我希望能够继续在本地快速测试,而不必在整个应用程序中为环境变量添加一堆try/catch异常。我知道我可以通过各种方式导入env变量,但是我不想用相同的信息维护两个不同的系统。如何在本地Python应用程序中灵活地添加Helm图表中的env变量?有没有办法导入我的本地values.yaml
并将它们设置为与中同名的环境变量cronjob.yaml文件(即主机)?或者对于这个用例有没有其他我不知道的解决方案?你知道吗
您可以选择的一个选项是继续允许环境变量,但在未设置环境变量的情况下提供默认值。使用
get()
方法可以很容易地做到这一点:相关问题 更多 >
编程相关推荐