helm
Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。
文档:https://helm.sh/zh/docs/
官网:https://helm.sh/
Helm 是什么?
什么是 Helm Helm 为团队提供了在 Kubernetes 内部创建、安装和管理应用程序时需要协作的工具,有点类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。
有了 Helm,开发者可以:
- 查找要安装和使用的预打包软件(Chart)
- 轻松创建和托管自己的软件包
- 将软件包安装到任何 K8s 集群中
- 查询集群以查看已安装和正在运行的程序包
- 更新、删除、回滚或查看已安装软件包的历史记录
特点
复杂性管理
即使是最复杂的应用,图表 Charts 依然可以描述, 提供使用单点授权的可重复安装应用程序。
易于升级
随时随地升级和自定义的钩子消除您升级的痛苦。
分发简单
图表 Charts 很容易在公共或私有化服务器上发版,分发和部署站点。
回滚
使用 helm rollback
可以轻松回滚到之前的发布版本。
Helm 组件和相关术语
helm
- Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
Chart
- Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。
Repoistory
- Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
Release
- 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。
Tiller(helm3已经没有了)
- Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。
Helm工作原理
Chart Install 过程:
Helm从指定的目录或者tgz文件中解析出Chart结构信息
Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller
Tiller根据Chart和Values生成一个Release
Tiller将Release发送给Kubernetes用于生成Release
Chart Update过程:
Helm从指定的目录或者tgz文件中解析出Chart结构信息
Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller
Tiller生成Release并更新指定名称的Release的History
Tiller将Release发送给Kubernetes用于更新Release
Chart Rollback过程:
Helm将要回滚的Release的名称传递给Tiller
Tiller根据Release的名称查找History
Tiller从History中获取上一个Release
Tiller将上一个Release发送给Kubernetes用于替换当前Release
安装
用二进制版本安装
每个Helm 版本都提供了各种操作系统的二进制版本,这些版本可以手动下载和安装。
- 下载 需要的版本
- 解压(
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
) - 在解压目中找到
helm
程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm
)
然后就可以执行客户端程序并 添加稳定仓库: helm help
.
注意 针对Linux AMD64,Helm的自动测试只有在CircleCi构建和发布时才会执行。测试其他操作系统是社区针对系统问题请求Helm的责任。
[root@k8s-master helm]# wget https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz
[root@k8s-master helm]# ls
helm-v3.6.3-linux-amd64.tar.gz
[root@k8s-master helm]# tar -xf helm-v3.6.3-linux-amd64.tar.gz
[root@k8s-master helm]# cd linux-amd64/
[root@k8s-master linux-amd64]# ls
helm LICENSE README.md
[root@k8s-master linux-amd64]# mv helm /usr/local/bin/helm
#命令补全
echo "source <(helm completion bash)" >> ~/.bashrc
source .bashrc
使用脚本安装
Helm现在有个安装脚本可以自动拉取最新的Helm版本并在 本地安装。
您可以获取这个脚本并在本地执行。它良好的文档会让您在执行之前知道脚本都做了什么。
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
如果想直接执行安装,运行curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
。
配置Chart仓库
在 Helm 中默认是不会添加 Chart 仓库,所以这里我们需要手动添加,下面是添加一些常用的 Charts 库,命令如下:
helm repo add elastic https://helm.elastic.co
helm repo add gitlab https://charts.gitlab.io
helm repo add harbor https://helm.goharbor.io
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add incubator https://charts.helm.sh/incubator
helm repo add az-stable http://mirror.azure.cn/kubernetes/charts/
helm3添加仓库
helm repo add --username=admin --password=Harbor12345 myharbor https://har.harbor.com
增加完仓库后,需要执行更新命令,将仓库中的信息进行同步:
helm repo update
Helm相关命令
helm repo list #查看仓库
helm ls #查看release
helm install 仓库名/包名 #安装
helm template 仓库名/包名 > test.yaml #把要安装的软件包注入到yaml文件中,然后可以kubectl apply -f来应用
helm uninstall release名字 #卸载release
helm repo add 自定义仓库名字 仓库路径 #添加仓库
helm repo remove 仓库名称 #删除仓库
helm lint 软件包目录 #检查里面文件的语法
helm upgrade 仓库名/包名 或者 软件包名称 #更新helm之前部署的应用
helm create 名称 #创建自定义chart
helm plugin add 插件网址 #安装插件,比如helmpush
helm pull 仓库名/包名 #拉去helm镜像,一般为tgz结尾
helm status release名称 #查看release状态
helm version #查看helm版本
helm show values release名称 #查看release的values文件
helm show all release名称 #查看release的所有信息
helm show chart release名称 #查看release中Chart信息
helm repo update #更新仓库信息
helm packages 路径 #打包