Helm

Helm介绍

Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。类似linux操作系统的软件包管理工具(yum, apt,opkg)

安装

Helm二进制版本安装

每个Helm版本都提供了常见操作系统的二进制版本,可以直接手动下载安装。下载地址 以CentOS为例,下载 helm-v3.6.3-linux-amd64.tar.gz,解压压缩包后,在目录中找到helm程序,复制或移动要需要的目录中(mv helm /usr/local/bin/helm)

使用脚本安装

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

使用包管理器安装

MacOS 使用Homebrew

brew install helm

Windows 使用Chocolatey

choco install kubernetes-helm

Debian/Ubuntu 使用 apt

curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helmcurl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

其它安装方法请参考官方文档

旧版本安装

因为Helm版本兼容Kubernetes范围有限(具体偏差参考下面的可支持的版本偏差兼容列表 ),有时遇到维护比较老的Kubernetes版本时就需要安装比较老版本的Helm。下面以Helm V2.8.2为示例

wget https://get.helm.sh/helm-v2.8.2-linux-amd64.tar.gz
tar -zxf helm-v2.8.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/

# 初始化
helm init

    Creating /root/.helm 
    Creating /root/.helm/repository 
    Creating /root/.helm/repository/cache 
    Creating /root/.helm/repository/local 
    Creating /root/.helm/plugins 
    Creating /root/.helm/starters 
    Creating /root/.helm/cache/archive 
    Creating /root/.helm/repository/repositories.yaml 
    Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com 
    Error: Looks like "https://kubernetes-charts.storage.googleapis.com" is not a valid chart repository or cannot be reached: Get https://kubernetes-charts.storage.googleapis.com/index.yaml: net/http: TLS handshake timeout

# 如果遇到上面的报错,是因为自2.17.0之后已弃用[https://kubernetes-charts.storage.googleapis.com/index.yaml](https://kubernetes-charts.storage.googleapis.com/index.yaml)作为默认稳定存储库,不再解析。新的存储库是[https://charts.helm.sh/stable](https://charts.helm.sh/stable)
# 可以使用如下命令进行初始化
helm init --stable-repo-url https://charts.helm.sh/stable --service-account tiller

# 或使用`--skip-refresh`参数,并替换最新的稳定仓库
helm init --client-only --skip-refresh
helm repo rm stable
helm repo add stable https://charts.helm.sh/stable

Helm版本支持策略

支持的版本

Helm的版本用 x.y.z 描述,x是主版本,y是次版本,z是补丁版本,遵循 语义化版本 术语。 Helm项目维护了一个针对最近次要版本的发布分支。适当的修复,包括安全修复、从发布分支中的cherry-pick, 视严重程度而定。更多细节请查看 Helm版本策略。

可支持的版本偏差

当一个Helm的新版本发布时,它是针对Kubernetes的一个特定的次版本编译的。比如,Helm 3.0.0 与Kubernetes的1.16.2的客户端版本交互,一次可以兼容Kubernetes 1.16。 从Helm 3开始,Helm 编译时假定与针对n-3版本的Kubernetes兼容。由于Helm 2对Kubernetes次版本变更的支持稍微严格一点, 则假定与Kubernetes的n-1版本兼容。 例如,如果您在使用一个针对Kubernetes 1.17客户端API版本编译的Helm 3版本,那么它应该可以安全地使用Kubernetes 1.17, 1.16,1.15,以及1.14。如果您在使用一个针对Kubernetes 1.16客户端API版本编译的Helm 2版本,那么它应该可以安全地使用 Kubernetes 1.16 和 1.15。 不推荐将Helm用于比编译它所依赖的版本更高的Kubernetes版本,因为Helm并没有做出任何向前兼容的保证。 如果您选择了一个Kubernetes版本不支持的Helm,需自负风险。

请参考下面的链接来确定哪个版本的Helm与您的集群兼容。 Helm版本支持策略

使用Helm

主要介绍了使用 Helm 来管理 Kubernetes 集群上的软件包的基础知识。

三大概念

  • Chart 代表着Helm包。它包含在Kubernetes集群内部运行应用程序、工具或服务所需的所有资源定义。可以把它看作是apt dpkgyum RPMKubernetes中的相同东西。

  • Repository(仓库) 是用来存放和共享charts的地方,类似软件包仓库

  • Release 是运行在Kubernetes集群中的chart的实例,一个chart通常可以在同一个集群中安装多次,每次安装都会创建一个新的release。以MySQL chart为例,如果你想在集群中运行两个数据库,那你可以安装该chart两次,每个数据库都会拥有它自己的releaserelease name

查找Charts

Helm自带一个强大的搜索命令,可以从两种来源中进行搜索:

  • helm search hub $NAMEArtifact Hub中查找并列出helm charts。Artifact Hub中存放了大量不同的仓库

  • helm search repo $NAME 从你添加(使用 helm repo add $NAME $URL)到本地helm客户端中的仓库中进行查找。基于本地数据搜索,无需连接网络。

基本操作

helm search hub

# 添加grafana仓库
helm repo add grafana https://grafana.github.io/helm-charts

# 更新
helm repo update

# 搜索grafana仓库,看有哪些支持的charts
helm search repo grafana 

# 安装chart,以下为grafana为例。 '--generate-name' 自动生成一个随机对象名
helm install grafana/grafana --generate-name

helm create helm-nginx
cd helm-nginx

# 部署本地生成的项目的两种方法
## 随机生成名称
helm install ./ --generate-name

## 使用helm-nginx做为名称
helm install -f values.yaml helm-nginx ./

# 查看当前通过helm部署的应用
helm list
	NAME            	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART           	APP VERSION
	chart-1677487952	default  	1       	2023-02-27 16:52:32.719503738 +0800 CST	deployed	helm-nginx-0.1.0	1.16.0     
	helm-nginx      	default  	1       	2023-02-27 16:48:49.179048651 +0800 CST	deployed	helm-nginx-0.1.0	1.16.0     

# 卸载/删除部署的应用
helm uninstall chart-1677487952
	release "chart-1677487952" uninstalled

# 更新仓库缓存
helm repo update

添加chart仓库


helm repo add chartmuseum https://chartmuseum.github.io/charts

helm search repo chartmuseum
	NAME                   	CHART VERSION	APP VERSION	DESCRIPTION                        
	chartmuseum/chartmuseum	3.9.3        	0.15.0     	Host your own Helm Chart Repository

# 因为网络原因,建议使用国内镜像仓库源
helm repo add stable  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts/

历史版本

# 查看某个应用的历史版本
helm search repo apollo --versions
	NAME                 	CHART VERSION	APP VERSION	DESCRIPTION                                       
	apollo/apollo-portal 	0.6.0        	2.1.0      	A Helm chart for Apollo Portal                    
	apollo/apollo-portal 	0.5.1        	2.0.1      	A Helm chart for Apollo Portal                    
	apollo/apollo-portal 	0.5.0        	2.0.0      	A Helm chart for Apollo Portal                    
	apollo/apollo-portal 	0.4.1        	2.0.0-RC1  	A Helm chart for Apollo Portal                    
	apollo/apollo-portal 	0.4.0        	2.0.0-RC1  	A Helm chart for Apollo Portal                    
	apollo/apollo-portal 	0.3.2        	1.9.2      	A Helm chart for Apollo Portal                    
	apollo/apollo-portal 	0.3.1        	1.9.1      	A Helm chart for Apollo Portal                    
	apollo/apollo-portal 	0.3.0        	1.9.0      	A Helm chart for Apollo Portal                    

# 拉取指定版本,要指定的版本是CHART VERSION版本,而不是APP VERSIONS
helm pull apollo/apollo-portal --version 0.5.1

最后更新于