1-helm
参考文档
网友关于helm的笔记
https://www.cnblogs.com/maiblogs/p/16771609.html
helm官方文档
https://helm.sh/zh/docs/
artifactHUB (chart模板下载)
https://artifacthub.io/packages/search?kind=0
helm中文文档
http://www.coderdocument.com/docs/helm/v2/helm_commands/helm_delete.html
helm介绍
-
helm相当于linux的yum,它提供了一个应用所需要的所有清单文件,helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供
-
Chart的实质只是一个模板,我们可以对这个模板进行赋值(value),形成我们自定义的清单文件,从而实现个性化的需求,这样的仓库叫Chart仓库。
-
Helm把Kubernetes资源打包到一个chart中,而chart被保存到chart仓库,通过chart仓库可用来存储和分享chart。helm工作在k8s集群之外,helm不直接操作apiserver,而是和Tiller交互,Tlller再和apiserver交互,最后由Apiserver把chart使用config赋值,最后部署成为release。
-
helm是tiller的客户端,管理本地的chart仓库,作用:发送chart、实例安装、查询、卸载等.
-
helm先去检查chart是否存在,如果存在就把chart下载到helm本机当前用户的家目录下,然后helm把Chart和Config交给tiller,tiller和api server交互,api server把chart部署在k8s集群上,部署在K8S集群中的chart叫release;一个chart赋值不同,完全可以部署出多个release出来,所以可以把chart看做是一个安装包的模板,如果发现chart更新了,helm会自动滚动更新,还支持一键回滚的操作.
主要概念
- Chart:一个Helm包,其中包含运行一个应用所需要的工具和资源定义,还可能包含Kubernetes集群中的服务定义。可以理解为包含了一组定义 Kubernetes 资源相关的YAML文件。
- Release:在Kubernetes集群上运行的一个Chart实例。在同一个集群上,一个Chart可以被安装多次。例如有一个MySQL Chart,如果想在服务器上运行两个MySQL数据库,就可以基于这个Chart安装两次。每次安装都会生成新的Release,会有独立的Release名称。
- Repository:Helm chart的仓库,Repository本质上是一个Web服务器,该服务器保存了一系列的Chart软件包以供用户下载,并且提供了一个该Repository的Chart包的清单文件以供查询。Helm可以同时管理多个不同的Repository。
- 简单来说,Helm整个系统的主要任务就是,在仓库中查找需要的Chart,然后将Chart以Release的形式安装到Kubernetes集群中。
helm架构图
- Helm v2是C/S架构,主要分为客户端helm和服务端Tiller。
- Helm v3移除了Tiller,只有helm。
- V2版本的架构中,Tiller在Kubernetes集群中,Helm Client发请求给Tiller需要经过RBAC认证。而V3版本是Helm通过kubeconfig连接kube-apiserver,避免了使用者去配置RBAC权限
安装helm v3
使用二进制包安装helm
wget https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz
tar zvfx helm-v3.8.2-linux-amd64.tar.gz
# helm是一个命令行工具,拷贝到/usr/local/bin/
cp linux-amd64/helm /usr/local/bin/
# 查看版本
helm version
#查看帮助
helm --help
helm的基本使用
# helm --help
Common actions for Helm:(Helm的常见动作)
helm search:搜索图charts
helm pull:下载charts到本地目录
helm install:将charts部署到Kubernetes
helm list:查看已经部署的charts的实例
Environment variables:(环境变量)
$HELM_CACHE_HOME:设置存储缓存文件的位置。
$HELM_CONFIG_HOME:设置配置文件。
$HELM_DATA_HOME:设置数据的存储位置
$HELM_DEBUG:是否在调试模式下运行
$HELM_DRIVER:设置后端的存储驱动。取值为:configmap、secret、memory、sql。
$HELM_DRIVER_SQL_CONNECTION_STRING:设置SQL存储驱动程序应该使用的连接字符串。
$HELM_MAX_HISTORY:设置helm release history的最大次数。
$HELM_NAMESPACE:设置命名空间。
$HELM_NO_PLUGINS:禁用插件。设置HELM_NO_PLUGINS=1禁用插件。
$HELM_PLUGINS:将路径设置为plugins目录
$HELM_REGISTRY_CONFIG:设置注册表(registry)配置文件的路径。
$HELM_REPOSITORY_CACHE:设置仓库(repository)缓存目录的路径。
$HELM_REPOSITORY_CONFIG:设置仓库(repositories)文件的路径。
$KUBECONFIG:设置Kubernetes认证配置文件(default "~/.kube/config")
$HELM_KUBEAPISERVER:设置Kubernetes API服务器端点进行身份验证。
$HELM_KUBECAFILE:设置Kubernetes证书颁发机构文件(CA)。
$HELM_KUBEASGROUPS:使用逗号分隔的列表设置要用于模拟的组。
$HELM_KUBEASUSER:设置用户名以模拟操作。
$HELM_KUBECONTEXT:设置kubeconfig上下文(context)的名称。
$HELM_KUBETOKEN:设置用于认证的不记名KubeToken。
Helm根据以下配置顺序存储缓存、配置和数据:
如果设置了HELM_*_HOME环境变量,则将使用它
否则,在支持XDG基本目录规范的系统上,将使用XDG变量
当没有设置其他位置时,将根据操作系统使用默认位置
默认情况下,默认目录依赖于操作系统。默认值如下所示:
Operating System Cache Path Configuration Path Data Path |
|------------------|---------------------------|--------------------------------|-------------------------|
Linux $HOME/.cache/helm $HOME/.config/helm $HOME/.local/share/helm |
macOS $HOME/Library/Caches/helm $HOME/Library/Preferences/helm $HOME/Library/helm |
Windows %TEMP%\helm %APPDATA%\helm %APPDATA%\helm |
Usage:
helm [command]
Available Commands:
completion 为指定的shell生成自动完成脚本
create 创建一个具有给定名称的新chart
dependency 管理chart的依赖关系
env 管理客户端环境信息
get 查看指定release(实例)的扩展信息
help 关于任何命令的帮助
history 获取releases历史
install 安装一个chart
lint 检查chart中可能出现的问题
list releases列表
package 将chart目录打包到chart存档中
plugin 安装,列出,或卸载Helm插件
pull 从仓库下载chart,并(可选)将其解压到本地目录中
push 将chart推送到仓库
registry 登录到注册中心或从注册中心注销
repo 添加、列出、删除、更新和索引本地chart仓库
rollback 将release回滚到以前的修订release
search 在chart仓库中搜索chart
show 显示chart的信息
status 显示命名release的状态
template 本地呈现模板
test 为发行版运行测试
uninstall 卸载一个release
upgrade 升级一个release
verify 验证给定路径上的chart是否已签名且有效
version 打印客户端版本信息
Flags:
--debug 启用详细输出
-h, --help 帮助
--kube-apiserver string Kubernetes API server的地址和端口
--kube-as-group stringArray 指定用户组。可以重复使用该参数以指定多个组。
--kube-as-user string 指定用户
--kube-ca-file string Kubernetes API服务器连接的证书颁发机构文件(CA)
--kube-context string 要使用的kubeconfig上下文的名称
--kube-token string 用于身份验证的承载令牌
--kubeconfig string kubeconfig文件的路径
-n, --namespace string 指定命名空间
--registry-config string 注册表(registry)配置文件的路径(default "/root/.config/helm/registry/config.json")
--repository-cache string 包含缓存仓库(repository)索引的文件的路径(default "/root/.cache/helm/repository")
--repository-config string 包含仓库名称和url的文件的路径(default "/root/.config/helm/repositories.yaml")
Use "helm [command] --help" for more information about a command.
release的相关操作
helm ls/list # 列出已经部署的release
helm ls/list -a # 列出所有release
helm ls/list -q # 只列出release名称
helm ls/list --deleted # 列出删除的release
helm history release_name # 查看release的历史版本
helm status release_name # 查询指定release的状态
helm delete release_name # 删除release
helm upgrade release_name . # 升级release,在chart的目录中执行
helm delete release_name --purge # 彻底删除release
helm upgrade -f values.yaml release_name . # 只升级这个文件中的变动项,在chart目录中执行
helm rollback release_name release_version # 将release回滚到指定版本
helm package chart_name --debug
chart仓库(repository)
- helm官方:https://hub.helm.sh/
- 开源社镜像:
* http://mirror.kaiyuanshe.cn/kubernetes/charts/
* http://mirror.azure.cn/kubernetes/charts/
helm repo --help # 查看帮助
helm repo list # 列出本地chart仓库
helm repo remove kaiyuanshe # 删除本地chart仓库
helm repo update # 更新本地chart仓库
# 添加chart仓库到本地(文件加载到了${HOME}/.cache/helm/repository/)
helm repo add kaiyuanshe http://mirror.kaiyuanshe.cn/kubernetes/charts/
# 查看描述信息,yaml文件怎么写的,一些注释的字段可以让用户自定义
helm inspect stable/mariadb
chart的相关操作
# 搜索Chart
helm search --help
Usage:
helm search [command]
Available Commands:
hub 在公网上的chart仓库中搜索chart,默认chart仓库是https://hub.helm.sh
repo 在本地chart仓库中搜索chart,不需要连接公网。
# 搜索mongodb
helm search repo mongodb
helm search hub mongodb
# 查看Chart的信息
helm show -h
Usage:
helm show [command]
Aliases:
show, inspect
Available Commands:
all 显示chart的所有信息
chart 显示chart的定义(definition)
crds 显示chart的CRDs
readme 显示chart的README
values 显示chart的values
# 下载、上传chart
# 从仓库下载chart
helm pull [chart URL | repo/chartname] [...] [flags]
# 将chart推送到仓库
helm push [chart] [remote] [flags]
# 下载mongodb的chart到本地当前目录
helm pull bitnami/mongodb
运行并管理release
1、运行/安装release
# 使用仓库直接运行release(文件加载到了${HOME}/.cache/helm/repository/xxx.tgz))
helm install mongodb-name1 bitnami/mongodb
helm install mongodb-name2 mongodb-13.1.7.tgz # 使用压缩包运行release
helm install mongodb-name3 mongodb/ # 使用解压后的目录运行release
helm install https://example.com/charts/foo-1.2.3.tgz # 从指定URL安装
2、查看已经运行的release
]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mongodb-name1 default 1 2022-10-09 17:54:13.504601252 +0800 CST deployed mongodb-13.1.7 6.0.2
3、获取release的状态
]# helm status mongodb-name1
4、删除releases
]# helm uninstall mongodb-name1
5、获取releases部署历史
]# helm history mongodb-name2
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Oct 9 17:54:13 2022 deployed mongodb-13.1.7 6.0.2 Install complete
6、升级和回滚
# 升级一个release
helm upgrade [RELEASE] [CHART] [flags]
# 回滚release
helm rollback <RELEASE> [REVISION] [flags]
7、调试
# 检查chart格式是否正确,在chart的上级目录运行
helm lint chart_name
只测试不安装
helm install --debug --dry-run my-rellease ./mychart
自定义chart
1.创建chart框架,命令在本地生成如下目录结构
helm crate template-chart
template-chart目录结构如下:
|--charts # 包含该chart所依赖的其他chart
|--Chart.yaml # 用于描述chart信息,包括名字、描述信息及版本等
|--values.yaml # 用于存储templates目录中模板文件中用到的变量值
|--templates # 存放模板yaml文件
|--_helpers.tpl # 放置模板助手的地方,可以在整个 chart 中重复使用
|--NOTES.txt # 用于介绍 Chart 帮助信息,helm install 部署后展示给用户
|--ingress.yaml # ingress配置文件
|--deployment.yaml # deployment配置文件
|--service.yaml # service配置文件
2.修改values.yaml文件和引用其中变量的文件(ingress.yaml deployment.yaml service.yaml)
values.yaml内容示例:
replicas: 1
image: nginx
tag: 1.16
deployment内容示例:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: USERNAME
value: {{ .Values.Username }}
3.校验打包
helm lint --strict template-chart # 校验
helm package template-chart # 打包
4.修改values.yaml中的默认参数(拿到模板后修改为适合自己的参数值)
在安装命令后接-f 指定文件名来额外配置,多个文件,最后一个优先生效,多个文件中重复的value会进行覆盖操作,不同值会叠加生效
echo "DBname: testdb" > my-values.yaml
echo "DBpwd: 1234563" > my-new-values.yaml
helm install my-app my-hello-world-0.1.0.tgz --set Username="Cloud Native"
helm install my-app1 my-hello-world-0.1.0.tgz -f my-values.yaml -f my-new-values.yaml
helm upgrade my-app1 my-hello-world-0.1.0.tgz -f my-new-values.yaml
快速制作自定义chart的思路
1.下载Chart,使用helm fetch stable/mariadb命令下载这一Chart的压缩包。
2.编辑Chart。
-利用tar解压之后,将目录重新命名为mymariadb。
-修改templates中的deployment.yaml,将image字段改为需要的镜像(或者以变量的方式在values中进行设置)
-将Chart.yaml中的版本号修改为0.1.1,name为mymariadb。
-使用helm lint mymariadb 检查chart配置是否正常
-使用helm package mymariadb --debug 打包Chart,并列出调试信息,会生成一个名为mymariadb-0.1.1.tgz的压缩包。
3.安装Chart,通过helm install mymariadb-0.1.1.tgz命令安装
Chart.yaml文件内容说明
Chart.yaml文件(注意首字母大写)是个必要文件,包含如下内容
name: // Chart的名称,必选
version: // SemVer 2规范的版本号,必选
name: // 管理员的名字,必选
email: // 管理员的邮件,必选
description: // 项目的描述,可选
keywords: // 一个用于描述项目的关键字列表,可选
home: // 项目的主页,可选
sources: // 一个URL列表,说明项目的源代码位置,可选
maintainers: // 维护者列表,可选
engine: // 模板引擎的名称,默认是gotpl,可选
icon: // 一个指向svg或png图像的URL,作为Chart的图标,可选
appVersion: // 在Chart中包含的应用的版本,无须遵循SemVer规范,可选
deprecated: // 布尔值,该Chart是否标注为“弃用”,可选
tillerVersion: // 可选,该Chart所需的Tiller版本。取值应该是一个SemVer的范围,例如“>2.0.0”
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)