Helm V3 新版本发布

简介: Helm 作为 Kubernetes 体系的包管理工具,已经逐渐成为了事实上的应用分发标准。根据 2018 年 CNCF 的一项云原生用户调研,超过百分之六十八用户选择 Helm 来作为应用打包交付方式。

Helm v3.0.0 Alpha 1 is coming!

Helm 作为 Kubernetes 体系的包管理工具,已经逐渐成为了事实上的应用分发标准。根据 2018 年 CNCF 的一项云原生用户调研,超过百分之六十八用户选择 Helm 来作为应用打包交付方式。在开源社区中,越来越多的软件被搬迁到 Kubernetes 集群上,它们中的绝大部分都是通过 Helm 来进行交付的。

Helm 当前的稳定版本为 v2.14.0,最新发布的测试版本为 v3.0.0-alpha.1。v3.x 的 alpha 版本可谓千呼万唤始出来,它带来了非常多的新特性及优化改进,让人无比兴奋,因此作此文以总结安利一番。

架构性变化 - 去除了 Tiller

在 Helm 2 中,一次基于 Helm 的软件交付会涉及到多个组件:

image.png

在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。

然而在多租户场景下,这种方式也会带来一些安全风险,我们即要对这个 ServiceAccount 做很多剪裁,又要单独控制每个租户的控制,这在当前的 Tiller 模式下看起来有些不太可能。

于是在 Helm 3 中,Tiller 被移除了。新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作。这样做法即简单,又安全。

虽然 Tiller 文件被移除了,但 Release 的信息仍在集群中以 ConfigMap 的方式存储,因此体验和 Helm 2 没有区别。

Tiller 变更引入的新变化 - Release 不再是全局资源

在 Helm 2 中,Tiller 自身部署往往在 kube-system 下,虽然不一定是 cluster-admin 的全局管理员权限,但是一般都会有 kube-system 下的权限。当 Tiller 想要存储一些信息的时候,它被设计成在 kube-system 下读写 ConfigMap 。

在 Helm 3 中,Helm 客户端使用 kubeconfig 作为认证信息直接连接到 Kubernetes APIServer,不一定拥有 cluster-admin 权限或者写 kube-system 的权限,因此它只能将需要存储的信息存在当前所操作的 Kubernetes Namespace 中,继而 Release 变成了一种命名空间内的资源。

Values 支持 JSON Schema 校验器

Helm Charts 是一堆 Go Template 文件、一个变量文件 Values 和一些 Charts 描述文件的组合。Go Template 和 Kubernetes 资源描述文件的内容十分灵活,在开发迭代过程中,很容易出现一些变量未定义的问题。Helm 3 引入了 JSON Schema 校验,它支持用一长串 DSL 来描述一个变量文件的格式、检查所有输入的变量的格式。

当我们运行 helm install 、 helm upgrade 、 helm lint 、 helm template 命令时,JSON Schema 的校验会自动运行,如果失败就会立即报错。

一个来自官方的例子

当我们指定一个 JSON Schema 文件为下述时:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "image": {
      "description": "Container Image",
      "properties": {
        "repo": {
          "type": "string"
        },
        "tag": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "name": {
      "description": "Service name",
      "type": "string"
    },
    "port": {
      "description": "Port",
      "minimum": 0,
      "type": "integer"
    },
    "protocol": {
      "type": "string"
    }
  },
  "required": [
    "protocol",
    "port"
  ],
  "title": "Values",
  "type": "object"
}

我们看到 JSON Schema 描述文件中指定了 protocol 和 port 为必填字段,于是我们可以指定一个 values.yaml 如下:

name: frontend
protocol: https
port: 443

但事实上,我们也可以指定为如下,因为我们可以在 helm 命令行传入变量参数,例如 helm install --set port=443 

name: frontend
protocol: https

试验性功能 - 推送 Charts 到容器镜像仓库中

互联网上有一些 Helm Charts 托管平台,负责分发常见的开源应用,例如 Helm HubKubeApps Hub

在企业环境中,用户需要私有化的 Helm Charts 托管。最常见的方案是部署 ChartMuseum,使其对接一些云存储。当然也有一些较为小众的方案,比如 [App-Regsitry]() 直接复用了 Docker 镜像仓库 Registry V2,再比如 helm-s3 直接通过云存储 S3 存取 Charts 文件。

如今在 Helm 3,Helm 直接支持了推送 Charts 到容器镜像仓库的能力,希望支持满足 OCI 标准的所有 Registry。但这部分还没有完全被开发完,会在未来的 alpha 版本中被完善。

代码复用 - Library Chart 支持

Helm 3 中引入了一种新的 Chart 类型,名为 Library Chart 。它不会部署出一些具体的资源,只能被其他的 Chart 所引用,提高代码的可用复用性。当一个 Chart 想要使用该 Library Chart 内的一些模板时,可以在 Chart.yaml 的 dependencies 依赖项中指定。

其他的一些变化

  • Go Import 的路径由 k8s.io/helm 变成了 helm.sh/helm
  • 简化了 Chart 内置变量 Capabilities 的一些属性[2]。
  • helm install 不再默认生成一个 Release 的名称,除非指定了 --generate-name 。
  • 移除了用于本地临时搭建 Chart Repository 的 helm serve 命令。
  • helm delete 更名为 helm uninstall , helm inspect 更名为 helm show , helm fetch 更名为 helm pull ,但以上旧的命令当前仍能使用。
  • requirements.yaml 被整合到了 Chart.yaml 中,但格式保持不变。

现在怎么办呢?

当前 Helm 3 仍在紧张而有序地开发当中,如果需要在生产环境使用,Helm 2 看起来会更加稳妥一些。

如果您恰好需要私有的 Helm Chart 仓库,欢迎申请试用阿里云容器镜像服务企业版(ACR EE),我们即将上线 Helm Charts 托管功能。

阿里云容器镜像服务(ACR)是国内最大的公有云镜像服务平台,支撑数万名开发者,共计十亿级别的镜像拉取,为开发者的每个应用镜像保驾护航。容器镜像服务企业版(ACR EE)是新推出的面向企业级客户的安全镜像托管平台,支持镜像服务企业版实例独享部署、OSS Bucket 独享加密存储、自定义网络访问控制及 P2P 大规模镜像分发功能。点击了解产品详情 https://www.aliyun.com/product/acr

Reference

[1] CNCF Survey: Use of Cloud Native Technologies in Production Has Grown Over 200% https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/
[2] The Chart Template Developer’s Guide https://v3.helm.sh/docs/chart_template_guide/#built-in-objects

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
10月前
|
存储 监控 安全
开源能源管理系统:能源转型时代的民主化革命
在全球能源危机与碳中和目标推动下,能源管理正加速数字化转型。开源能源管理系统(OSEMS)凭借成本低、灵活性高、安全性强和社区协作等优势,成为能源转型的关键技术。它广泛应用于工业、建筑、微电网及家庭场景,助力节能减排与可持续发展。尽管面临技术门槛与兼容性挑战,其发展前景广阔,未来将在能源互联网中发挥核心作用。
341 1
|
数据采集 SQL 存储
一种基于Hive的数据质量检核方法
本发明提出了一种数据质量检核方法、装置、设备及可读存储介质,所述方法包括如下步骤:1)根据质量检核需求,对多业务系统数据进行关联建模,生成关联建模结果;2)根据所述关联建模结果,配置数据质量检核规则,获取数据配置结果;3)将所述数据配置结果导入规则解析器,生成检核脚本;4)将所述检核脚本导入脚本执行器,生成检核明细表;5)对所述检核明细表进行汇总统计,生成检核结果报告。本发明通过针对不同的检核要求,将多业务系统数据进行临时关联汇总,初步对待检核数据进行筛选,限定数据范围,可以大大提升质量检核结果的准确性和有效性,以及降低使用和维护成本。
1571 0
一种基于Hive的数据质量检核方法
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
674 9
|
监控 Java
线程池大小如何设置
在并发编程中,线程池是一个非常重要的组件,它不仅能够提高程序的响应速度,还能有效地利用系统资源。合理设置线程池的大小对于优化系统性能至关重要。本文将探讨如何根据应用场景和系统资源来设置线程池的大小。
|
存储 大数据 Linux
文件系统EXT3,EXT4和XFS的区别
通过上述分析,我们可以看出,选择哪种文件系统需依据具体的应用需求而定,无论是寻求稳定性与兼容性的EXT3,追求高性能与扩展性的EXT4,还是面向大数据处理优化的XFS,各有千秋。正确评估业务需求,方能做出最适合的选择。
1700 2
|
存储 关系型数据库 MySQL
关系型数据库mysql数据文件存储
【6月更文挑战第15天】
875 4
|
人工智能 数据可视化 JavaScript
低代码平台先锋:Zoho Creator连续四年登榜技术价值矩阵
Zoho Creator连续四年入选Nucleus Research低代码平台领导者。该平台提供经济实惠的途径,无需深厚编码知识即可快速定制应用,尤其适合专业和非专业开发者。具备云部署、移动端兼容、拖放式界面、集成数据库及大量组件等特点。Nucleus Research赞扬其为快速应用开发提供强大工具。Zoho Creator自2006年以来已创建超700万个应用,拥有600万用户,支持多角色协作、自动化工作流和AI/ML功能,并注重数据安全。未来,Zoho Creator将继续强化低代码开发,助力企业数字化转型。
327 1
|
消息中间件 Java RocketMQ
顺利拿下Offer 通过分析rocketMq消费者拉取消息源码
顺利拿下Offer 通过分析rocketMq消费者拉取消息源码
373 0
|
BI
SAP 报表设置动态ALV标题栏
关于ALV报表多个事务代码下显示不同标题处理
1078 0
|
存储 Linux 调度
上下文之->解密篇
上下文之->解密篇
185 0