【问题标题】:Go install chart and check if app is up and running去安装图表并检查应用程序是否启动并运行
【发布时间】:2021-06-06 05:50:41
【问题描述】:

我有以下有效的代码,我能够在目标集群中创建一个掌舵图。 当您安装一些图表直到应用程序(在图表内)可用之前,它需要时间, 如何检查通过 helm chart 安装的应用程序是否已启动并正在运行? 有没有办法用 helm 客户端来做(我们使用的是 helm 3.5.2)

tmpfile, err := ioutil.TempFile(kp, kcp)
if err != nil {
    log.Error(err, "error")
}

defer os.Remove(tmpfile.Name()) 

if _, err := tmpfile.Write(cfg); err != nil {
    return err
}
if err := tmpfile.Close(); err != nil {
    return err
}

kcfgFilePath := tmpfile.Name()
settings := cli.New()
ac := new(action.Configuration)
clientGetter := genericclioptions.NewConfigFlags(false)
clientGetter.KubeConfig = &kcfgFilePath



for _, chartInstallation := range charts {
    chart, err := loader.Load(chartInstallation.Path)
    if err != nil {
        return err
    }

    releaseName := releaseName + "-" + chartInstallation.Name
    if err := ac.Init(clientGetter, settings.Namespace(), os.Getenv("HELM_DRIVER"), func(format string, v ...interface{}) {
        
    }); err != nil {
        return err
    }
    releasePresent := true
    statusAction := action.NewStatus(ac)
    status, err := statusAction.Run(releaseName)
    if err != nil {
        if strings.Contains(err.Error(), driver.ErrReleaseNotFound.Error()) {
            releasePresent = false
        } else {
            return err
        }
    }

    if !releasePresent {
        // install chart
        installAction := action.NewInstall(ac)
        installAction.CreateNamespace = true
        installAction.Namespace = chartInstallation.Namespace
        installAction.ReleaseName = releaseName

        _, err := installAction.Run(chart, nil)
        if err != nil {
            return err
        }
        log.Info(“chart installed: ", "releaseName", releaseName)
    }

    if status != nil {
        if releasePresent && status.Info.Status.String() == release.StatusFailed.String() { 
            upgradeAction := action.NewUpgrade(ac)
            upgradeAction.Wait = true
            upgradeAction.ReuseValues = false
            upgradeAction.Recreate = false
            _, err := upgradeAction.Run(releaseName, chart, nil)
            if err != nil {
                return err
            }
        }
    }

【问题讨论】:

    标签: go kubernetes kubernetes-helm


    【解决方案1】:

    您需要使用--wait flaghelm install(或upgrade):

    --wait:等到所有 Pod 都处于就绪状态,PVC 被绑定,Deployment 有最少(期望减去 maxUnavailable)Pod 处于就绪状态 state 和 Services 有一个 IP 地址(如果是 LoadBalancer,还有 Ingress) 在将发布标记为成功之前。它将等待只要 --timeout [...]

    确保您的 pod 有 Liveness and Readiness 检查。使用--wait,只有在这些检查通过后,发布才会成功返回。

    【讨论】:

    • 非常感谢,我没有在命令行中使用 helm,是否可以通过代码?
    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 2010-10-06
    • 2010-11-03
    • 2021-12-07
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多