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

4.2 Helm Install Server

前面介绍了Client端的实现,下面介绍Server端也就是Tiller端的具体实现。客户端通过grpc调用了服务端的InstallRelease函数,下面概览该函数。


func (s *ReleaseServer) InstallRelease(c ctx.Context,req *services.Install
ReleaseRequest) (*services.InstallReleaseResponse,error) {
  s.Log("preparing install for %s",req.Name)
  rel, err:=s.prepareRelease(req)
  if err!=nil {
    s.Log("failed install prepare step:%s",err)
    res:=&services.InstallReleaseResponse{Release:rel}

    // 如果是测试场景,这里就仅返回渲染失败的错误信息
    if req.DryRun && strings.HasPrefix(err.Error(), "YAML parse error") {
      err = fmt.Errorf("%s\n%s", err, rel.Manifest)
    }
    return res, err
  }

  s.Log("performing install for %s", req.Name)
  res, err := s.performRelease(rel, req)
  if err != nil {
    s.Log("failed install perform step: %s", err)
  }
  return res, err
}

·针对客户端传递过来的信息做准备,主要检查是否重名,然后对传递过来的各个参数和values.yaml进行渲染,然后拼接出Release对象。

·performRelease是真正进行Release安装的函数,下面进行详细介绍。