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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 如果你听说过关于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也是一样的。”

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
应用服务中间件 nginx Docker
【与时俱进】网络工程师必备技能:Docker基础入门指南,助你轻松应对新时代挑战!
【8月更文挑战第22天】随着容器技术的发展,Docker已成为开发与运维的关键工具。本文简要介绍Docker——一种开源容器化平台,能让应用程序及依赖项被打包成轻量级容器,在任何Linux或Windows机器上运行。文中涵盖Docker的安装步骤、基础命令操作如启动服务、查看版本、拉取与运行容器等。并通过实例演示了如何运行Nginx服务器和基于Dockerfile构建Python Flask应用镜像的过程。这些基础知识将助力网络工程师理解Docker的核心功能,并为实际应用提供指导。
68 2
|
2月前
|
Java 编译器 Maven
【颠覆你的认知!】当Quarkus邂逅GraalVM本机镜像,应用启动竟快到飞起——背后的技术秘密等你揭秘!
Quarkus框架因轻量级与高性能而在Java开发社区广受关注。结合GraalVM使用能显著提升应用启动速度与运行效率,这得益于GraalVM的本机镜像支持。本文将介绍如何利用Quarkus和GraalVM构建高效应用,并提供示例代码演示具体步骤。首先需安装GraalVM环境并配置Maven支持构建本机镜像。接着创建一个简单的RESTful服务端点作为示例,通过命令行编译生成本机可执行文件并运行。这种方式能够大幅提升应用性能,但需注意构建时间和部分Java特性兼容性问题。
38 1
|
3月前
|
Rust Cloud Native 安全
哇塞!Rust 在云原生环境中搞大事啦!构建微服务竟如此酷炫,你还不来看看?
【8月更文挑战第31天】《构建微服务:Rust 在云原生环境中的实践》探讨了 Rust 语言凭借其内存安全、高性能及可靠性等特性,在快速发展的云计算领域构建微服务的优势。书中介绍了选择合适框架(如 Axum 和 Tide)、容器化部署、服务间通信及确保服务可靠性等方面的内容,并展示了 Rust 在云原生环境中的广泛应用前景。
125 0
|
存储 监控 Devops
Docker与DevOps的无敌组合,引爆你的创新潜能
Docker与DevOps的无敌组合,引爆你的创新潜能
172 0
|
存储 Kubernetes 关系型数据库
事半功倍:Helm的了解与使用
事半功倍:Helm的了解与使用
216 0
|
Arthas Kubernetes Cloud Native
开源小白到核心开发——我与 sealer 的成长故事
下面将以作者本人与 sealer 的一段成长故事来带领大家体验从小白到核心功能开发者的开源之旅,同时本文也作为一篇引领开源小白入门的文章供大家参考。
开源小白到核心开发——我与 sealer 的成长故事
|
Cloud Native 专有云 中间件
聊聊 sealer 开源背后的故事|学习笔记(二)
快速学习聊聊 sealer 开源背后的故事
|
存储 运维 Cloud Native
聊聊 sealer 开源背后的故事|学习笔记(三)
快速学习聊聊 sealer 开源背后的故事
|
存储 Kubernetes 负载均衡
云原生新时代弄潮儿kubernetes看一眼,忍不住又看一眼?原来爱上了它?
Docker 已经统领云原生半壁江山的情况下,`kubernetes`怎么能异军突起?它有什么特殊的嘛?
134 1
云原生新时代弄潮儿kubernetes看一眼,忍不住又看一眼?原来爱上了它?
|
测试技术 虚拟化 Docker
只需搞定Docker,环境问题再也不是测开路上的『坑』
只需搞定Docker,环境问题再也不是测开路上的『坑』
下一篇
无影云桌面