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 helmWindows 使用Chocolatey
choco install kubernetes-helmDebian/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 dpkg或yum RPM在Kubernetes中的相同东西。Repository(仓库) 是用来存放和共享charts的地方,类似软件包仓库
Release 是运行在
Kubernetes集群中的chart的实例,一个chart通常可以在同一个集群中安装多次,每次安装都会创建一个新的release。以MySQL chart为例,如果你想在集群中运行两个数据库,那你可以安装该chart两次,每个数据库都会拥有它自己的release和release name。
查找Charts
Helm自带一个强大的搜索命令,可以从两种来源中进行搜索:
helm search hub
$NAME从Artifact 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最后更新于