首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从群集中运行helm3客户端

从群集中运行helm3客户端
EN

Stack Overflow用户
提问于 2020-01-17 14:27:48
回答 2查看 619关注 0票数 3

如果代码是从集群内部运行的,则Helm3不提供任何创建action.Configuration结构的方法。

我尝试过构建自己的通用标志:

代码语言:javascript
复制
config, err := rest.InClusterConfig()
if err != nil {
    panic(err)
}
insecure := false

genericConfigFlag := &genericclioptions.ConfigFlags{
    Timeout: stringptr("0"),
    Insecure: &insecure,
    APIServer: stringptr(config.Host),
    CAFile: stringptr(config.CAFile),
    BearerToken: stringptr(config.BearerToken),
    ImpersonateGroup: &[]string{},
    Namespace: stringptr(namespace),
}

actionConfig := &action.Configuration{
    RESTClientGetter: genericConfigFlag,
    KubeClient: kube.New(genericConfigFlag),
    Log: log.Infof,
}

不幸的是,这会导致稍后运行action.NewList(actionConfig).Run()时出现SIGSEGV错误。

在Kubernetes集群中为Helm3定义操作配置是正确的方式吗?

EN

回答 2

Stack Overflow用户

发布于 2020-04-28 17:27:55

这就是我所做的,并且对我来说工作得很好(使用Helm3.2.0级别的sdk代码):导入

代码语言:javascript
复制
import (
    "log"

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

    "k8s.io/cli-runtime/pkg/genericclioptions"
    "k8s.io/client-go/rest"
)

ActionConfig

代码语言:javascript
复制
func getActionConfig(namespace string) (*action.Configuration, error) {
    actionConfig := new(action.Configuration)
    var kubeConfig *genericclioptions.ConfigFlags
    // Create the rest config instance with ServiceAccount values loaded in them
    config, err := rest.InClusterConfig()
    if err != nil {
        return nil, err
    }
    // Create the ConfigFlags struct instance with initialized values from ServiceAccount
    kubeConfig = genericclioptions.NewConfigFlags(false)
    kubeConfig.APIServer = &config.Host
    kubeConfig.BearerToken = &config.BearerToken
    kubeConfig.CAFile = &config.CAFile
    kubeConfig.Namespace = &namespace
    if err := actionConfig.Init(kubeConfig, namespace, os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
        return nil, err
    }
    return actionConfig, nil
}

使用

代码语言:javascript
复制
actionConfig, kubeConfigFileFullPath, err := getActionConfig(namespace)
listAction := action.NewList(actionConfig)
releases, err := listAction.Run()
if err != nil {
    log.Println(err)
}
for _, release := range releases {
    log.Println("Release: " + release.Name + " Status: " + release.Info.Status.String())
}

除了actionConfig的初始化之外,它与您最初所做的没有太大的不同。也可能是新版本修复了一些问题。如果这对你有效,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2020-01-17 20:01:11

要在集群内运行helm3,您需要修改源代码。Here是函数:

代码语言:javascript
复制
func (c *Configuration) KubernetesClientSet() (kubernetes.Interface, error) {
    conf, err := c.RESTClientGetter.ToRESTConfig()
    if err != nil {
        return nil, errors.Wrap(err, "unable to generate config for kubernetes client")
    }

    return kubernetes.NewForConfig(conf)
}

这一行conf, err := c.RESTClientGetter.ToRESTConfig()

更改为conf, err := rest.InClusterConfig()并编译代码。

您还可以尝试修改代码,使生成的二进制文件是通用的,并且可以在集群外运行,也可以在集群内运行。

让我知道它是否有帮助,如果它解决了你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59782217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档