如何从集群中运行的 pod 安装带有 Go Helm-SDK 的 Helm chart?

问题描述 投票:0回答:0

我有一个 Go 项目在 Kubernetes 集群内的 Pod 上的容器中运行。我在该容器中也有一个本地 Helm Chart 目录,我想使用 Helm-SDK 将它安装到集群上。

我之前使用过 Helm-SDK 来安装 Helm 图表,但在那种情况下,代码在集群外部运行,我能够提供我的 kubeconfig。
在 Kubernetes 的 client-go 包中存在创建 Clientset 时使用 InClusterConfig 的选项,而不是使用 kubeconfig 文件创建它,特别是当代码在集群内的 pod 上运行时。
遗憾的是,在阅读了 helm 文档以及一些代码之后,我无法找到与 Kubernetes 客户端类似的 InCluster 选项。

有没有人知道我该怎么做,或者这是否可能?
应该是因为 Helm-SDK 也在后台运行 Kubernetes 客户端。


这是我通过 SDK 安装 Helm chart 的常用方法。
只需将路径传递给我的 Kubeconfig。

func InstallChart(dir, release, namespace string) error {
    chart, err := loader.LoadDir(dir)
    if err != nil {
        return err
    }

    actionConfig := new(action.Configuration)
    if err := actionConfig.Init(
        kube.GetConfig(
            "/path/to/kubeconfig",
            "",
            namespace,
        ),
        namespace,
        os.Getenv("HELM_DRIVER"),
        log.Printf,
    ); err != nil {
        return err
    }

    client := action.NewInstall(actionConfig)
    if _, err := client.Run(chart, nil); err != nil {
        return err
    }

    return nil
}


当我查看文档时,我看到

kube.Client
看起来像这样

type Client struct {
    Factory Factory
    Log     func(string, ...interface{})
    // Namespace allows to bypass the kubeconfig file for the choice of the namespace
    Namespace string

    kubeClient *kubernetes.Clientset
}

我在想我可能只能从结构中手动创建我自己的客户端,并将

kubeClient
字段设置为我从Kubernetes客户端获得的客户端集

restConfig, _ := rest.InClusterConfig()
clientset; _ := kubernetes.NewForConfig(restConfig)

我尝试这样做,但只是在

kube.Client
.

内的工厂遇到了一些问题
go kubernetes kubernetes-helm kubernetes-go-client
© www.soinside.com 2019 - 2024. All rights reserved.