Helm是什么?
在没有helm之前。部署一个服务,需要deployment、service、ingress、挂在卷等等相关配置都需要人工来配置。
helm的作用就是通过打包的方式,把需要人工编写的配置集成在一起。是一键式的部署服务。类似于yum功能。
由官方提供的一个类似于安装仓库的功能,开源实现以简化部署应用。
helm由哪些部分组成?
helm由三个部分组成:
-
chart:helm的软件包、部署包、service、ingress。是一些定义好的yaml资源。类似于yum的rpm包
-
Release:可以理解为版本。也可以理解为在安装过程中,给部署的应用起一个名字。
-
Repository:仓库,提供一个服务器,这个服务器当中包含chart的资源,提供yaml资源的保存地址。
由于helm2已经被淘汰了。helm3成为主流。以下均是对helm3的讨论
helm3是纯命令行方式
安装helm:
bash
1. 安装helm:
tar -xf helm-v3.12.0-linux-amd64.tar.gz
cd linux-amd64/
mv helm /usr/local/bin/helm
source <(helm completion bash)
source /etc/profile
helm version
#查看helm版本v3.12
2. 安装仓库:
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
命令行命令:
helm repo list
#查看仓库列表
helm repo update
#如何更新仓库的资源
语法: helm search repo aliyun | grep 服务名称
helm search repo aliyun | grep nginx
#过滤查找你需要的服务
语法: helm show chart 仓库名/应用名
helm show chart bitnami/nginx
#查看简要信息
helm show all bitnami/nginx
#查看详细信息
语法:helm install 名称 仓库名/应用名 -n 指定命名空间
helm install my-nginx bitnami/nginx -n default
#helm install:安装
#my-nginx:release安装的名称或者版本
#bitnami/nginx: bitnami是仓库名。nginx就是chart一些列yaml的资源的结合
#安装一个版本叫my-nginx的服务从bitnami仓库下载。指定的chart是nginx
#-n:指定命名空间

这个资源包里面包含nginx的pod、deployment、service
bash
语法:helm uninstall 名称
helm uninstall my-nginx
#一键删除所有

bash
helm install bitnami/nginx --generate-name
#--generate-name:随机生成一个release名称

bash
helm ls
helm list
#查看当前安装的所有release

如何在helm当中自定义模板
根据自己的需求定义chart。根据自定义模板部署到集群当中去。
实验举例:
bash
helm pull stable/mysql
tar -xf mysql-1.6.9.tgz
通过tree查看文件包含哪些内容
这时官方提供的安装包
我们可以自己自定义一个安装包
helm create nginx
tree nginx/
nginx/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
组织结构解析:
charts:用于存储依赖。如果这个chart依赖于其他的chart,依赖文件保存在这个目录
Chart.yaml:helm chart的元数据文件,包含了这个chart的名称,版本,维护者信息等等
templates:包含清单模板的目录
deployment.yaml:部署应用的模板文件
helpers.tpl:帮助文档,告诉用户如何来定义模板的值
hpa.yaml:定义了应用程序副本数的扩缩容行为
ingress.yaml:定义外部流量如何转发到应用程序
NOTES.txt:注意事项
serviceaccount.yaml:应用程序的服务账号
service.yaml:集群内部的访问配置
tests、test-connection.yaml:测试的目录和文件。部署完成chart后可以使用它来进行测试验证的文件。
values.yaml:核心文件,自定义的值都是通过values.yaml把数据覆盖到安装的chart。
vim Chart.yaml
version: 0.1.0
#部署完之后如果打包,那么版本就是0.1.0版本


bash
实现自定义访问:
cd nginx/
vim values.yaml
所有在这里定义的值都会传参到各个yaml文件中
修改一些内容
replicaCount: 3
#表示会创建几个副本,传入一个值定义副本数为3个
tag: "1.22"
#指定nginx镜像的版本,可以自定义
create: true
enabled: true
- host: www.lucky-cloud.com
pathType: Prefix
limits:
cpu: 1000m
memory: 512Mi
helm lint nginx
#验证语法。需要在chart目录的上一层检测。如果在目录内检测会报错



bash
helm package nginx/
#将自定义的chart文件打包
Successfully packaged chart and saved it to: /opt/helm/nginx-0.1.0.tgz
helm install nginx-11 ./nginx --dry-run --debug
#helm install:安装chart
#nginx-11:release版本号
#./nginx:当前目录下的nginx的chart
#--dry-run --debug:这个chart不会被部署到集群当中,验证参数,测试chart的配置是否正确。

bash
方法1:基于目录安装
helm install nginx-11 ./nginx -n default
#一键部署当前目录下的nginx-chart取名叫nginx-11并且指定命名空间
helm uninstall nginx-11
#一键删除


bash
方法2:基于目录打包好的压缩包安装
helm install nginx-11 /opt/helm/nginx-0.1.0.tgz -n default
#使用压缩包安装

修改chart之后如何重新部署
bash
vim values.yaml
修改一些内容做为区分
service:
type: NodePort
port: 80
nodePort: 31000
ingress:
enabled: false
vim service.yaml
nodePort: {{.Values.service.nodePort}}
#go语言的语法将values.yaml中定义的端口传到service.yaml文件中
vim Chart.yaml
version: 0.2.0
#修改版本号做区分
helm upgrade nginx-11 nginx




如何回滚
bash
helm history nginx-11
#查看chart的回滚点
helm rollback nginx-11 1
#回滚

如何上传到harbor仓库
bash
vim harbor.yml
./install.sh
#执行重新安装仓库
harbor_admin_password: 123456
chart:
absolute_url: enabled
#在chart当中使用绝对路径的URL例如:http://hub.test.com/charts
$chart上传不支持相对路径
mkdir -p ~/.local/share/helm/plugins/helm-push
#创建一个helm插件的目录
docker login -u admin -p 123456 https://hub.test.com
#登录docker-hub仓库测试
helm package nginx
#打包nginx为压缩包
helm push nginx-0.2.0.tgz oci://hub.test.com/charts --insecure-skip-tls-verify
#--insecure-skip-tls-verify:跳过tls验证



上传成功
重新从hub仓库拉取测试:
bash
helm pull oci://hub.test.com/charts/nginx --version 0.2.0 --insecure-skip-tls-verify
helm install nginx-22 ./nginx-0.2.0.tgz
#直接通过安装包安装即可



总结
helm就是一个部署微服务的工具,可以跳过繁琐的自定义yaml过程,一键式拉取和部署号素有自定义或者模板自定义的服务
helm的常用命令:
bash
helm repo add 仓库名 url地址:添加仓库
helm repo update 不加仓库名:就是更新所有仓库
helm repo list:仓库列表
helm repo remove 仓库名
helm show chart stable/nginx:查看chart信息
helm show all stable/nginx:查看详细信息
helm install nginx-11 stable/nginx -n lucky-cloud:安装chart,安装官网的默认版本
helm uninstall nginx-11:删除安装好的chart
helm list:查看已经安装的chart
自定义模板:
helm create nginx:创建一个自定义的chart模板
values.yaml:这里的值会传递给templates里面的yaml真贱
helm install nginx-11 ./nginx
helm install nginx-11 ./nginx-0.1.0.tgz
两种安装部署chart的方式都可以
helm package nginx:打包创建好的chart
回滚:
helm history nginx-11
helm rollback nginx-11 1:回滚 1表示指定回滚点