Helm V3版本特性及差异化
Helm版本升级差异文档
CCE云引擎调用:
| 描述 | V2 | V3 |
|---|---|---|
| 请求方式 | grpc远程过程调用tiller提供的服务 | 使用Helm_v3版本官方提供的go语言sdk,封装提供restfulAPI服务 |
| 安装release | hapi.services.tiller.ReleaseServiceGrpc.ReleaseServiceBlockingStub#installRelease | POST /api/namespaces/:namespace/releases/:release?chart= |
| 更新release | hapi.services.tiller.ReleaseServiceGrpc.ReleaseServiceBlockingStub#updateRelease | PUT /api/namespaces/:namespace/releases/:release?chart= |
| 回滚release到上个版本 | hapi.services.tiller.ReleaseServiceGrpc.ReleaseServiceBlockingStub#rollbackRelease | PUT /api/namespaces/:namespace/releases/:release/versions/:reversion |
| 删除release | hapi.services.tiller.ReleaseServiceGrpc.ReleaseServiceBlockingStub#uninstallRelease | DELETE /api/namespaces/:namespace/releases/:release |
| 列举releases列表 | hapi.services.tiller.ReleaseServiceGrpc.ReleaseServiceBlockingStub#listReleases | GET /api/namespaces/:namespace/releases |
| 获取release的健康状态 | hapi.services.tiller.ReleaseServiceGrpc.ReleaseServiceBlockingStub#getReleaseStatus | GET /api/namespaces/:namespace/releases/:release |
| 获取release的详细信息 | hapi.services.tiller.ReleaseServiceGrpc.ReleaseServiceBlockingStub#getReleaseContent | GET /api/namespaces/:namespace/releases/:release |
| 根据Release名称获取历史信息 | hapi.services.tiller.ReleaseServiceGrpc.ReleaseServiceBlockingStub#getHistory | GET /api/namespaces/:namespace/releases/:release/histories |
Helm v3版本新增特性:
移除了tiller组件,支持Kubernetes的安全、 身份和授权特性,通过kubeconfig文件授权
helm v2版本通过
helm init命令,在k8s集群中安装一个叫tiller-deploy的容器,用于和集群交互。helm v3版本移除了tiller组件,也移除了helm init命令,默认通过~/.kube/config与集群进行交互,也就是说使用了与kubctl相同的上下文访问权限,若不在默认位置可通过–kubeconfig参数进行指定。移除了helm serve
helm serve出于开发目的,运行本地chart repository,用于托管本地 local repo 中的 Chart 信息。它作为一种开发工具并没有得到太多的认可,并且在设计上存在许多问题。不同的 namespace 可以使用相同的 Release Name
helm v2版本中release name存在tiller组件部署的命名空间下面,意味着一旦某个版本使用了一个名称,其他版本就不能使用相同的名称,即使它部署在不同的命名空间中。在 Helm 3 中,release 信息现在存储在与 release 本身相同的命名空间中,意味着 release name 是在租户下唯一。
简化模板对象
.Capabilities.Capabilities内置对象会在已经简化的渲染阶段生效。改进升级策略: 三路策略合并补丁
Helm 2 使用了一种双路策略合并补丁。在升级过程中,会对比最近一次的 chart manifest 和提出的 chart manifest (通过
helm upgrade提供)。升级会对比两个chart的不同来决定哪些更改会应用到 Kubernetes 资源中。 如果更改是集群外带的(比如通过kubectl edit),则不会被考虑。结果就是资源不会回滚到之前的状态: 因为Helm只考虑最后一次应用的chart manifest作为它的当前状态,如果chart状态没有更改,则资源的活动状态不会更改。现在Helm 3中,我们使用一种三路策略来合并补丁。Helm在生成一个补丁时会考虑之前老的manifest的活动状态。
使用
JSONSchema验证 charts 的 Values在charts目录下创建values.schema.json配置需要验证的helm command(helm [install | upgrade | lint]),方便验证用户设置的value是否合法
将
requirements.yaml合并到Chart.yamlChart依赖体系从 requirements.yaml 和 requirements.lock 移动到 Chart.yaml 和 Chart.lock。我们推荐在Helm 3的新chart中使用新格式。不过Helm 3 依然可以识别 Chart API 版本1 (
v1) 并且会加载已有的requirements.yaml文件支持 push 到远端 registry (如:harbor),新增了
helm chart/library [subcommand]命令#之前可以通过安装
chartmuseum/helm-push插件,将chart推送到仓库#现在默认支持登录仓库、推送chart
helm registry login –insecure 192.168.86.5
helm chart save /root/mariadb 192.168.86.5/chart/mariadb:test
helm chart push 192.168.86.5/chart/mariadb:test
helm registry logout 192.168.86.5命令行变化(将原先的命令保留为别名Aliases)
helm delete–>helm uninstallhelm inspect->helm showhelm fetch->helm pull
go 导入路径改变
k8s.io/helm–>helm.sh/helmHelm 3 首次发布了完全重组的Go SDK,以便在构建利用Helm的软件和工具时有更好的体验。SDK导入路径改为了
helm.sh/helmhelm 测试优化
Helm v3中,任务定义需要包含helm的测试钩子注释之一:
helm.sh/hook: test-success或者helm.sh/hook: test-failure。在Helm的一个版本中运行预定义的测试,执行helm test <RELEASE_NAME>。对于chart用户来说, 这是验证chart Release(或应用)可以正常运行的很好的方式。Library chart支持
Helm 3 支持的一类chart称为 “library chart”。 这是一个被其他chart共享的chart, 但是它自己不能创建发布组件。library chart的模板只能声明
define元素。作为默认存储器的密钥
在 Helm 3中, 密钥被作为默认存储驱动使用。 Helm 2默认使用ConfigMaps记录版本信息。
Chart.yaml api版本切换
Chart.yaml的apiVersion从
v1切换到了v2。helm v3 兼容支持v1,helm v2 不支持v2。XDG 基本目录支持
XDG 基本目录规范是一个定义了配置、数据和缓存文件应该存储在文件系统什么位置的可移植标准。Helm 3中,Helm现在遵守XDG 基本目录规范使用以下环境变量:
$XDG_CACHE_HOME$XDG_CONFIG_HOME$XDG_DATA_HOME
自动创建namespace
当用命名空间创建版本时,命名空间不存在,Helm 2会创建一个命名空间。 Helm 3中沿用了其他Kubernetes 工具的形式,如果命名空间不存在,就返回错误。 如果您明确指定
--create-namespace参数,Helm 3 会创建一个命名空间。
