云原生应用管理:原理与实践
上QQ阅读APP看书,第一时间看更新

4.1 helm install

Helm分为客户端和服务端(Tiller),下面先从客户端讲起。客户端是使用Golang编写的github.com/spf13/cobra命令行工具构建的架构。cobra是一个非常流行的命令行类库,很多使用Golang编写的命令行工具都是使用这个类库来编写的。

install的客户端命令初始代码在cmd/helm/install.go中。


RunE: func(cmd *cobra.Command, args []string) error {
    if err := checkArgsLength(len(args), "Chart name"); err != nil {
      return err
    }

    debug("Original Chart version: %q", inst.version)
    if inst.version == "" && inst.devel {
      debug("setting version to >0.0.0-0")
      inst.version = ">0.0.0-0"
    }

    cp, err := locateChartPath(inst.repoURL, inst.username, inst.password, args[0], inst.version, inst.verify, inst.keyring,
      inst.certFile, inst.keyFile, inst.caFile)
    if err != nil {
      return err
    }
    inst.ChartPath = cp
    inst.client = ensureHelmClient(inst.client)
    inst.wait = inst.wait || inst.atomic

    return inst.run()
  },

在RunE函数中,运行helm install命令会发生的动作如下所示。

·checkArgsLength检查传递参数的有效性,以及是否漏传参数。

·locateChartPath寻找Chart位置,如果是本地目录,则返回并寻找完全路径;如果是URL,则下载到指定路径后返回该路径名称。

·ensureHelmClient初始化Helm Client,用来与Tiller通信。

·inst.run()真正的业务逻辑开始了,分别检查Chart依赖等信息,然后给Tiller发送解压后的模板信息。

下面就其中的几个函数详细看一下具体操作。