你觉得Helm 3无聊?其实这说明它成熟了

简介: 如果你听说过关于Helm 3的唯一一件事就是它删除了Tiller动态配置文件生成工具,那么你已经知道最重要的一点:该项目经历了一次重大的重写,以赶上Kubernetes的发展并消除长期的安全问题。这是项目成熟的标志,也反映在其他关键开发中,如更好的补丁合并、对可用性(包括发布管理)的重大改进,以及对Helm 2 chart的明确支持生命周期。微软的Helm主程序经理Bridget Kromhout表示,对于安全性和稳定性来说,这是一个很好的信号。“Helm 3更简单,更安全,它可能不会吸人眼球,但这些功能足以让运维大规模系统的人高兴。"“一个项目删除大块代码,这是成熟的标志。”

如果你听说过关于Helm 3的唯一一件事就是它删除了Tiller动态配置文件生成工具,那么你已经知道最重要的一点:该项目经历了一次重大的重写,以赶上Kubernetes的发展并消除长期的安全问题。

这是项目成熟的标志,也反映在其他关键开发中,如更好的补丁合并、对可用性(包括发布管理)的重大改进,以及对Helm 2 chart的明确支持生命周期。

微软的Helm主程序经理Bridget Kromhout表示,对于安全性和稳定性来说,这是一个很好的信号。

“Helm 3更简单,更安全,它可能不会吸人眼球,但这些功能足以让运维大规模系统的人高兴。"

“一个项目删除大块代码,这是成熟的标志。”Azure Container Compute和Kubernetes 1.16发布的首席程序经理Lachlan Evenson表示,“我们需要做的是改善安全。在Helm 2社区我们听到的是,我们喜欢Helm,但是Helm的安全特性并不是我们在生产中想要的。”

去掉Tiller

Helm是一个古老的项目,由Deis在Kubernetes之后不久开始研发,并在第一次Kubecon上宣布。Helm 2是与谷歌的Kubernetes Deployment Manager团队一起构建的,添加了Tiller组件和GRPC来处理Helm chart的安装和管理,呈现chart并将它们推送到Kubernetes API服务器。

Tiller允许团队共享一个Kubernetes集群,多个operator可以使用同一组版本,但是随着Kubernetes API的发展,Tiller没有跟上,这导致了一些人担心授予任何可以访问Tiller的人的权限过于宽泛。

“Helm的问题很多都是关于安全性的,比如如何将现成的软件安全地交付到集群中?”Azure Compute主管Gabe Monroy解释道,他在Deis的团队启动了这个项目。“Helm 3被重新设计,移除了Tiller,并将许多逻辑转移到更现代的Kubernetes技术中,比如operator和客户端模板。”

移除Tiller是可能的,因为自从Helm 2在2016年发布以来,Kubernetes增加了一些重要的功能,比如Role-Based Access Control和Custom Resource Definitions。“当时,没有CRD,也没有RBAC。God是唯一模式,没有其他方法可以做到。”

既然CRD已经可用,就不再需要Tiller来维护状态或成为通过Helm部署的发布信息的中心枢纽——所有这些信息都可以作为记录存储在Kubernetes中。用户身份验证和授权现在由Kubernetes完成,Helm权限只是Kubernetes权限,因此它们使用RBAC,集群管理员可以选择要使用的细粒度Helm权限。

代替Tiller的客户机-服务器模型,Helm变成了Kubernetes客户端——这样去除了复杂度层,但仍然给运维人员提供他们需要的工具。

IBM高级软件工程师兼Helm核心维护人员Martin Hickey表示,如果你习惯了Helm 2,这将是思维方式的一个重大转变。

Helm 3还降低了安装和运维的复杂性

当你部署一个版本时,它并没有存储在集群内的命名空间中。它被储存在Tiller的命名空间里。默认情况下,这就是kubesystem。这是你的系统命名空间!如果你习惯了Helm 2的工作方式,命名空间的改进可能会有些混乱,因为你必须在正确的地方寻找你的部署。

“因为Tiller是在god模式下运行的,除非你对它进行了不同的配置,否则helm-ls命令会返回所有东西。现在它将进入你要求它进入的命名空间-是的,现在你必须创建命名空间。”

版本、配置和chart

没有Tiller,Helm需要一种方法来跟踪集群中不同版本的状态。Helm 2可以选择使用秘密来释放对象,现在这是默认的。

与版本一起存储在命名空间中的版本信息也非常不同:它既包括关于chart的特定安装的版本实例,也包括存储版本升级、回滚或删除详细信息的ReleaseVersion秘密。

如果你需要在多个地方安装同一个应用程序,那么将版本信息存储在相关的命名空间中也可以更容易地重复名称。对于Helm 2,如果有一个为集群运行的Tiller实例,那么版本名称必须是唯一的。

随着Tiller的消失,Helm现在直接与Kubernetes API对话,helm init和home也被删除,因为你不需要它们来创建和存储配置;相反,配置文件现在使用XDG存储。

尽管Helm基本上是重写了来删除Tiller,Helm 2 chart仍将可以用于Helm 3(少数例外,这将意味着它们需要更新)。

“架构非常不同,更加现代化,但它仍然具有生态系统中创建的内容的所有相同优点,QQ账号买号这些内容为你提供了输入helm install kafka的良好体验,并且你有一个增加了安全性的kafka集群正在运行。”

围绕CRD的变化反映了这样一个事实:Kubernetes生态系统仍然在决定如何管理VRD,以避免类似DLL地狱的情况。“一个应用程序可以拥有一个CRD,CRD也可以由许多应用程序拥有,我们试图用chart来管理CRD。我们已经对它进行了简化和重新设计,只创建CRD;因此不再进行修改或删除。现在将自动安装CRDS,但是如果它们已经存在,不再安装,并且有一个命令跳过安装。这符合越来越普遍的DevOps模式,即用一个chart安装CRD,然后用自己的chart安装应用程序。”

如果希望chart既可以用于Helm 2,也可以用于Helm 3,请确保它们创建了命名空间并同时使用crd install钩子和crds/目录;Helm 3将忽略该钩子,并发出警告。

但是如果你已经准备好了用Helm 3,你可以利用一些新的chart特性,但应该将helm3 chart标记为使用Helm version 2 API。

需求和依赖关系会移动到chart.yaml文件中,因此需要为Helm 2和3分别指定它们。chart现在还可以使用JSON模式来验证install、upgrade、template和lint命令,以便更清楚地知道需要设置哪些值。

当你使用Helm更新版本时,它现在执行一个三向合并,其中包括live cluster状态以及使用最新的和建议的chart清单。

更简单,更安全

Helm 3重新架构的另一个结果是Go-SDK也进行了重组。CLI是围绕SDK的一个包装器,使其易于使用,但是如果你想创建更复杂的部署模式,则需要直接使用SDK并在Helm 2中使用,这很难做到。“现在它已经很好地被解压出来了,而且包更好地封装在远离CLI部分的地方。”如果你想让Helm成为管道的一部分(在这个管道中你需要使用Helm所做的一部分并在其间插入自己的步骤),那么可以直接调用Go SDK中的包来完成这项工作。实际上,从Helm 2迁移到3的插件就是这样工作的。

强调Helm引擎和社区chart内容的成熟度,是该项目从云计算基础孵化状态中毕业的一步,也是通过其先决条件的第三方安全审核的一步。

与Helm安全审计一起,Snyk还对public Helm repo中的chart进行了安全审计,查找这些图表引用的镜像中的漏洞。

Helm这样被广泛使用的技术(每月下载量超过100万次,是CNCF第三大被采用的技术)仍在孵化中,这是令人惊讶的。它曾经是一个顶级的Kubernetes项目,直到2018年Kubernetes自己“搬到”CNCF后才成为一个独立项目。随着安全审计的完成,Helm很可能在2020年初毕业。

“围绕Helm的社区规模庞大,种类繁多,并继续以令人难以置信的速度增长。能够用一个命令安装复杂软件,是Kubernetes和CNCF生态系统所追求的。Helm支持helm安装模式,而生态系统的其他部分仍在努力实现这种模式。”

能够在不影响用户的情况下进行重大的内部更改,使项目与当前关注的问题保持相关性,这是一项令人印象深刻的成就。尽管在云原生世界中有各种各样的打包和安装工具,Helm仍然能够很好地保持相关性。

“经得起时间考验的平台有能力随着技术基础的变化而发展。Kubernetes正在展示以这种方式进化的能力,Helm也是一样的。”

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
存储 运维 jenkins
放弃"Jenkins"的种种理由,期待更好赋能研发的"持续交付平台"
Jenkins 很酷,但是不完美,有历史局限性造成的问题。本文仅从“如何更好给研发团队赋能的角度”,剖析Jenkins, 探讨理想的持续交付平台, 不带货无广告~
|
7月前
|
Dubbo Java 应用服务中间件
神作《Java多线程核心技术3》开源几分钟被下架!GitHub昙花一现
两天一次地分享好书环节又来了:高洪岩老师的 《Java多线程编程核心技术(第3版)》,网上还没有开源版本!阿嘴会在文末附电子版免费下载方式。
|
10月前
|
存储 Kubernetes 关系型数据库
事半功倍:Helm的了解与使用
事半功倍:Helm的了解与使用
165 0
|
11月前
|
自然语言处理 IDE Java
graalvm 拯救生命,速速入手
graalvm 拯救生命,速速入手
138 0
|
数据可视化 程序员 Docker
你在什么时候觉的自己的技术成长很快;低代码在实际开发中的效率到底怎么样;Docker 的优缺点有哪些|极客观点
你在什么时候觉的自己的技术成长很快;低代码在实际开发中的效率到底怎么样;Docker 的优缺点有哪些|极客观点
|
数据可视化 vr&ar 图形学
Sketchup 2022:创新设计理念实现数字化创作新境界 -Sketchup 2022全版本安装包
Sketchup 2022:创新设计理念实现数字化创作新境界 -Sketchup 2022全版本安装包
|
缓存 JavaScript 前端开发
如何使用本地 Docker 更好地开发?我们总结了这八条经验
如果你像我们一样需要运行许多不同的应用程序,那么将开发环境容器化可以极大地提高工作效率。这里有一些可以优化本地 Docker 环境的技巧。
259 0
如何使用本地 Docker 更好地开发?我们总结了这八条经验
|
测试技术 虚拟化 Docker
只需搞定Docker,环境问题再也不是测开路上的『坑』
只需搞定Docker,环境问题再也不是测开路上的『坑』
|
虚拟化 Docker 容器
只需搞定Docker,环境问题再也不是测开路上的『坑』
![](https://ceshiren.com/uploads/default/original/3X/3/f/3ff5b4a573dca8b8cb283f6c26fbd4e3eeb39402.png) - 轻量级:因为docker不用虚拟化内核,直接共享宿主机的内核,所以节省了很多资源,在同样的资源下可以启动更多的软件,同时启动速度也更快 - 优点即缺点:docker的优点也是它的缺点,正是
|
Kubernetes 安全 对象存储
大佬愤怒喊话:在大厂做 Kubernetes 开源工作难以晋升
近日,Kubernetes(简称 K8s)圈内大佬 Noah Kantrowitz 连发多条推文抨击“FAANG”科技巨头内部晋升机制对 K8s 全职员工不友好,他指出,“科技大厂们的激励措施正阻止人们全职参与开源贡献,大家的贡献积极性正在放缓。”
152 0
大佬愤怒喊话:在大厂做 Kubernetes 开源工作难以晋升