在Helm Chart + Github Actions + Github Secrets中管理环境变量/配置

494次阅读
没有评论

问题描述

在开发中遇到了一个问题:他的Python Rest API在启动时需要设置多个配置变量,这些变量是从主机机器的环境变量中读取的。而他们的生产环境部署在一个使用Github Actions和Helm Chart的Kubernetes集群中。问题在于,每当添加新的配置变量时,他都需要在三个地方进行修改:
1. 实际的Python应用程序代码中。
2. Helm Chart的values.yaml文件中。
3. 仓库的Github Secrets中,以便在部署过程中使用密钥的值来设置values.yaml文件中的值。

如何管理这些配置,以减少错误的可能性?因为现在很有可能有人会忘记在上述3个地方中的任何一个添加新的配置,从而破坏部署流程。

解决方案

为了管理环境变量和配置,确保配置变更不会影响部署流程,可以采用以下方法。

1. 将环境变量移到.env文件中

将所有的配置变量移到一个.env文件中,并在Python应用程序中使用工具如python-dotenv来读取这些变量。这样可以将.env文件作为唯一的真实数据源。根据文件的敏感程度,可以创建一个版本控制的.env文件(不包含敏感信息),以及一个.env.local文件(在.gitignore中),用于存放敏感数据。

2. 使用Pre-commit Hook和GitHub CLI

借助Pre-commit Hook和GitHub CLI,可以实现自动化管理配置变量的过程。

步骤:

  1. 将配置变量从.env文件中提取,并使用工具如yq将这些值更新到values.yaml文件中。
  2. 使用GitHub CLI设置GitHub Secrets,也可以使用.env文件中的值来设置这些秘密。

优势:

  • Pre-commit Hook会在提交代码之前运行脚本,确保每次提交都会更新values.yaml文件。
  • GitHub CLI可以自动设置GitHub Secrets,确保部署时使用的值是正确的。

可以将用于Pre-commit Hook的脚本放在bin/目录下,这样可以随时运行,而不必每次都提交代码。

总结

通过将配置变量集中管理,使用Pre-commit Hook和GitHub CLI自动化更新,可以显著减少因遗漏或错误配置而导致部署问题的风险。这种方法能够简化配置管理流程,提高部署的稳定性和可靠性。

请注意在操作过程中谨慎处理敏感信息,并备份重要数据。

注意:本方案提供的解决方案假设你熟悉使用Helm、GitHub Actions以及相关工具的基本操作。在操作之前,请确保你已经充分理解并测试所述步骤。

正文完