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

1.4.1 Helm Client

Helm Client的大部分工作是和Chart打交道。当用户需要从零开始构建自己的Chart时,Helm Client可以帮助用户简单地创建一个脚手架模板,方便用户从这个初始模板开始修改,逐步将该模板变成自己的应用Chart。这种方式能极大降低用户自己构建Chart的复杂度。实现这个功能的命令是helm create,下面我们以helm create foo为例进行讲解。运行该命令后,Helm Client会为我们创建一个如下结构的文件夹。


foo/
  |
  |- .helmignore   # Contains patterns to ignore when packaging Helm charts.
  |
  |- Chart.yaml    # Information about your Chart
  |
  |- values.yaml   # The default values for your templates
  |
  |- charts/       # Charts that this Chart depends on
  |
  |- templates/    # The template files

这样一个基本的Chart雏形就生成了,后文会详细介绍每个文件的使用方法与含义。

对于已经打包好的Chart文件夹,Helm Client也提供了helm package命令,以帮助用户将已经编辑完毕的Chart文件夹打包成.tgz压缩包。

Helm社区以及云厂商提供了很多已经打包好的Chart应用,Helm Client可以直接通过helm install命令把远程的Chart安装包下载到本地。

对于Chart存储,在1.3节我们提到了一个叫作Chartmuseum的项目,它能提供Chart存储和索引功能,推送以及查询远程存储的Chart的任务交给Helm Client来做。使用helm repo add命令可以很方便地将远程repo添加到本地,这样通过helm search命令就能搜索对应repo包含的Chart,寻找到对应的Chart名称后直接开始安装。当然,Helm Client还提供了很方便的插件功能,在安装了一些插件后,通过helm push命令还能更加便利地将打包好的Chart压缩包直接推送到远程仓库中。

Helm Client的另外一个重要功能就是渲染。Helm Client会根据用户在value.yaml文件中描述的key-value进行一一对应,将key值渲染到yaml文件中,形成一个Kubernetes能够识别的全量yaml,并提交给Server端。由于Helm Server端是部署在Kubernetes集群内的,所以Client与Server之间会通过Kubernetes apiServer建立一个tunnel达到通信的目的,同时它们之间用gRPC协议来传输数据。