我有一个 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
. 内的工厂遇到了一些问题