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

2.1.1 Chart.yaml

Chart.yaml文件是每个Chart必须包含的,Chart文件主要有如下属性。

·apiVersion:指定Chart的apiVersion,目前默认都是v1(必选项)。

·name:Chart的名字(必选项)。

·version:一个符合SemVer规范的版本号。这里的版本号就是Chart自己的版本号,比如第一个版本可以设置为0.0.1,以后每次有变更都可以加1,通过这样的方式来保证每个版本的可追述性和版本一致性(必选项)。

·kubeVersion:设置Chart需要对应的Kubernetes版本号,可以是一个表达式,比如指定版本≥1.15.0(可选项)。

·description:描述Chart的功能,一般是介绍该Chart的功能和使用方式(可选项)。

·keywords:关键词,这个属性主要用来表明该Chart属于什么类型,方便根据关键字搜索时找到该Chart,一般会写Chart所属的大类(可选项)。

·home:如果该项目有自己的介绍页或网站,则可以把链接放到这个位置(可选项)。

·sources:如果该Chart的源代码开源,可以把开源代码地址放到这个位置。同样,如果该Chart使用了其他的开源项目,也可以将其列在这里(可选项)。

·maintainers:在这里写入维护者的名称和邮箱,主要目的是便于日后联系该Chart的维护者。在Helm中,还会通过这个字段来指定对应的GitHub账号的review权限(可选项)。

·engine:指定模板的渲染引擎,目前只能默认gotpl(可选项)。

·icon:给Chart设置一个图标,这样在UI上展示时就会显示出对应的图标(可选项)。

·appVersion:区别于Chart version,appVersion版本号主要用来指定Chart内应用的版本号(可选项)。

·deprecated:指明该Chart是否已经废弃(可选项)。

·TillerVersion:指定TillerVersion版本号,这个和前面的指定kubeVersion规范相同(可选项)。

如果你熟悉Helm 1版本的Chart.yaml,你会发现以前的dependencies字段已经被移除了,这是因为目前所有的依赖Chart都被放入Charts/目录。

1.Chart Version

每个Chart都有一个版本号,这个版本号必须符合semver规范,并最终添加到压缩包名字中。举个例子,nginxChart指定版本号version:1.2.3,那么这个安装包被打包后的文件名为nginx-1.2.3.tgz。我们也可以指定一些比较复杂的版本号,比如带上git提交版本号version:1.2.3-alpha.1+ef365,但是不允许使用不符合semver规范的名字。

version字段在很多地方都会用到,包括Helm Client和Tiller。helm package是将Chart文件夹打包成压缩包的命令,这个命令会读取version字段,然后加上文件夹名字形成最终的压缩包名称。如果Chart.yaml里面缺少version这个字段,在打包的时候就会直接报错。

2.appVersion

前面介绍过,appVersion和version字段是没有关系的。appVersion字段用来指定应用的版本号。比如Worpdress的版本号是4.0,那么appVersion就可以指定为4.0,但是ChartVersion第一个版本提交时,版本号可以是0.0.1,这个版本号不影响最终的打包名称和结果。

3.Deprecating Chart

我们一般在Chart仓库中存放Chart文件,为了保证版本的稳定性,有时候需要用deprecated字段声明一些版本已经废弃。如果一个Chart的latest版本被声明为废弃,那么这整个Chart的所有版本都会被认为是废弃的。这个Chart的名字稍后就能被其他新的Chart利用。一般社区废弃一个Chart的流程如下:

·更新Chart.yaml表明该Chart已经废弃,并且增加一个version版本号;

·发布新版本的Chart到仓库中,现在默认是GitHub;

·从GitHub中把老的Chart删除。