helm的作用
在没有helm之前,deploymen service ingress ,helm的作用就是通过打包的方式,把deployment,service,ingress 这些打包在一块,一键式的部署服务,类似yum 官方提供的一个类似于安装仓库的功能,可以实现一键化部署应用 |
Helm的概念
由三个部分组成
1 | chart:helm的软件包,包括部署包,service,ingress,是一些定义好的yaml资源,类似于yum的rpm包 |
2 | Release:可以理解为版本,也可以理解为在安装过程中,给部署的应用起一个名字 |
3 | Repository:仓库,提供一个服务器,这个服务器中包含chart的资源,yaml资源的保存地址 |
helm3纯命令行方式
常用的仓库 |
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 Helm Incubator | charts.heml.sh/incubator |
helm install my-nginx bitnami/nginx helm install:安装 My-nginx:release安装的名称或者版本 Bitnami/nginx:bitnami仓库名,nginx就是chart一系列yaml资源的集合 |
Helm自定义模版
根据自己的需求,定义chart,然后部署到集群当中去
Charts:用于存储依赖,如果这个chart依赖于其他的chart,依赖文件保存在这个目录 Chart.Yaml:helm chart的元数据文件,包含了这个chart的名称,版本,维护者信息等等 Yemplates: 包含清单模版的目录 Deployment.yaml:部署应用的模版文件 Helpers.tpl:帮助文档,告诉用户如何来定义模版的值 Hapa.yaml:定义了应用程序副本数的扩缩容行为 Ingress.yaml:定义了外部流量如何转发到应用程序 NOTES.txt:注意事项 Serviceaccount.yaml:应用程序的服务账号 Service.yaml:集群内部的访问 Tests test-connection.yaml:测试的目录和文件,部署完chart之后,用来测试的文件 Values.yaml:核心文件,自定义的值,都是通过values.yaml,把我们数据覆盖到安装的chart |
Helm install nginx-11 ./nginx --dry-run-debug Helm Install:安装chart nginx-1.1:release 版本号 ./ngin:当前目录下的nginx的chart --dry-run-debug:这个chart不会被部署到集群当中,参数验证,测试chart的配置是否正确 修改chart之后如何重新部署,回滚,上传harbor |
Helm的常用命令
1.helm repo add+仓库名+url地址 ,添加仓库
2.helm repo update +仓库名 ,不加仓库名,就是更新所有仓库
3.helm repo list +仓库列表
4.helm repo remove +仓库名称
5.helm show chart stable/nginx 查看chart信息
6.helm show all stable/nginx 查看详细信息
7.Helm install ngin-11 stable/nginx -n lucky-cloud 安装chart,安装官网的默认版本
8.Helm uninstall nginx-11 删除安装好的chart
9.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
如何回滚
Helm history nginx-11 ,然后helm rollback nginx-11 1
实验
[root@master01 ~]# cd /opt
[root@master01 opt]# mkdir helm
[root@master01 opt]# cd helm/
[root@master01 helm]# ls
[root@master01 helm]# ls
helm-v3.12.0-linux-amd64.tar.gz
[root@master01 helm]# tar -xf helm-v3.12.0-linux-amd64.tar.gz
[root@master01 helm]# ls
helm-v3.12.0-linux-amd64.tar.gz linux-amd64
[root@master01 helm]# cd linux-amd64/
[root@master01 linux-amd64]# mv helm /usr/local/bin/helm
[root@master01 linux-amd64]# helm version
version.BuildInfo{Version:"v3.12.0", GitCommit:"c9f554d75773799f72ceef38c51210f1842a1dea", GitTreeState:"clean", GoVersion:"go1.20.3"}
[root@master01 linux-amd64]# vim /etc/profile
source <(helm completion bash)
#添加自动补齐
[root@master01 linux-amd64]# source /etc/profile
#立即生效
[root@master01 linux-amd64]# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
stable http://mirror.azure.cn/kubernetes/charts
incubator https://charts.helm.sh/incubator
#查看当前仓库有哪些
[root@master01 linux-amd64]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "bitnami" chart repository
...Successfully got an update from the "incubator" chart repository
Update Complete. ⎈Happy Helming!⎈
#如何更新仓库,不加仓库名就是全部更新
[root@master01 linux-amd64]# helm search repo bitnami | grep nginx
bitnami/nginx 15.9.0 1.25.3 NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller 10.1.0 1.9.5 NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel 2.1.15 0.4.9 DEPRECATED NGINX Open Source for Intel is a lig...
#指定使用bitnami 仓库查看是否有 nginx 的yaml资源, 15.9.0 这个是仓库里的版本,1.25.3 这个是nginx 的版本,搜索资源
[root@master01 linux-amd64]# helm show chart bitnami/nginx
#查看详细信息
[root@master01 linux-amd64]# helm show all bitnami/nginx
#查看所有详细信息
helm install my-nginx bitnami/nginx
#helm install 安装 , my-nginx 安装的名称或者版本 ,bitnami/nginx bitnami仓库名,nginx就是chart一系列yaml资源的集合
删除
helm uninstall my-nginx
helm install bitnami/nginx --generate-nam
--generate-name 随机指定Release名称
helm ls 查看所有安装Release
helm自定义模版
helm pull stable/mysql
#拉取包(mysql)
解压
tar -xf mysql-1.6.9.tgz
创建nginx
helm create nginx
查看创建的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的名称,版本,维护者信息等等
Template 包含清单模版目录
deployment.yaml 部署应用的模版文件
helpers.tpl 帮助文档,告诉用户如何来定义模版的值
hpa.yaml 定义了应用程序副本数的扩缩容行为
ingress.yaml 定义了外部流量如何转发到应用程序
NOTES.txt 注意事项
serviceaccount.yaml 应用程序的服务账号
service.yaml 集群内部的访问
tests test-connection.yaml 测试的目录和文件,部署完chart之后,用来测试的文件
values.yaml 核心文件,自定义的值,都是通过values.yaml,把我们数据覆盖到安装的chart
修改values.yaml
# Default values for nginx.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 3
#创建的副本数
image:
repository: nginx
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: "1.22"
#指向镜像的版本
安装
方式1
helm install nginx-11 ./nginx -n default
方法二
helm install nginx-11 /opt/helm/linux-amd64/nginx-0.1.0.tgz -n default
删除
helm uninstall nginx-11
修改chart之后重新部署
修改values.yaml
.......
service:
type: NodePort
port: 80
nodePort: 31000
ingress:
enabled: false
className: ""
annotations: {}
......
修改service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ include "nginx.fullname" . }}
labels:
{{- include "nginx.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
nodePort: {{.Values.service.nodePort}}
selector:
{{- include "nginx.selectorLabels" . | nindent 4 }}
检测
helm lint nginx
更新
helm upgrade nginx-11 nginx
回滚
查看回滚
helm history nginx-11
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Jan 21 21:17:54 2024 superseded nginx-0.1.0 1.16.0 Install complete
2 Sun Jan 21 21:46:04 2024 deployed nginx-0.2.0 1.16.0 Upgrade complete
helm rollback nginx-11 1
上传harbor
修改Harbor
.....
harbor_admin_password: 123456
chart:
absolute_url: enabled
......
运行脚本
./install.sh
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
docker login -u admin -p 123456 https://hub.test.com
上传
helm push nginx-0.2.0.tgz oci://hub.test.com/charts --insecure-skip-tls-verif