Helm 基础
作者:行癫(盗版必究)
一:Helm 简介
1.简介
Helm 是 Kubernetes 的包管理器;它提供了提供、共享和使用为 Kubernetes 构建的软件的能力;是CNCF的毕业项目,自 Helm 加入 CNCF 以来,贡献代码的公司总数增加了 41%,从 930 家增加到 1,314 家;另一个关键的项目健康指标是贡献者的数量。自项目加入 CNCF 以来,Helm 的个人贡献者在两年内增长了 216%。在加入 CNCF 之前的三年里,Helm 积累了 3,642 名贡献者。此后的两年里,Helm 增加了 11,514 名贡献者。
2.安装部署
想成功和正确地使用Helm,需要以下前置条件
一个 Kubernetes 集群(本文环境:1.27.3 操作系统 Stream 9 x86_64)
确定你安装版本的安全配置
安装和配置Helm;Helm可以用源码或构建的二进制版本安装;本次将采用二进制方式安装
下载地址
https://github.com/helm/helm/releases(包含所有版本)
https://get.helm.sh/helm-v3.12.1-linux-amd64.tar.gz(本环境所需)
安装
[root@xingdiancloud-master ~]# tar xf helm-v3.12.1-linux-amd64.tar.gz -C /usr/local
[root@xingdiancloud-master ~]# ln -s /usr/local/linux-amd/helm /usr/bin/helm
3.配置仓库
包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum 或者Python中的 pip 一样,能快速查找、下载和安装软件包
添加仓库(官方仓库)
[root@xingdiancloud-master ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
阿里仓库
[root@xingdiancloud-master ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
测试仓库
[root@xingdiancloud-master ~]# helm search repo mysql
4.chart简介
Kubernetes管理的对象叫做资源(比如pod);helm作为kubernetes生态工具之一,将互相关联的多个资源统一打包成一个整体,交给 kubernetes 去运行;这个被打包的整体就叫做 chart;可以把 chart 跟程序的源码包做类比。
有了 chart,我们操作的对象不再是单个资源,而是实体;比如我们需要一个有负载均衡能力的 web 服务,如果不使用 chart,我们需要写 deployment,service 和 ingress 才可以让集群外部的客户使用;但是如果使用 chart,直接使用一个 install 命令便可以实现相同的功能。
二:Helm使用
1.Helm基础操作
helm search: 搜索chart
helm pull: 下载chart到本地目录查看
helm install: 上传chart到Kubernetes
helm list: 列出已发布的chart
注意:
helm install name(自定义) chart_name
2.相关指令
helm completion - 为指定的shell生成自动补全脚本
helm create - 使用给定的名称创建chart
helm dependency - 管理chart依赖
helm env - helm客户端环境信息
helm get - 下载命名版本的扩展信息
helm history - 检索发布历史
helm install - 安装chart
helm lint - 验证chart是否存在问题
helm list - 列举发布版本
helm package - 将chart目录打包
helm plugin - 安装、列举或卸载Helm插件
helm pull - 从仓库下载chart并(可选)在本地目录中打开
helm push - 推送chart到远程
helm registry - 从注册表登录或登出
helm repo - 添加、列出、删除、更新和索引chart仓库
helm rollback - 回滚发布到上一个版本
helm search - helm中搜索关键字
helm show - 显示chart信息
helm status - 显示命名版本的状态
helm template - 本地渲染模板
helm test - 执行发布的测试
helm uninstall - 卸载版本
helm upgrade - 升级版本
helm verify - 验证给定路径的chart已经被签名且是合法的
helm version - 打印客户端版本信息
3.相关变量
$HELM_CACHE_HOME 设置一个存储缓存文件的可选位置
$HELM_CONFIG_HOME 设置一个存储Helm配置的可选位置
$HELM_DATA_HOME 设置一个存储Helm数据的可选位置
$HELM_DEBUG 表示Helm是否在Debug模式系运行
$HELM_DRIVER 设置后台存储驱动,可选值包括:configmap, secret, memory, sql
$HELM_DRIVER_SQL_CONNECTION_STRING 设置SQL存储驱动使用连接字符串
$HELM_MAX_HISTORY 设置发布历史记录的最大值
$HELM_NAMESPACE 设置用于helm操作的命名空间
$HELM_NO_PLUGINS 禁用插件,HELM_NO_PLUGINS=1 表示禁用插件
$HELM_PLUGINS 设置插件目录路径
$HELM_REGISTRY_CONFIG 设置注册配置文件的路径
$HELM_REPOSITORY_CACHE 设置仓库缓存目录路径
$HELM_REPOSITORY_CONFIG 设置仓库文件的路径
$KUBECONFIG 设置Kubernetes的可选配置文件(默认是"~/.kube/config")
$HELM_KUBEAPISERVER 设置用于身份认证的Kubernetes API服务端
$HELM_KUBECAFILE 设置Kubernetes证书机构文件
$HELM_KUBEASGROUPS 使用逗号分隔的列表设置用于模拟的组
$HELM_KUBEASUSER 为操作设置要模拟的用户名
$HELM_KUBECONTEXT 设置kubeconfig上下文的名称
$HELM_KUBETOKEN 设置用于身份验证的不记名KubeToken
$HELM_KUBEINSECURE_SKIP_TLS_VERIFY 设置 Kubernetes API 服务的证书验证是否跳过(不安全)
$HELM_KUBETLS_SERVER_NAME 设置用于验证 Kubernetes API 服务器证书的服务器名称
$HELM_BURST_LIMIT 设置当 kubernetes 服务包含很大量CRD时的默认上限值(默认100, -1是不可用)
注意:
Helm 基于以下配置顺序存储缓存,配置和添加数据:
如果设置了 HELM_*_HOME 环境变量,则使用该变量
当没有设置其他位置时,将根据操作系统使用默认位置
默认情况下,默认目录取决于操作系统,默认值如下:
操作系统 缓存路径 配置路径 数据路径
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
4.仓库使用
helm repo
添加、列出、删除、更新和索引chart仓库
helm repo add - 添加chart仓库
helm repo index - 基于包含打包chart的目录,生成索引文件
helm repo list - 列举chart仓库
helm repo remove - 删除一个或多个仓库
helm repo update - 从chart仓库中更新本地可用chart的信息
添加:
helm repo add [NAME] [URL] [flags]
生成索引文件:
helm repo index [DIR] [flags]
基于包含打包chart的目录,生成索引文件
读取当前目录,并根据找到的 chart 生成索引文件
这个工具用来为chart仓库创建一个’index.yaml’文件,使用’–url’参数创建一个chart的绝对URL
要合并生成的索引和已经存在的索引文件时,使用’–merge’参数
在这个场景中,在当前目录中找到的chart会合并到已有索引中, 本地chart的优先级高于已有chart
仓库列表:
helm repo list [flags]
删除仓库:
helm repo remove [REPO1 [REPO2 ...]] [flags]
删除一个或多个仓库
仓库更新:
helm repo update [REPO1 [REPO2 ...]] [flags]
从chart仓库中更新本地可用chart的信息
更新从各自chart仓库中获取的有关chart的最新信息。信息会缓存在本地,被诸如’helm search’等命令使用
你可以指定需要更新的仓库列表。 $ helm repo update <repo_name> … 使用 ‘helm repo update’ 更新所有仓库
5.包的使用
helm package
将chart目录打包到chart归档中
该命令将chart打包成一个chart版本包文件。如果给定路径,就会在该路径中查找chart(必须包含Chart.yaml文件)然后将目录打包
chart版本包会用于Helm包仓库
语法格式
helm package [CHART_PATH] [...] [flags]
要签名一个chart,使用’–sign’参数,在大多数场景中,也要提供’–keyring path/to/secret/keys’和’–key keyname’
如果’–keyring’未指定,除非配置了其他方式,不然Helm通常会指定公共秘钥环
[root@xingdiancloud-master ~]# helm package --sign ./mychart --key mykey --keyring ~/.gnupg/secring.gpg
6.chart升级
helm upgrade
语法格式
helm upgrade [RELEASE] [CHART] [flags]
注意
该命令将发布升级到新版的chart
chart参数可以是:chart引用(‘example/mariadb’),chart目录路径,打包的chart或者完整URL
对于chart引用,除非使用’–version’参数指定,否则会使用最新版本
要在chart中重写value,需要使用’–values’参数并传一个文件或者从命令行使用’–set’参数传个配置
要强制字符串值,使用’–set-string’;当值本身对于命令行太长或者是动态生成的时候,可以使用 ‘–set-file’ 设置独立的值
可以在命令行使用’–set-json’参数设置json值(scalars/objects/arrays)
可以多次指定’–set’参数,最后(最右边)指定的优先级最高
[root@xingdiancloud-master ~]# helm upgrade -f myvalues.yaml -f override.yaml redis ./redis
[root@xingdiancloud-master ~]# helm upgrade --set foo=bar --set foo=newbar redis ./redis
7.chart卸载
helm uninstall
语法格式
helm uninstall RELEASE_NAME [...] [flags]
注意
该命令使用版本名称卸载版本
会删除与最新版本chart相关的所有资源以及发布历史,释放以供将来使用
使用’–dry-run’参数查看哪些版本将在不实际卸载的情况下能够被卸载
8.发布历史
helm history
语法格式
helm history RELEASE_NAME [flags]
注意
检索发布历史
打印给定版本的历史修订
默认会返回最大的256个历史版本。设置’–max’配置返回历史列表的最大长度
[root@xingdiancloud-master ~]# helm history angry-bird
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Initial install
2 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Upgraded successfully
3 Mon Oct 3 10:15:13 2016 superseded alpine-0.1.0 1.0 Rolled back to 2
4 Mon Oct 3 10:15:13 2016 deployed alpine-0.1.0 1.0 Upgraded successfully
9.版本回滚
helm rollback
语法格式
helm rollback <RELEASE> [REVISION] [flags]
注意
回滚发布到上一个版本
回滚命令的第一个参数是发布的名称,第二是修订(版本)号,如果省略此参数,会回滚到上一个版本
要查看修订号,执行’helm history RELEASE’
10.chart安装
helm install
语法格式
helm install [NAME] [CHART] [flags]
注意
该命令用于安装chart包
安装参数必须是chart的引用,一个打包后的chart路径,未打包的chart目录或者是一个URL
要重写chart中的值,使用’–values’参数传递一个文件或者使用’–set’参数在命令行传递配置,强制使用字符串要用’–set-string’
[root@xingdiancloud-master ~]# helm install -f myvalues.yaml myredis ./redis
[root@xingdiancloud-master ~]# helm install --set name=prod myredis ./redis
[root@xingdiancloud-master ~]# helm install --set-string long_int=1234567890 myredis ./redis
[root@xingdiancloud-master ~]# helm install --set-file my_script=dothings.sh myredis ./redis
[root@xingdiancloud-master ~]# helm install --set-json 'master.sidecars=[{"name":"sidecar","image":"myImage","imagePullPolicy":"Always",ports":[{"name":"portname","containerPort":1234}]}]' myredis ./redis
多次指定’–values’/'-f’参数。最右侧指定的文件优先级最高
[root@xingdiancloud-master ~]# helm install -f myvalues.yaml -f override.yaml myredis ./redis
可以指定’–set’参数多次,最右边的参数优先级最高
[root@xingdiancloud-master ~]# helm install --set foo=bar --set foo=newbar myredis ./redis
示例中’foo’被设置成了’[“four”]’
[root@xingdiancloud-master ~]# helm install --set-json='foo=["one", "two", "three"]' --set-json='foo=["four"]' myredis ./redis
有六种不同的方式来标识需要安装的chart:
通过chart引用: helm install mymaria example/mariadb
通过chart包: helm install mynginx ./nginx-1.2.3.tgz
通过未打包chart目录的路径: helm install mynginx ./nginx
通过URL绝对路径: helm install mynginx https://example.com/charts/nginx-1.2.3.tgz
通过chart引用和仓库url: helm install --repo https://example.com/charts/ mynginx nginx
通过OCI注册中心: helm install mynginx --version 1.2.3 oci://example.com/charts/nginx
11.显示chart信息
helm show
helm show all - 显示chart的所有信息
helm show chart - 显示chart定义
helm show crds - 显示chart的CRD 自定义资源文件
helm show readme - 显示chart的README
helm show values - 显示chart的values
显示chart的所有信息
helm show all [CHART] [flags]
该命令检查chart(目录、文件或URL)并显示所有的内容(values.yaml, Chart.yaml, README)
12.Helm拉取
helm pull
语法格式
helm pull [chart URL | repo/chartname] [...] [flags]
从仓库下载并(可选)在本地目录解压
从包仓库中检索包并下载到本地
13.Helm推送
helm push
语法格式
helm push [chart] [remote] [flags]
将chart推送到远程
上传chart到注册表
如果chart有其他相关文件,也会一起上传
14.插件管理
helm plugin
安装、列举或卸载Helm插件
helm plugin install - 安装一个或多个Helm插件
helm plugin list - 列举已安装的Helm插件
helm plugin uninstall - 卸载一个或多个Helm插件
helm plugin update - 升级一个或多个Helm插件
15.Helm搜索
helm search
helm中搜索关键字
搜索提供了可以在已经添加的Artifact Hub和仓库等多个位置搜索Helm chart 的能力
helm search hub - 在Artifact Hub或自己的hub实例中搜索chart
helm search repo - 用chart中关键字搜索仓库
注意:Artifact Hub 是一个基于 Web 的应用程序,可以查找、安装和发布 Kubernetes 包
16.Helm 模板
helm template
语法格式
helm template [NAME] [CHART] [flags]
本地渲染模板并显示输出
17.Helm 注册表
helm registry
登录或登出注册表
helm registry login - 登录注册表
helm registry logout - 从注册表登出
18.Helm 测试
helm test
语法格式
helm test [RELEASE] [flags]
执行发布版本的测试
该命令使用的参数是部署版本的名称,要运行的测试在已安装的chart中定义
19.添加仓库
helm repo add
语法格式
helm repo add [NAME] [URL] [flags]
添加、列出、删除、更新和索引chart仓库
20.Helm 创建
helm create
语法格式
helm create NAME
使用给定名称创建新的chart
该命令创建chart目录和chart用到的公共文件目录
foo/
├── .helmignore # Contains patterns to ignore when packaging Helm charts.
├── Chart.yaml # Information about your chart
├── values.yaml # The default values for your templates
├── charts/ # Charts that this chart depends on
└── templates/ # The template files
└── tests/ # The test files
注意:
如果给定目录路径不存在,Helm会自动创建。如果给定目录存在且非空,冲突文件会被覆盖,其他文件会被保留
20.Helm 创建
helm create
语法格式
helm create NAME
使用给定名称创建新的chart
该命令创建chart目录和chart用到的公共文件目录
foo/
├── .helmignore # Contains patterns to ignore when packaging Helm charts.
├── Chart.yaml # Information about your chart
├── values.yaml # The default values for your templates
├── charts/ # Charts that this chart depends on
└── templates/ # The template files
└── tests/ # The test files
[外链图片转存中…(img-5wMZBZkh-1688312428366)]
注意:
如果给定目录路径不存在,Helm会自动创建。如果给定目录存在且非空,冲突文件会被覆盖,其他文件会被保留