Helm 应用包管理器
1. 为什么需要 Helm ?
K8S 上的应用对象,都是由特定的资源描述组成,包括 deployment
service
等。都保存各自文件中或者集中写到一个配置文件。然后 kubectl apply -f
- 假设:如果应用只有一个或几个这样的服务组成,上面部署方式足够了。
- 然而:对于一个复杂的应用,会有很多类似上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个,几十个。如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,而这种组织和管理应用的方式就显得力不从心了。
- 说明:由于缺少对发布过的应用版本管理和控制,使
Kubernetes
上的应用维护和更新面临诸多的挑战,主要面临一下问题:
- 如何将这些服务作为一个整体管理;
- 这些资源文件如何高效复用;
- 不支持应用级别的版本管理;
2. Helm 介绍
Helm 是一个Kubernetes
的包管理器,就像 Linux
下的包管理器,如 yum/apt
等,可以很方便的将之前打包好的 yaml
文件部署到 Kubernetes
上。
Helm 有 3 个重要概念:
- helm:一个命令行客户端工具,主要用于
Kubernetes
应用Chart
的创建,打包,发布和管理; - Chart: 应用描述, 一系列用于描述
k8s
资源相关文件的集合; - Release:基于
Chart
的部署实体,一个Chart
被Helm
运行后将会生成对用的一个 release;将 k8s 中创建出真实运行的资源对象。
3. Helm v3 变化
2019 年 11月 13日,Helm 团队发布 Helm v3 的第一个稳定版本。
-
架构变化
-
Release 名称可以在不同的命名空间重用
-
支持将
Chart
推送至Docker
镜像仓库中 -
使用
JSONScheam
验证chart values
-
其他
- 为了更好的协调其他包管理者的措辞 Helm CLI 个别更名
helm delete
更名为helm uninstall
helm inspect
更名为helm show
helm fetch
更名为helm pull
- 移除了基于本地临时搭建
Chart Repository
的helm server
命令 - 自动创建命名空间
在不存在的命名空间中创建发行版本时,
Helm 2
创建了命名空间。Helm 3
遵循其他Kubernetes
对象的行为,如果命名空间不存在则返回错误。