服务发布流程说明

helm包管理

由于tars服务使用自定义CRD来描述(tserver), 通常情况你需要熟悉tserver等资源描述的写法(../install/tarscontroller/crds), 根据tars服务的应用和名称, 实现yaml文件, 才能发布到K8S平台上.

但是这样操作起来比较麻烦, 为了方便tars服务的发布, 提供了一套使用helm发布tars服务机制, 方便使用者快速发布tars服务. 你可以把这套方案和内网gitlab结合完成自动的CI/CD.

helm的使用和说明请自己查询相关的文档.

基本说明:

  • 每个TARS服务最终在正式环境以及对外输出时都是生成一个对应代码tag的helm包来完成部署.

  • 框架提供了一个基础的helm libary 以及 tars服务的helm模板(helm-template目录), 使用它们你可以快速生成一个tars服务的helm包.

  • 具体每个tars业务服务的helm包是需要你自己生成的, 官方提供了多个脚本帮你完成 镜像制作/helm包制作/发布K8S 的过程

  • 自动镜像制作的脚本 exec-build.sh, 它完成了镜像的制作和推送

  • Helm包制作脚本 exec-helm.sh, 来帮助你快速生成helm

  • 使用Helm发布到K8S exec-deploy.sh, 发布镜像到K8S中

  • 服务制作镜像以及发布到K8S中, 每个服务都需要有一个values.yaml来描述服务基本信息, 参见后续文档

values.yaml

每个TARS服务都需要对应一个values.yaml文件, 这个文件在helm包模板中(helm-template目录)是不存在的, 这个文件通常跟随服务的源码, 在服务自动构建过程中, 传递给exec-deploy.sh脚本, 完成helm包的制作.

这个文件是一个固定格式, 实例如下:

说明:

  • tars-image-secret这个私有仓库的secret, 是你在K8S上部署TARS框架上之前, 创建的仓库secret, 以便k8s从你的仓库获取镜像

  • repo.id是自动构建时exec-helm.sh填充的

  • repo.image不能为空, 指向镜像地址且不带TAG, 自动构建时会在后面添加TAG

  • subtype: 表示服务的类型(tars/normal), tars:表示是tars服务生成的镜像, normal:表示普通的镜像, 比如mysql等

如何映射宿主机HostPath

部分服务由于需要涉及到本地存储, 需要将宿主机目录映射到, values.yaml采用如下方式(注意参考mounts这段):

以上示例中, 给出三种mounts的方式:

  • 使用HostPath去mount宿主机的目录, 这种情况下如果漂移了就比较麻烦

  • 通过pvc申请空间(这种情况下, 需要提前配置好pv)

  • 使用LocalPV来mount宿主机目录, 这种情况下pod不再会漂移到其他节点请参考LocalPV的说明文档

  • 使用LocalPV时, 如果pod内部权限不是root的, 你可以指定git/mode/uid来控制权限

如何配置节点绑定

在web平台,可以将应用绑定到某些节点上, 但是如果想指定某个服务绑定, 就需要需要用LabelMatch的能力, 可以直接在values.yaml中添加LabelMatch来实现, 参考y以下示例(注意LabelMatch段):

LabelMatch的匹配说明如下:

  • key: 节点的标签, 可以提前自己给node加标签

  • operator: In, NotIn, Exists, DoesNotExist, Gt, Lt

  • values: 匹配值

  • 如上labelMatch的匹配条件是个数组, 是与的关系, 即需要都满足才匹配

Last updated

Was this helpful?