每一个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu的apt,Red Hat、CentOS的yum。Helm 则是 Kubernetes上的包管理器。

1. Why Helm

        Kubernetes能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而Helm就是来干这件事的。

2. Helm 架构

Helm 有两个重要的概念:chart 和 release

  • chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart是应用部署的自包含逻辑单元。可以将chart想象成 apt、yum中的软件安装包。
  • release 是 chart 的运行实例,代表了一个正在运行的应用。当chart被安装到Kubernetes集群,就生成了一个release。chart能够多次安装到同一个集群,每次安装都是一个release。

Helm 是包管理工具,这里的包就是指的 chart。Helm能够:

  • 从零创建新chart
  • 与存储chart的仓库交互、拉取、保存和更新chart
  • 在kubernetes集群中安装和卸载 release
  • 更新、回滚和测试 release 

helm3.0之前的架构: 

Helm包含两个组件:Helm客户端和Tiller服务器,如图所示:

 Helm 客户端是终端用户使用的命令行工具,用户可以:

  • 在本地开发chart
  • 管理chart仓库
  • 与Tiller服务器交互
  • 在远程K8s集群上安装chart
  • 查看release信息
  • 升级或卸载已有的release

Tiller服务器运行在K8s集群中,他会处理Helm客户端的请求,与k8s API Server交互,Tiller服务器负责:

  • 监听来自Helm客户端请求
  • 通过chart构建release
  • 在k8s中安装chart,并跟踪release的状态
  • 通过API Server升级或卸载已有的release 

简单来说,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 之后,架构发生了较大变化,主要变化如下:

  1. 移除了 Tiller 服务器:Helm 3.0 移除了 Tiller 服务器,它不再需要运行在 Kubernetes 集群上。这意味着可以使用 Kubernetes 的 RBAC 机制进行授权,从而更好地保护 Kubernetes 集群的安全。

  2. 存储库的本地缓存:在 Helm 3.0 中,存储库的本地缓存存储在 $XDG_CACHE_HOME/helm 目录下($XDG_CACHE_HOME 默认为 $HOME/.cache)。这样可以提高 Helm 的速度和效率。

  3. 命名空间默认为 default:在 Helm 3.0 中,默认情况下使用的命名空间是 default,而不是之前的 kube-system。

  4. Chart 的依赖性管理:在 Helm 3.0 中,Chart 的依赖性管理有了重大改进,现在支持多种依赖关系类型,并且不再需要使用外部工具(如 Helmfile 或 ChartMuseum)进行依赖性管理。

  5. 改进了插件系统:Helm 3.0 中的插件系统改进了许多方面,包括更好的错误处理、支持 Windows 和 macOS 等操作系统等。

这些变化使 Helm 3.0 更加稳定、更加安全、更加高效。

3. 安装 Helm

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

4. 使用 Helm

查看仓库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

5. 安装 chart

        通过运行 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 进行跟踪和管理。

6. chart详解

        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的简易使用文档

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐