【问题标题】:Any way to pull remote default values in a Helm chart?有什么方法可以在 Helm 图表中提取远程默认值?
【发布时间】:2019-08-16 02:20:46
【问题描述】:

我正在编写一个Helmchart 用于自定义应用程序,我们需要在我的组织内的不同环境中启动它。这个应用程序在 Kubernetes 中有一些部分(这就是我编写 Helm 图表的原因)和 K8S 之外的其他部分,更具体地说是 AWS 中的各种资源,我用Terraform 编写了代码。

其中一个资源是Lambda function,我在前面加上API Gateway。这意味着当我在新环境中运行 Terraform 时,它会创建 Lambda 函数并将 API 网关端点附加到它,并带有 AWS 为该端点生成的全新 URL。我让 Terraform 将该 URL 记录为 output variable,此外,我配置了 non-local backend,以便 Terraform 远程保存其状态。

我想做的是直接从 Helm 将它们绑定在一起。我想要一种运行 Terraform 的方法,以便它启动我的 Lambda,并通过这样做将生成的 API Gateway URL 保存到其远程状态文件。然后,当我安装我的 Helm 图表时,我希望 Helm 足够聪明,能够自动从 Terraform 远程状态文件中提取它需要的 API 网关端点的 URL,用作我的图表中的变量。

目前,我要么必须复制和粘贴,要么使用 Bash。我可以用一个很像这样的 bash 脚本来做这件事:

#!/bin/bash
terraform init
terraform plan -out=tfplan.out
terraform apply tfplan.out
export WEBHOOK_URL=$(terraform output webhook_url)
helm install ./mychart --set webhook.url="${WEBHOOK_URL}"

但使用 Bash 脚本来完成此操作并不理想。它要求我在与 Terraform 文件相同的目录中运行它(因为必须从该目录调用输出命令),并且它不考虑我们可能使用的不同身份验证方法。此外,团队中的其他开发人员可能希望直接运行 Terraform 和 Helm,而不必依赖自定义 bash 脚本来为他们​​执行此操作。由于这个 bash 脚本实际上充当了“操作员”,而且 Helm 本身已经是一种操作员,我想知道是否有某种方法可以完全在 Helm 中完成?

Terraform 远程状态文件最终只是 JSON 文件。我碰巧正在使用 Consul 后端,但我可以轻松地使用 S3 后端或任何其他后端;在一天结束时,Terraform 将在某处将其状态显示为 JSON 文件,Helm 可以在其中读取它并挑选出特定的输出值。除了我不确定 Helm 是否强大到可以做到这一点。查看他们的文档,除了编写普通的 values.yaml 模板来指定默认值之外,我并没有真正看到任何东西。 Helm 是否有任何内置的函数来围绕外部 JSON 发出 REST 请求?这是可以做到的吗?

【问题讨论】:

  • 我建议将 terraform output 结果保存到某个位置,例如 s3 对象,以便开发人员可以与 helm 共享一个简单的 bash 包装器,读取文件,获取 webhook_url。跨度>
  • 不过,这正是我所说的我试图避免的。我要问的是 Helm 中是否有任何机制可以让我避免需要 Bash 包装器?
  • bash 一点都没错

标签: bash terraform kubernetes-helm


【解决方案1】:

Helm 没有任何搜索文件/模板的功能。

它需要你确切地告诉它要注入什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多