1、在没有helm之前,部署deployment、service、ingress等等
2、helm的作用:通过打包的方式,deployment、service、ingress这些打包在一块,一键部署服务、类似于yum功能
3、helm:官方提供的一种类似于仓库的功能,可以实现一键化部署应用
(1)helm自带回滚功能
4、helm的组件
| chart | helm的软件包:包含部署包deployment,service包,ingress等等(定义好的yaml资源)类似于yum的rpm包 | 
| release | 版本/在安装过程中给部署的应用起一个名字 | 
| repository | 仓库(yaml资源的保存地址):提供一个服务器,这个服务器当中包含chart资源 | 
5、helm的版本
(1)helm2(已淘汰)
(2)helm3:纯命令行方式(目前使用)
6、部署helm
(1)部署软件
tar -xf helm-v3.12.0-linux-amd64.tar.gz
mv helm /usr/local/bin/helm
(2)配置自动补齐


(3)部署仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator(官网)

(4)仓库(repo)的相关命令
①查看有哪些仓库:helm repo list

②更新仓库:helm repo update

③查找指定仓库中是否有nginx的yaml资源:helm search repo bitnami | grep nginx

(5)查看指定chart的一般信息:helm show chart bitnami/nginx

(6)查看指定chart的所有信息:helm show all bitnami/nginx

7、部署nginx实例
(1)查找指定仓库中是否有nginx的yaml资源:helm search repo bitnami | grep nginx

(2)安装:
①指定release名称创建:helm install my-nginx bitnami/nginx
| helm install | 安装 | 
| my-nginx | release安装的名称或者版本 | 
| bitnami/nginx | bitn仓库名,nginx就是chart一系列yaml资源的集合 | 
| -n default | 指定命令空间 | 


②随机生成release名称创建:helm install bitnami/nginx --generate-name


(3)访问

(4)修改service的类型
kubectl edit svc my-nginx


(5)删除:helm uninstall my-nginx

(6)查看本机所有基于helm安装的release:helm ls/helm list

8、helm自定义模版:根据需求定义chart
(1)查看chart的模版
①拉取mysql的chart包:helm pull stable/mysql
tar -xf mysql-1.6.9.tgz

②安装tree:yum -y install tree


(2)自定义nginx的chart:helm create nginx

| charts | 用于存储依赖环境,如果这个chart依赖于其他的chart,依赖文件保存在这个目录 | 
| chart.yaml | chart的元数据文件,包含了这个chart的名称,版本,维护者信息等等 | 
| templates | 包含清单模版的目录 | 
| deployment.yaml | 部署应用的模版文件 | 
| helpers.tpl | 帮助文档,告诉用户如何定义模版的值 | 
| hpa.yaml | 定义了应用程序副本数的扩缩容行为 | 
| ingress.yaml | 定义了外部流量如何转发到应用程序 | 
| NOTES.txt | 注意事项 | 
| serviceaccou.yaml | 应用程序的服务账号 | 
| service.yaml | 集群内部的访问 | 
| test test-connection.yaml | 测试的目录和文件,部署完chart之后,用来测试的文件 | 
| values.yaml | 核心文件:自定义的值,都是通过values.yaml,把数据覆盖到安装的chart文件 | 
(3)修改配置文件
①vim Chart.yaml

②修改核心文件:vim values.yaml



(4)验证语法是否正确:helm lint nginx

(5)打包chart:helm package nginx

(6)检测:helm install nginx-1 ./nginx --dry-run --debug
| helm install | 安装 | 
| nginx-1 | release版本号 | 
| ./nginx | 当前目录下nginx的chart | 
| --dry-run --debug | 这个chart不会被部署到集群当中,用于参数验证,测试chart的配置是否正确 | 


(7)部署安装
①第一种:基于目录安装:helm install nginx-1 ./nginx -n default


删除(一键删除):helm uninstall nginx-1

②第二种:基于压缩包安装:helm install nginx-1 /opt/helm/nginx-0.1.0.tgz -n default


(8)配置映射

(9)安装ingres
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml


(10)访问测试


9、修改chart之后重新部署(更新)
(1)修改核心文件values.yaml


(2)修改service文件


(3)修改版本


(4)升级:helm upgrade nginx-1 nginx

(5)访问测试

10、回滚
(1)查看版本:helm history nginx-1

(2)回滚:helm rollback nginx-1 1

11、上传harbor仓库
(1)创建项目


(2)修改配置文件(部署chart的识别路径的方式)


(3)配置安装包
mkdir -p ~/.local/share/helm/plugins/helm-push
tar -xf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push

(4)登录仓库:docker login -u admin -p 123456 https://hub.test.com

(5)打包:helm package nginx

(6)上传仓库:
helm push nginx-0.2.0.tgz oci://hub.test.com/charts --insecure-skip-tls-verify


(7)拉取chart包:helm pull oci://hub.test.com/charts/nginx --version 0.2.0 --insecure-skip-tls-verify


(8)安装:helm install nginx-2 ./nginx-0.2.0.tgz

(9)删除仓库:helm repo remove aliyun

12、总结
(1)helm:一键部署微服务的工具,可以跳过繁琐的自定义yaml的过程,一键式的拉取和部署好所有自定义或者模版定义的服务
(2)helm的常用命令
| 添加仓库 | helm repo add 仓库名 url地址 | 
| 更新所有仓库 | helm repo update 不加仓库名 | 
| 查看仓库列表 | helm repo list | 
| 删除仓库 | helm repo remove 仓库名 | 
| 查看指定仓库中chart信息 | helm show chart stable/nginx | 
| 查看指定仓库中chart的详细信息 | helm show all stable/nginx | 
| 安装chart(官网的默认版本) | helm install nginx stable/nginx -n lucky-cloud | 
| 删除安装好的chart | helm uninstall nginx | 
| 查看已安装的chart | helm list | 
| 创建自定义的chart模版 | helm create nginx | 
| 安装自定义chart | helm install nginx ./nginx | 
| helm install nginx ./nginx-0.1.0.tgz | |
| 打包创建好的chart | helm package nginx | 
| 回滚 | helm history nginx | 
| helm rollback nginx 1 | 
