← 返回展厅
Helm
Helm2016

Helm

年份:2016
平台:跨平台
开发者:CNCF

Kubernetes的包管理器,像apt/yum一样管理云原生应用

浏览:11
点赞:0

简要介绍

【智能纪元厅】

2016年,Helm正式问世。由CNCF主导开发,面向跨平台平台用户。

Kubernetes的包管理器,像apt/yum一样管理云原生应用

技术特色:包管理、Kubernetes、云原生。

影响力评估:技术维度 8/10,商业维度 7/10,文化维度 6/10,用户维度 9/10。

作为智能纪元厅的经典代表,Helm在软件发展史上留下了深刻的印记。

详细介绍

2015年的冬天,云原生世界的版图上正经历着一场静默而剧烈的变革。Kubernetes,这个由Google开源、后来被CNCF(云原生计算基金会)接管的容器编排系统,刚刚发布了1.0版本,正以惊人的速度吸引着开发者的目光。然而,在这片新兴的疆域里,一个令人头疼的问题悄然浮现:管理Kubernetes应用的方式,还停留在石器时代。开发者们不得不手动编写成百上千行YAML文件,这些文件如同散落在沙滩上的贝壳,彼此孤立,难以复用,更谈不上版本管理。每当应用需要更新或迁移,整个团队就得陷入一场YAML的泥沼中。正是在这样的背景下,一个名为Helm的工具悄然诞生,它试图为Kubernetes世界带来如同apt-get之于Debian、yum之于Red Hat那样的优雅体验。

Helm的故事,始于一个名为Deis的公司。这家公司成立于2013年,由Brian Hardock、Gabriel Monroy和Matt Butcher等人联合创立,最初专注于构建一个名为Deis Workflow的PaaS平台。Deis Workflow的核心思想是简化应用的部署和管理,让开发者只需专注于代码,而无需关心底层基础设施。然而,随着Kubernetes的崛起,Deis团队敏锐地意识到,未来的应用部署模式将彻底改变。2015年初,Deis内部开始讨论如何为Kubernetes构建一个包管理工具。灵感来自多个方向:一方面,传统Linux发行版的包管理器(如apt、yum)提供了清晰的依赖管理和版本控制;另一方面,Homebrew这样的工具展示了如何通过简单的公式(Formula)来定义和安装软件。Deis团队想,为什么不能为Kubernetes应用也做类似的事情呢?

这个想法的核心人物是Matt Butcher,他是Deis的首席技术官,也是一位拥有深厚哲学和计算机科学背景的开发者。Matt曾说过,他最初接触Kubernetes时,最让他困惑的不是容器本身,而是如何将一组容器组合成一个可部署的、可复用的单元。他观察到,开发者们往往需要为每个环境(开发、测试、生产)手动调整YAML文件,这种做法不仅低效,而且极易出错。于是,Matt和团队开始构思一个系统,允许用户定义一个“Chart”(图表),这个Chart包含了应用的所有Kubernetes资源定义,以及一套模板机制,让用户可以通过参数化配置来适应不同环境。

2015年秋天,Deis内部启动了Helm项目。最初的代码库非常简陋,只有几百行Go语言代码,核心概念包括Chart、Release和Repository。Chart就是包好的应用定义,Release是Chart在特定环境中的实例,而Repository则是存储Chart的仓库。这个设计思路直接借鉴了Linux包管理器的“包-仓库-安装”模型。2016年初,Helm发布了第一个公开版本——Helm 1.0。当时,Kubernetes本身还处于快速迭代期,版本号从1.0跳到1.1只用了几个月。Helm 1.0的功能非常基础:它只能安装和删除Chart,不支持升级或回滚。但即便如此,它已经让开发者们看到了希望。一位早期用户回忆说,第一次用Helm部署一个包含多个微服务的应用时,他只需要一条命令,就完成了过去需要花半小时手动编写YAML的工作。

Helm的早期发展离不开社区的支持。2016年,Deis公司被微软收购,但Helm项目并未因此停滞。微软的加入带来了更多的资源和开发者。2016年6月,Helm被正式捐赠给CNCF,成为其托管的孵化项目。这一举动意义深远:CNCF的治理模式确保了Helm的中立性和开放性,吸引了来自Google、Red Hat、IBM等公司的贡献者。捐赠后不久,Helm 2.0版本发布,这是Helm发展史上的一个重要里程碑。Helm 2引入了Tiller组件——一个运行在Kubernetes集群中的服务端守护进程,负责接收客户端的请求并执行Chart的安装、升级和删除操作。Tiller的设计初衷是为了简化权限管理:用户只需在客户端配置好Chart,Tiller会以集群内服务账户的身份执行操作。但这个设计也埋下了安全隐患,因为Tiller默认拥有较高的权限,一旦被攻破,整个集群都可能沦陷。

从2016年到2019年,Helm 2成为Kubernetes生态系统中最常用的包管理工具。根据CNCF的年度调查,2018年有超过70%的Kubernetes用户使用Helm。Helm仓库(即官方的Chart仓库)中的Chart数量从最初的几十个增长到数千个,涵盖了从简单的Nginx Web服务器到复杂的Jenkins CI/CD系统,再到Elasticsearch、Prometheus等数据基础设施。开发者们开始习惯于用“helm install stable/nginx”这样的命令来部署应用,就像在Ubuntu上使用“apt-get install nginx”一样自然。这个时期,Helm的社区文化也极具特色:开发者们在Slack频道中热烈讨论Chart的编写技巧,有人甚至编写了“Helm Chart最佳实践”的文档,将模板化、依赖管理和测试策略系统化。

然而,Helm 2的Tiller组件始终是安全团队的一块心病。2018年底,Kubernetes社区发生了几起与Tiller权限滥用相关的安全事件,虽然没有造成大规模损失,但足以让CNCF技术委员会重新审视Helm的架构。2019年初,Helm社区决定在3.0版本中彻底移除Tiller。这个决定并非一帆风顺:一些用户担心没有Tiller后,Helm的权限管理会变得复杂;但更多的贡献者认为,移除Tiller可以简化部署,并利用Kubernetes原生的RBAC(基于角色的访问控制)机制来管理权限。2019年11月,Helm 3.0正式发布。它抛弃了Tiller,改用客户端直接与Kubernetes API服务器通信,同时引入了“Release”存储机制,将Release信息存储在Kubernetes的Secret资源中。这一改动不仅提升了安全性,还让Helm的架构更加简洁——用户不再需要单独管理一个服务端组件,只需一个二进制文件即可。

Helm 3的发布标志着Helm进入成熟期。从2019年到2023年,Helm的采用率持续攀升。根据CNCF 2022年的调查,Helm的使用率稳定在80%以上,成为Kubernetes生态中仅次于kubectl的第二常用工具。Helm仓库中的Chart数量在2023年突破了10万个,从简单的Web服务到复杂的AI训练任务(如TensorFlow分布式训练),都能通过一条helm install命令部署。Helm的成功也催生了大量衍生工具,比如Helmfile(用于声明式管理多个Helm Release)、Helm Chart测试框架(如Chart Testing)、以及Helm插件系统。许多云原生项目,如Istio、Prometheus、Grafana,都默认提供Helm Chart作为安装方式。

Helm的文化遗产,远不止于一个工具本身。它开创了“云原生包管理”这一全新范式。在Helm之前,Kubernetes应用部署主要依赖于手动编写YAML或使用简单的脚本;在Helm之后,几乎所有的主流云原生项目都提供了类似Helm Chart的打包方式。Helm的模板化机制启发了后来的Kustomize(Kubernetes原生的配置管理工具),而Helm的依赖管理思想则被Operator Framework(如Operator Lifecycle Manager)所借鉴。更重要的是,Helm证明了“包管理”这一概念可以从操作系统层面迁移到应用部署层面,为后来的云原生生态奠定了思想基础。

在Helm的发展历程中,也留下了许多有趣的轶事。比如,在Helm 2时代,社区曾发生过一次著名的“Chart仓库被劫持”事件。2018年,有人发现一个名为“stable”的官方Chart仓库中,某个Chart的下载链接被恶意篡改,指向了包含后门的镜像。社区紧急响应,在24小时内修复了漏洞,并引入了Chart签名机制(基于GPG)来确保Chart的完整性。这件事促使Helm社区在3.0版本中默认启用了Chart签名验证。另一个有趣的故事是关于Helm的名字:团队成员最初想叫它“Kube Package”,但觉得不够酷。后来,有人提议用“Helm”——在航海术语中,Helm是“舵”的意思,象征着指引方向。这个隐喻恰好契合了Helm在Kubernetes生态中的角色:为应用部署导航。

从技术角度看,Helm的核心创新在于其模板引擎。Helm使用Go语言的text/template库,允许用户在Chart的YAML文件中嵌入变量和逻辑判断。例如,一个典型的Deployment模板可能包含“{{ .Values.replicaCount }}”这样的占位符,用户可以在安装时通过“--set replicaCount=3”来指定副本数。这种设计让Chart具备了高度可配置性,同时保持了YAML文件的简洁。此外,Helm还引入了“子Chart”和“依赖”机制:一个Chart可以依赖其他Chart,比如一个Web应用Chart可以依赖一个MySQL Chart,Helm会自动处理依赖的安装顺序和版本冲突。

Helm的市场影响是深远的。在商业层面,Helm的普及直接推动了云原生应用市场的兴起。AWS、Azure、Google Cloud等云服务商都推出了自己的Helm Chart市场,企业用户可以像在App Store中购买应用一样,一键部署经过认证的第三方应用。许多初创公司也围绕Helm构建业务,比如Bitnami(后并入VMware)提供大量预配置的Helm Chart,帮助用户快速部署WordPress、Magento等常见应用。CNCF本身也将Helm作为其认证项目的一部分,Kubernetes管理员认证(CKA)考试中会涉及Helm的基本操作。

在文化遗产层面,Helm的故事是一个关于“从混乱中建立秩序”的典范。它诞生于Kubernetes生态的野蛮生长时期,通过借鉴传统操作系统的成熟思想,为云原生世界带来了标准化和可复用性。如今,当开发者们用“helm install”命令部署一个包含上百个微服务的复杂系统时,很少有人会想起2015年那个由几个工程师在Deis办公室的角落里写下的简陋原型。但正是这个原型,让Kubernetes从一个小众的编排工具,成长为支撑现代互联网基础设施的基石。Helm的代码库仍在持续迭代,社区仍在贡献新的Chart,而它的精神——用包管理的思想驯服云原生的复杂性——将长久地影响着软件工程的发展方向。

深度研究

影响力评价

技术影响商业影响文化影响用户规模9888
8.3
综合影响力评分
评分基于技术、商业、文化、用户四个维度的综合考量
🔧技术创新
卓越9/10

对技术发展和工程实践的推动程度

💼商业影响
显著8/10

对商业模式和市场格局的影响深度

🎭文化遗产
显著8/10

在科技文化和社会层面的持久影响力

👥用户覆盖
显著8/10

用户群体的广度和普及程度

评论区 (0)

登录 后参与评论

加载中...