跳到主要内容
版本:3.19.0

介绍

Helm 的 Go SDK 使自定义软件能够利用 Helm chart 和 Helm 的功能来管理 Kubernetes 软件部署(事实上,Helm CLI 本质上就是这样一个工具!)。

目前,SDK 已在功能上与 Helm CLI 分离。SDK 可以(并且正在)被独立工具使用。Helm 项目已承诺为 SDK 提供 API 稳定性。值得注意的是,SDK 在将 CLI 和 SDK 分离的初始工作中仍有一些未完善之处,Helm 项目旨在随着时间的推移逐步改进。

完整的 API 文档可以在 https://pkg.go.dev/helm.sh/helm/v3 找到。

下面简要概述一些主要的包,并提供一个简单示例。更多示例和更完整的示例程序,请参阅示例部分。

主要包概览

  • pkg/action:包含执行 Helm 操作的主要"客户端"。这与 CLI 在底层使用的包相同。如果只需要从其他 Go 程序执行基本的 Helm 命令,可以使用这个包。
  • pkg/chartpkg/chartutil:用于加载和操作 chart 的方法和辅助函数。
  • pkg/cli 及其子包:包含标准 Helm 环境变量的所有处理程序,其子包包含输出和 values 文件处理。
  • pkg/release:定义 Release 对象和状态。

除了这些之外还有很多包,请查看文档以获取更多信息!

简单示例

这是使用 Go SDK 执行 helm list 的简单示例。更完整的示例请参阅示例部分。

package main

import (
"log"
"os"

"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/cli"
)

func main() {
settings := cli.New()

actionConfig := new(action.Configuration)
// 可以传递空字符串代替 settings.Namespace() 来列出所有命名空间
if err := actionConfig.Init(settings.RESTClientGetter(), settings.Namespace(), os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
log.Printf("%+v", err)
os.Exit(1)
}

client := action.NewList(actionConfig)
// 仅列出已部署的
client.Deployed = true
results, err := client.Run()
if err != nil {
log.Printf("%+v", err)
os.Exit(1)
}

for _, rel := range results {
log.Printf("%+v", rel)
}
}

兼容性

Helm SDK 明确遵循 Helm 向后兼容性保证:

https://github.com/helm/community/blob/main/hips/hip-0004.md

也就是说,破坏性更改只会在主要版本中进行。