微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的惟一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。Helm经过软件打包的形式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用部署和管理的复杂性。架构
随着业务容器化与向微服务架构转变,经过分解巨大的单体应用为多个服务的方式,分解了单体应用的复杂性,使每一个微服务均可以独立部署和扩展,实现了敏捷开发和快速迭代和部署。但任何事情都有两面性,虽然微服务给咱们带来了不少便利,但因为应用被拆分红多个组件,致使服务数量大幅增长,对于Kubernetest编排来讲,每一个组件有本身的资源文件,而且能够独立的部署与伸缩,这给采用Kubernetes作应用编排带来了诸多挑战:微服务
Helm把Kubernetes资源(好比deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。经过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操做。工具
利用Kubernetes部署一个应用,须要Kubernetes原生资源文件如deployment、replicationcontroller、service或pod 等。而对于一个复杂的应用,会有不少相似上面的资源描述文件,若是有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,且因为缺乏对发布过的应用版本管理和控制,使Kubernetes上的应用维护和更新等面临诸多的挑战,而Helm能够帮咱们解决这些问题。命令行
做为Kubernetes的一个包管理工具,Helm具备以下功能:版本控制
Helm有两部分组成:server
简单的说,client管理charts,而server管理发布release。blog
Helm Client是用户命令行工具,其主要负责以下:资源
Tiller Server是一个部署在Kubernetes集群内部的server,其与Helm client、Kubernetes API server进行交互。Tiller server主要负责以下:开发