介绍
Helm 的 Go SDK 使自定义软件能够利用 Helm charts 和 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/chart, pkg/chartutil: 用于加载和操作 charts 的方法和辅助函数
- 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
也就是说,破坏性更改只会在主要版本中进行。