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

4.1.7 返回Release状态信息

安装请求发送完毕后,我们应该记得helm install后会返回当前的Relase名称和Release包含的所有Kubernetes资源的当前状态。比如Deployment的部署状态,Pod的各种状态,等等。先回到func(i*installCmd)run(),来看一下发送install请求后,最后几步的行动。


// 获取返回的Release信息
rel := res.GetRelease()
if rel == nil {
  return nil
}

if outputFormat(i.output) == outputTable {
  i.printRelease(rel)
}

// 像install一样,向Tiller发送获取Release状态信息的请求
status, err := i.client.ReleaseStatus(rel.Name)
if err != nil {
  return prettyError(err)
}

return write(i.out, &statusWriter{status}, outputFormat(i.output)

·首先获取Relase信息,在上一步发送install请求后,Tiller的response信息内就已经含有了这些信息。

·i.client.ReleaseStatus和install一样,也是向Tiller发送请求,这个API的URL/hapi.services.Tiller.ReleaseService/GetReleaseStatus在后文的服务端实现中进行介绍。

以下对客户端流程进行总结(见图4-2)。

·提前使用kubectl port-forward功能打通宿主机与远程Tiller Pod的通信。

·checkArgsLength检查用户输入参数的合法性。

·对于远程地址,locateChartPath下载Chart到本地指定目录;对于本地地址,则直接加载。

·installCmd.run将用户命令行输入参数覆盖values.yaml信息,下载依赖的Chart,将Chart信息加载到内存中变成结构体信息。

·向Tiller发送install命令,将含有Chart所有信息的结构体发送出去。

·打印Tiller返回的Release信息。

·向Tiller发送获取Relase Status信息并且打印出来。

图4-2 客户端流程图