helm1-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与k8s的兼容版本
https://helm.sh/zh/docs/v3/topics/version_skew - helm的github下载地址
https://github.com/helm/helm/releases/tag/v3.16.3
# 使用二进制包安装helm
wget https://get.helm.sh/helm-v3.16.3-linux-amd64.tar.gz
tar zvfx helm-v3.16.3-linux-amd64.tar.gz
# helm是一个命令行工具,拷贝到/usr/local/bin/
cp linux-amd64/helm /usr/local/bin/
# 查看版本
helm version
#查看帮助
helm --help
chart仓库(repository)
- helm官方:https://hub.helm.sh/
- bitnami https://charts.bitnami.com/bitnami 比特纳米:配置灵活,中间件多
- stable https://charts.helm.sh/stable helm历史官方仓库:适合入门
- apphub https://apphub.aliyuncs.com 阿里云:国内镜像,下载快,适合学习 云原生监控体系部署
- eks https://aws.github.io/eks-charts 亚马逊:适合学习 Helm 在云厂商 K8s 集群的部署实践
- elastic https://helm.elastic.co ELK/ELK专项仓库
- prometheus-community https://prometheus-community.github.io/helm-charts Prometheus监控专项仓库
仓库常用命令
添加仓库
helm repo add # 添加chart仓库
helm repo add harbor https://helm.goharbor.io # 添加harbor仓库,harbor是自定义的仓库名,后面的是仓库的地址
- 添加harbor仓库后会在用户家目录下创建相应文件
# 仓库元信息文件 ~/.config/helm/repositories.yaml
root@node01:~# ls .config/helm/
repositories.lock repositories.yaml
# 仓库索引缓存文件 ~/.cache/helm/repository/harbor-index.yaml
root@node01:~# ls .cache/helm/repository/
harbor-charts.txt harbor-index.yaml
其他仓库命令
helm repo --help # 查看帮助
helm repo list # 列出本地chart仓库
helm repo remove REPO_NAME # 删除本地名为REPO_NAME的chart仓库
helm repo update # 更新本地chart仓库
chart的常用命令
查看charts
# 查看公网/本地所有仓库中的全部 Charts
helm search hub|repo
# hub 在公网上的chart仓库中搜索chart
# repo 在本地chart仓库中搜索chart,不需要连接公网。
# 查看本地harbor charts仓库的所有Charts
helm search repo harbor/
# 搜索所有仓库中含「mysql」关键词的Charts
helm search repo mysql
# 搜索bitnami仓库中含「redis」关键词的Charts
helm search repo bitnami/redis
查看Chart的信息
# 语法
helm inspect OPTION
# 可用选项
# all 显示chart的所有信息,就是包含以下选线的所有输出
# chart 显示chart的元数据。包含 Chart 版本、应用版本、依赖、描述、适用 K8s 版本
# crds 显示chart的自定义资源的定义
# readme 显示chart的README
# values 显示chart的values.yaml 完整内容
# 查看远程仓库中 Chart 的默认配置(最常用,无需下载)
helm inspect values harbor/harbor > ./harbor_value.yaml # 远程harbor仓库的harbor Chart
# 查看本地 Chart 压缩包的配置
helm inspect values ./harbor-1.18.2.tgz
# 查看本地解压后 Chart 目录的配置
helm inspect values ./harbor
# 查看远程仓库 Chart 元数据
helm inspect chart bitnami/mongodb --version 13.6.0
# 查看本地 Chart 压缩包/目录元数据
helm inspect chart ./mongodb-13.6.0.tgz > harbor_chart.yaml
helm inspect chart ./mongodb/
下载chart
# 下载本地仓库bitnami中的mongodb
helm pull bitnami/mongodb
# -d 指定chart压缩包的下载路径
# --untar 解压下载的chart包
# --untardir 指定chart包的解压路径,和--untar配合使用
其他???
# 下载、上传chart
# 从仓库下载chart
helm pull [chart URL | repo/chartname] [...] [flags]
# 将chart推送到仓库
helm push [chart] [remote] [flags]
安装chart
helm install happy-panda bitnami/wordpress
release的相关操作
- 已经安装到 Kubernetes 集群中的 Chart 实例,官方标准称谓就是 Release
列出release
helm ls/list # 列出已经部署的release
helm ls/list -a # 列出默认命名空间所有的release
helm ls/list -A # 列出全部命名空间的release
helm ls/list -q # 只列出release名称
helm ls/list --deleted # 列出删除的release
删除release
helm delete release_name # 删除release
查看release状态、历史
helm history release_name # 查看release的历史版本
helm status release_name # 查询指定release的状态
升级release
helm upgrade release_name . # 升级release,在chart的目录中执行
helm upgrade -f values.yaml release_name . # 只升级这个文件中的变动项,在chart目录中执行
回滚release
helm rollback release_name release_version # 将release回滚到指定版本
实验:运行并管理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
自定义chart
创建chart模板
# 创建chart框架,命令在本地生成如下目录结构
helm create 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配置文件
Chart依赖的子Chart
- condition 字段告诉 Helm:请通过 subchart1.enabled 和 global.subchart1.enabled 这两个参数,判断当前子 Chart 是否启用;
# parentchart/Chart.yaml
dependencies:
- name: subchart1
repository: http://localhost:10191
version: 0.1.0
condition: subchart1.enabled,global.subchart1.enabled
tags:
- front-end
- subchart1
- name: subchart2
repository: http://localhost:10191
version: 0.1.0
condition: subchart2.enabled,global.subchart2.enabled
tags:
- back-end
- subchart2
- values.yaml决定是否启用子chart
- 不配置默认表示禁止子chart
# parentchart/values.yaml
subchart1:
enabled: true # 配置优先级高于下面的tags中的配置
tags:
front-end: false # 不启用有front-end标签的chart
back-end: true # 启用有back-end标签的chart
快速制作自定义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”
helm --help
# 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.

浙公网安备 33010602011771号