每一个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu的apt,Red Hat、CentOS的yum。Helm 则是 Kubernetes上的包管理器。
Kubernetes能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而Helm就是来干这件事的。
Helm 有两个重要的概念:chart 和 release
Helm 是包管理工具,这里的包就是指的 chart。Helm能够:
helm3.0之前的架构:
Helm包含两个组件:Helm客户端和Tiller服务器,如图所示:
Helm 客户端是终端用户使用的命令行工具,用户可以:
Tiller服务器运行在K8s集群中,他会处理Helm客户端的请求,与k8s API Server交互,Tiller服务器负责:
简单来说,Helm客户端负责管理chart,Tiller服务器负责管理release。
注意:
从 Helm 3.0 版本开始,已经移除了 Tiller 服务器,因此不需要再单独安装 Tiller 服务器了。Helm 3.x 版本使用 Kubernetes 的 RBAC 认证机制来进行授权,将所有 Tiller 的功能集成到了 Helm 客户端中。如果你使用的是 Helm 3.x 版本,则不需要安装 Tiller 服务器,可以直接使用 Helm 客户端进行部署和管理 Kubernetes 应用程序。
helm3.0之后的架构:
在 Helm 3.0 之后,架构发生了较大变化,主要变化如下:
移除了 Tiller 服务器:Helm 3.0 移除了 Tiller 服务器,它不再需要运行在 Kubernetes 集群上。这意味着可以使用 Kubernetes 的 RBAC 机制进行授权,从而更好地保护 Kubernetes 集群的安全。
存储库的本地缓存:在 Helm 3.0 中,存储库的本地缓存存储在 $XDG_CACHE_HOME/helm 目录下($XDG_CACHE_HOME 默认为 $HOME/.cache)。这样可以提高 Helm 的速度和效率。
命名空间默认为 default:在 Helm 3.0 中,默认情况下使用的命名空间是 default,而不是之前的 kube-system。
Chart 的依赖性管理:在 Helm 3.0 中,Chart 的依赖性管理有了重大改进,现在支持多种依赖关系类型,并且不再需要使用外部工具(如 Helmfile 或 ChartMuseum)进行依赖性管理。
改进了插件系统:Helm 3.0 中的插件系统改进了许多方面,包括更好的错误处理、支持 Windows 和 macOS 等操作系统等。
这些变化使 Helm 3.0 更加稳定、更加安全、更加高效。
curl https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz -o helm-v3.7.1-linux-amd64.tar.gz
tar -zxvf helm-v3.7.1-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
helm version
上述命令会从Helm的官方站点下载v3.7.1版本的Helm二进制文件,并将其解压缩到当前目录下。然后,它将Helm二进制文件移动到/usr/local/bin目录下,这是通常存放命令行工具的地方。最后,运行helm version命令,以验证是否成功安装了Helm客户端。
添加阿里云helm库:
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
查看仓库chart,这里只截取了一部分。
zy@k8s-master:~$ helm search repo
NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/acs-engine-autoscaler 2.1.3 2.1.1 Scales worker nodes within agent pools
aliyun/aerospike 0.1.7 v3.14.1.2 A Helm chart for Aerospike in Kubernetes
aliyun/anchore-engine 0.1.3 0.1.6 Anchore container analysis and policy evaluatio...
aliyun/artifactory 7.0.3 5.8.4 Universal Repository Manager supporting all maj...
aliyun/artifactory-ha 0.1.0 5.8.4 Universal Repository Manager supporting all maj...
aliyun/aws-cluster-autoscaler 0.3.2 Scales worker nodes within autoscaling groups.
aliyun/bitcoind 0.1.0 0.15.1 Bitcoin is an innovative payment network and a ...
aliyun/buildkite 0.2.1 3 Agent for Buildkite
aliyun/centrifugo 2.0.0 1.7.3 Centrifugo is a real-time messaging server.
aliyun/cert-manager 0.2.2 0.2.3 A Helm chart for cert-manager
aliyun/chaoskube 0.6.2 0.6.1 Chaoskube periodically kills random pods in you...
aliyun/chronograf 0.4.2 Open-source web application written in Go and R...
查看仓库列表:
zy@k8s-master:~$ helm repo list
NAME URL
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
通过运行 helm search 命令来搜索这个仓库中的 Helm charts。例如,要搜索这个仓库中所有的 MySQL Helm charts,可以运行以下命令:
helm search repo aliyun/mysql
这将搜索仓库中所有名称中包含 "mysql" 的 Helm charts。如果您找到了需要的 Helm chart,可以使用 helm install 命令安装它。例如,要安装名为 aliyun/mysql 的 Helm chart,可以运行以下命令:
helm install my-mysql aliyun/mysql
这将在 Kubernetes 集群中安装一个新的 MySQL 实例,并使用名称为 my-mysql 的 Helm release 进行跟踪和管理。
chart是Helm的应用打包格式。chart由一系列文件组成,这些文件描述了k8s部署应用时所需要的资源,比如Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap等。
单个的chart可以非常简单,只用于部署一个服务,比如Memcached。chart也可以很复杂,部署整个应用,比如包含HTTP Servers、Database、消息中间件、Cache等。
chart将这个鞋文件放置在预定义的目录结构中,通常整个chart被打成tar包,并且标注上版本信息,便于Helm部署。
以MySQL chart为例,一旦安装了某个chart,就可以在~/.helm/cache/archive中找到chart的tar包
(1)Chart.yaml
描述chart的概要信息,name和version是必填项,其他都是可选项
(2)README.md
Markdown格式的README文件,相当于chart的使用文档
(3)LICENSE
文本文件,描述chart的许可信息
(4)requirements.yaml
chart可能以来其他的chart,这些依赖关系通过requirements.yaml指定。在安装过程中,依赖的chart也会被一起安装。
(5)values.yaml
chart支持在安装时根据参数进行定制化配置,而values.yaml提供了而这些配置参数的默认值
(6)templates目录
各类k8s资源的配置模板都放置在这里。Helm会将values.yaml中的参数值注入模板中,生成标准的YAML配置文件。模板时chart最重要的部分,也是Helm最强大的地方,模板增加了应用部署的灵活性,能够适用不同的环境。
(7)templates/NOTES.txt
chart的简易使用文档