kubernetes helm golang 客户端示例

Meh*_*van 9 go kubernetes kubernetes-helm

我想在 kubernetes 上创建一个服务来管理集群上的舵图。它从私有图表存储库安装图表。由于我没有找到任何关于如何使用 helm 客户端 api 的文档,我正在寻找一些示例或指南来在 helm 客户端之上创建服务。

tur*_*enh 13

对于 HELM3

正如其他答案所指出的那样,使用 Helm 2,您需要与使事情复杂化的分蘖交谈。

Helm 3 更干净,因为tiller 被删除了,并且 helm 客户端直接与 Kubernetes API Server 通信。

以下是使用 helm3 以编程方式安装 helm chart 的示例代码:

package main

import (
    "fmt"
    "os"

    "helm.sh/helm/v3/pkg/action"
    "helm.sh/helm/v3/pkg/chart/loader"
    "helm.sh/helm/v3/pkg/kube"
    _ "k8s.io/client-go/plugin/pkg/client/auth"
)

func main() {
    chartPath := "/tmp/my-chart-0.1.0.tgz"
    chart, err := loader.Load(chartPath)
    if err != nil {
        panic(err)
    }

    kubeconfigPath := "/tmp/my-kubeconfig"
    releaseName := "my-release"
    releaseNamespace := "default"
    actionConfig := new(action.Configuration)
    if err := actionConfig.Init(kube.GetConfig(kubeconfigPath, "", releaseNamespace), releaseNamespace, os.Getenv("HELM_DRIVER"), func(format string, v ...interface{}) {
        fmt.Sprintf(format, v)
    }); err != nil {
        panic(err)
    }

    iCli := action.NewInstall(actionConfig)
    iCli.Namespace = releaseNamespace
    iCli.ReleaseName = releaseName
    rel, err := iCli.Run(chart, nil)
    if err != nil {
        panic(err)
    }
    fmt.Println("Successfully installed release: ", rel.Name)
}
Run Code Online (Sandbox Code Playgroud)


小智 5

因为我花了一些时间才让它工作,所以这里是一个用于列出版本名称的最小示例(没有错误处理,留下有关 kube 配置的详细信息,...):

package main

import (
  "k8s.io/client-go/kubernetes"
  "k8s.io/helm/pkg/helm"
  "k8s.io/helm/pkg/helm/portforwarder"
)

func main() {
  // omit getting kubeConfig, see: https://github.com/kubernetes/client-go/tree/master/examples

  // get kubernetes client
  client, _ := kubernetes.NewForConfig(kubeConfig)

  // port forward tiller
  tillerTunnel, _ := portforwarder.New("kube-system", client, config)

  // new helm client
  helmClient := helm.NewClient(helm.Host(host))

  // list/print releases
  resp, _ := helmClient.ListReleases()
  for _, release := range resp.Releases {
    fmt.Println(release.GetName())
  }
}
Run Code Online (Sandbox Code Playgroud)