Helm
写在前面:
本文根据Helm官方文档helm进行编写,对Helm常用命令的使用,选项参数等进行了解释。阅读本文需要掌握Helm的基本使用。
Helm
是什么?正如在官方介绍的那样,是一款Kubernetes 包管理器。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。
三大概念
Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。
Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。
在了解了上述这些概念以后,我们就可以这样来解释 Helm:
Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。
1. Install
# 下载helm
$ wget https://get.helm.sh/helm-v3.13.1-linux-amd64.tar.gz
# 解压helm 并将二进制包添加进bin下
$tar -zxvf helm-v3.13.1-linux-amd64.tar.gz
$ cp linux-amd64/helm /usr/local/bin/
# 查看helm版本
$ helm version
version.BuildInfo{Version:"v3.13.1", GitCommit:"3547a4b5bf5edb5478ce352e18858d8a552a4110", GitTreeState:"clean", GoVersion:"go1.20.8"}
2.Inner Objec
Helm
提供了很多内置对象供我们在模板中进行使用。
Release对象描述了版本发布本身。包含了以下对象:
Release.Name
: release名称Release.Namespace
: 版本中包含的命名空间(如果manifest没有覆盖的话)Release.IsUpgrade
: 如果当前操作是升级或回滚的话,该值将被设置为true
Release.IsInstall
: 如果当前操作是安装的话,该值将被设置为true
Release.Revision
: 此次修订的版本号。安装时是1,每次升级或回滚都会自增Release.Service
: 该service用来渲染当前模板。Helm里始终是Helm
Values: Values
对象是从values.yaml
文件和用户提供的文件传进模板的。默认为空
Chart: Chart.yaml
文件内容。 Chart.yaml
里的所有数据在这里都可以可访问的。比如 {{ .Chart.Name }}-{{ .Chart.Version }}
会打印出 mychart-0.1.0
Files: 在chart中提供访问所有的非特殊文件的对象。你不能使用它访问Template
对象,只能访问其他文件。 请查看这个文件访问部分了解更多信息
Files.Get
通过文件名获取文件的方法。 (.Files.Getconfig.ini
)Files.GetBytes
用字节数组代替字符串获取文件内容的方法。 对图片之类的文件很有用Files.Glob
用给定的shell glob模式匹配文件名返回文件列表的方法Files.Lines
逐行读取文件内容的方法。迭代文件中每一行时很有用Files.AsSecrets
使用Base 64编码字符串返回文件体的方法Files.AsConfig
使用YAML格式返回文件体的方法
Template: 包含当前被执行的模板信息
Template.Name
: 当前模板的命名空间文件路径 (e.g.mychart/templates/mytemplate.yaml
)Template.BasePath
: 当前chart模板目录的路径 (e.g.mychart/templates
)
:fire:: 内置的值都是以大写字母开始, 这是符合Go的命名惯例。当你创建自己的名称时,可以按照团队约定自由设置。 就像很多你在 Artifact Hub 中看到的chart,其团队选择使用首字母小写将本地名称与内置对象区分开。
3.Command
Repository
helm repo
可以用来添加、删除、列举和索引chart仓库
List
helm repo list
列出所有Chart的仓库
语法:
helm repo list [flags]
选项:
-o, --output format # 指定输出格式: table, json, yaml (默认为 table)
例子:
# 列出所有Chart仓库
$ helm repo list
NAME URL
grafana https://grafana.github.io/helm-charts
bitnami https://charts.bitnami.com/bitnami
orange https://shyunny.github.io/orange-helm/charts/
# 以yaml格式列出所有仓库
$ helm repo list -o yaml
helm repo list -o yaml
- name: grafana
url: https://grafana.github.io/helm-charts
- name: bitnami
url: https://charts.bitnami.com/bitnami
- name: orange
url: https://shyunny.github.io/orange-helm/charts/
Update
helm repo update
更新从各自Chart仓库中获取的有关chart的最新信息。信息会缓存在本地,被诸如helm search
等命令使用。
语法:
helm repo update [REPO1 [REPO2 ...]] [flags]
选项:
--fail-on-repo-update-fail # 如果任何存储库更新失败,则更新失败
例子:
# 更新binamiChart仓库, 如果更新失败则认为失败
$ helm repo update bitnami --fail-on-repo-update-fail
Hang tight while we grab the latest from your chart repositories...
...Unable to get an update from the "bitnami" chart repository (https://charts.bitnami.com/bitnami):
context deadline exceeded (Client.Timeout or context cancellation while reading body)
Update Complete. ⎈Happy Helming!⎈
Index
helm repo index
基于打包chart的目录,生成索引文件。读取当前目录,并根据找到的 Chart 生成索引文件。这个工具用来为chart仓库创建一个index.yaml
文件,使用--url
参数创建一个chart的绝对URL。
要合并生成的索引和已经存在的索引文件时,使用--merge
参数。
语法:
helm repo index [DIR] [flags]
选项:
--merge string # 根据已有的index.yaml进行合并
--url string # Chart仓库的url
例子:
# 根据已有的index.yaml进行合并, 同时设置仓库url为www.example.com
$ helm repo index charts/ --merge charts/index.yaml --url www.example.com
Add
helm repo add
添加一个Chart仓库
语法:
helm repo add [NAME] [URL] [flags]
选项:
--allow-deprecated-repos # 默认情况下,这个命令不允许添加已经被永久删除的正式仓库。这将禁用该行为。
--ca-file string # 使用此CA包验证启用https的服务器的证书 (在内网自签名中会使用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端 (在内网自签名中会使用)
--force-update # 如果仓库已经存在,则替换(覆盖)它
--insecure-skip-tls-verify # 跳过对存储库的TLS证书检查 (这是不安全的, 建议仅在测试阶段进行使用)
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端 (在内网自签名中会使用)
--pass-credentials # 将凭证传递给所有domains
--password string # chart仓库密码
--password-stdin # 从stdin读取chart仓库密码
--username string # chart仓库用户
例子:
# 添加一个chart私服
$ helm repo add orange https://shyunny.github.io/orange-helm/charts/ --force-update
"orange" has been added to your repositories
Remove
helm repo remove
删除一个或多个Chart仓库
语法:
helm repo remove [REPO1 [REPO2 ...]] [flags]
选项:
# 无
例子:
# 删除orange仓库
$ helm repo remove orange
Dependency
helm dependency
用于管理Chart依赖
Helm chart将依赖存储在charts/
目录中。对于chart开发者,管理声明了所有依赖的Chart.yaml
文件更容易。
依赖命令对该文件进行操作,使得存储在charts/
目录的需要的依赖和实际依赖之间同步变得很容易。
比如Chart.yaml声明了一个guestbook
的依赖:
# Chart.yaml
dependencies:
- name: guidebook # file
version: "0.1.0"
repository: "file:///workspace/helm/guestbook/charts/guidebook/"
- name: guidebook # remote url
version: "0.2.0"
repository: "www.example.com/charts"
- name: guidebook # remote repo
version: "0.1.0"
repository: "@bitnami" # 或者alias:bitnami
-
name
是chart名称,必须匹配目标依赖的Chart.yaml
文件中名称。 -
version
字段应该包含一个语义化的版本或版本范围,必须匹配目标依赖的Chart.yaml
文件中版本。 -
repository
的URL应该指向Chart仓库。Helm希望通过附加index.yaml
到URL,应该能检索chart库索引。注意:
repository
不能直接声明别名。别名必须以alias:
或@
开头。
仓库可以被定义为本地存储的依赖chart的目录路径。路径应该以file://
前缀开头。
如果在本地检索依赖chart,可以不需要使用
helm add repo
将仓库加入到helm。
List
helm dependency list
列举所有的chart中声明的依赖。该命令可以将chart包或chart目录作为输入,不会修改chart的内容。如果chart不能加载会产生错误。
语法:
helm dependency list CHART [flags]
选项:
--max-col-width uint # 输出结果的最大宽度(默认80)
例子:
# 列出所有bookinfo的所有依赖
$ helm dependency list bookinfo
NAME VERSION REPOSITORY STATUS
guidebook 0.1.0 file:///workspace/helm/guestbook/charts/guidebook/ ok
Update
helm dependency update
更新依赖为Chart.yaml指定内容。该命令验证存储在'charts/'目录中的'Chart.yaml'文件描述的所需chart以及所需版本。 它会拉取满足依赖的最新chart并清理旧依赖。成功更新后,会生成一个锁定文件用来重新构建精确版本的依赖。
不需要在'Chart.yaml'中表示依赖。 因此,更新命令不会删除chart,除非是在Chart.yaml文件中的错误版本。
语法:
helm dependency update CHART [flags]
选项:
--keyring string # 包含公钥的密匙 (default "~/.gnupg/pubring.gpg")
--skip-refresh # 不刷新本地存储库缓存
--verify # 根据签名验证package
例子:
# 如果声明的依赖是在本地, 可以不需要刷新缓存, 这样有助于提高速度
$ helm dependency update bookinfo --skip-refresh
Saving 1 charts
Deleting outdated charts
Build
helm dependency build
从Chart.lock构建输出到charts/目录。该构建是用来将chart的依赖项重建为锁定文件中的指定状态。就像helm dependency update
一样并不会调整依赖状态。
如果没找到锁定文件,
helm dependency build
映射到helm dependency update
helm dep build
和helm dep update
的区别:一个是根据Chart.lock
进行构建,另外一个是根据Chart.yaml
进行构建。
语法:
helm dependency build CHART [flags]
选项:
--keyring string # 包含公钥的密匙 (default "~/.gnupg/pubring.gpg")
--skip-refresh # 不刷新本地存储库缓存
--verify # 根据签名验证package
例子:
# 如果声明的依赖是在本地, 可以不需要刷新缓存, 这样有助于提高速度
$ helm dep build bookinfo --skip-refresh
Saving 1 charts
Deleting outdated charts
List
helm list
命令会列举出指定命名空间的所有Release版本,(如果没有指定命名空间,会使用当前命名空间)。
默认情况下,只会列举出部署的或者失败的发布,像--uninstalled
或者--all
会修改默认行为。这些参数可以组合使用:--uninstalled --failed
默认情况下,列表按字母排序。使用-d
参数按照日期排序。
如果使用--filter
参数,会作为一个过滤器。过滤器是应用于发布列表的正则表达式(兼容Perl)。只有过滤器匹配的才会返回。
$ helm list --filter 'ara[a-z]+'
NAME UPDATED CHART
maudlin-arachnid 2020-06-18 14:17:46.125134977 +0000 UTC alpine-0.1.0
如果未找到结果,helm list
会退出,但是没有输出。
默认情况下,最多返回256项,使用--max
限制数量,--max
设置为0不会返回所有结果,而是返回服务器默认值,可能要比256更多。 同时使用--max
和--offset
参数可以翻页显示。
语法:
helm list [flags]
选项:
-a, --all # 获取所有Release
-A, --all-namespaces # 获取所有namespace的Release
-d, --date # 按照Release时间进行排序
--deployed # 显示已部署的版本。如果没有指定其他版本,将自动启用
--failed # 显示失败的Release
-f, --filter string # 正则表达式(Perl兼容)过滤器。任何与表达式匹配的版本都将包含在结果中
-m, --max int # 获取Release的数量 默认为256
--no-headers # 当使用默认输出格式时,不要打印头信息
--offset int # 列表中的下一个发布版本index,用于从起始值偏移
-o, --output format # 指定输出格式 可选值: table, json, yaml (默认为 table)
--pending # 显示Pending的Release
-r, --reverse # 反转排序顺序
-l, --selector string # 选择器(标签查询)进行过滤,支持'='、'=='和'!=' (例: -l key1=value1,key2=value2) 仅适用于secret(默认)和configmap存储后端。
-q, --short # 输出短列表格式
--superseded # 显示superseded Release
--time-format string # 使用golang时间格式化器格式化时间. 示例: ——time-format "2006-01-02 15:04:05Z0700"
--uninstalled # 显示uninstall的Release(如果使用了`helm uninstall ——keep-history `)
--uninstalling # 显示当前正在uninstall的Release
例子:
# 列出所有Release
$ helm list -a
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
map-v1 argo 1 2023-10-28 15:00:56.482351712 +0800 CST deployed bookinfo-0.1.0 1.16.0
# 列出所有Realse, 并且格式化时间, 以yaml格式输出
$ helm list --time-format "2006-01-02" -o yaml
- app_version: 1.16.0
chart: bookinfo-0.1.0
name: map-v1
namespace: argo
revision: "1"
status: deployed
updated: "2023-10-28"
# 列出所有被uninstall的Release
$ helm list --uninstalled --time-format "2006-01-02"
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
map-v1 argo 1 2023-10-28 uninstalled bookinfo-0.1.0 1.16.0
Package
helm package
将chart目录打包到chart归档中
该命令将chart打包成一个chart版本包文件。如果给定路径,就会在该路径中查找chart(必须包含Chart.yaml文件)然后将目录打包。
chart版本包会用于Helm包仓库。
语法:
helm package [CHART_PATH] [...] [flags]
选项:
--app-version string # 将chart上的appVersion设置为此版本
-u, --dependency-update # 在packaging前, 会对chart中的依赖项进行更新
-d, --destination string # chart归档文件的输出路径
--key string # 签名时使用的key的名称。用于——sign为true时
--keyring string # 公钥keyring的位置(默认为"~/.gnupg/pubring.gpg")
--passphrase-file string # 包含签名密钥密码的文件的位置 使用'-'从stdin中读取
--sign # 使用PGP私钥对这个包进行签名
--version string # 将chart上的版本设置为此semver版本
例子:
# 将bookinfo chart进行打包, 同时修改appVersion
$ helm package bookinfo --app-version 0.0.1_rc-2
:fire: 注意,通过
--app-version
和--version
设置chart的信息实际上会覆盖Chart.yaml
中对应的版本信息。
Get
helm get
这个命令由多个子命令组成,可以用来获取版本的扩展信息,包括:
- 用于生成Release的value
- 生成的清单文件
- 由chart提供的notes
- Release关联的hooks
- Release版本的元数据
All
helm get all
命令打印一个具有可读性的信息集合,包括notes,hooks,提供的values,以及给定版本生成的清单文件。
语法:
helm get all RELEASE_NAME [flags]
选项:
--revision int # 获取Release指定的revision
--template string # 使用goTemplate格式化输出,例: {{.Release.Name}}
例子:
# 使用go template获取Release的name
$ helm get all image-info --template "{{ .Release.Name }}"
image-info
# 获取指定Release所有信息
$ helm get all image-info
NAME: image-info
LAST DEPLOYED: Sat Oct 28 15:25:39 2023
NAMESPACE: argo
STATUS: deployed
REVISION: 1
CHART: bookinfo
VERSION: 0.1.0
APP_VERSION: 1.16.0
TEST SUITE: None
USER-SUPPLIED VALUES:
null
COMPUTED VALUES:
image:
name: application
pullPolicy: IfNotPresent
tag: 0.1.5_rc-2
HOOKS:
MANIFEST:
---
# Source: bookinfo/templates/info.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: image-info
namespace: argo
data:
image: "application:0.1.5_rc-2"
imagePolicy: "IfNotPresent"
Notes
helm get notes
命令显示了由指定Release chart提供的注释(notes)
语法:
helm get notes RELEASE_NAME [flags]
选项:
--revision int # 指定Release的revision
例子:
# 获取image-info Release的notes
$ helm get notes image-info
NOTES:
# Hello
This is a image info
Manifest
helm get manifest
获取指定Release的manifest清单
该命令用来获取指定Release的manifest清单文件
manifest清单是由该Release的chart生成的Kubernetes资源的YAML编码表示。
语法:
helm get manifest RELEASE_NAME [flags]
选项:
--revision int # 指定Release的revision
例子:
# 获取image-info的manifest
$ helm get manifest image-info
---
# Source: bookinfo/templates/info.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: image-info
namespace: argo
data:
image: "application:0.1.5_rc-2"
imagePolicy: "IfNotPresent"
Hooks
helm get hooks
获取指定Release的所有hooks
hooks被格式化为YAML格式并以YAML的
---
分隔符分隔
语法:
helm get hooks RELEASE_NAME [flags]
选项:
--revision int # 指定Release的revision
例子:
# 查看image-info的hooks
$ helm get hooks image-info
---
# Source: bookinfo/templates/hooks.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: hook-cm
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": hook-succeeded
data:
version: "i'm a hook!"
Values
helm get values
获取指定Release的values.yaml
文件
语法:
helm get values RELEASE_NAME [flags]
选项:
-a, --all # dump所有(计算)值
-o, --output format # 指定输出格式.可选值: table, json, yaml (默认 table)
--revision int # 指定Release的revision
例子:
# 获取image-info的value值
$ helm get values image-info
helm get values image-info
USER-SUPPLIED VALUES:
null
# 获取image-info的value值, 包含计算值
$ helm get values image-info -a
COMPUTED VALUES:
image:
name: application
pullPolicy: IfNotPresent
tag: 0.1.5_rc-2
:fire: 注意: 默认情况下
helm get values
获取的是通过-f
或者--set
命令行参数设置USER-SUPPLIED VALUES
的值,如果需要获取values.yaml
文件的计算值,需要提供-a
参数
Metadata
helm get metadata
获取指定Release的元数据
语法:
helm get metadata RELEASE_NAME [flags]
选项:
-o, --output format # 指定输出格式.可选值: table, json, yaml (默认 table)
--revision int # 指定Release的revision
例子:
# 获取image-info Release的元数据
$ helm get metadata image-info
NAME: image-info
CHART: bookinfo
VERSION: 0.1.0
APP_VERSION: 1.16.0
NAMESPACE: argo
REVISION: 3
STATUS: deployed
DEPLOYED_AT: 2023-10-28T15:41:42+08:00
Create
helm create
使用给定名称创建新的chart,该命令创建chart目录和chart用到的公共文件目录
比如helm create foo
会创建一个目录结构看起来像这样:
foo/
├── .helmignore # 定义Helm charts打包时要忽略的文件
├── Chart.yaml # chart的信息文件
├── values.yaml # 定义模板的默认值
├── charts/ # chart的依赖项目录
└── templates/ # 模板文件目录
└── tests/ # 测试文件目录
helm create
使用一个目录作为参数。如果给定目录路径不存在,Helm会自动创建。
:fire: 如果给定目录存在且非空,冲突文件会被覆盖,其他文件会被保留。
语法:
helm create NAME [flags]
选项:
-p, --starter string # Helm starter scaffold的名称或绝对路径
例子:
# 创建reids chart
$ helm create redis
# 查看生成的文件
$ tree redis/
redis/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
Lint
helm lint
验证chart是否存在格式问题,该命令使用一个chart路径并运行一系列的测试来验证chart的格式是否正确。
:fire: 如果遇到引起chart安装失败的情况,会触发[ERROR]信息,如果遇到违反惯例或建议的问题,会触发[WARNING]。
语法:
helm lint PATH [flags]
选项:
--set stringArray # 在命令行上设置values(可以指定多个值或用逗号分隔:key1=val1,key2=val2)
--set-file stringArray # 通过命令行从文件获取值设置到values上(可以指定多个或用逗号分隔的值:key1=path1,key2=path2)
--set-json stringArray # 在命令行中设置JSON值设置到values上(可以指定多个或以逗号分隔的值:key1=JsonVal1,key2=JsonVal2)
--set-literal stringArray # 在命令行上设置一个字面值字符串值到values上
--set-string stringArray # 在命令行中设置字符串值到values上(可以指定多个或以逗号分隔的值:key1=val1,key2=val2)
--strict # lint为waring认为是失败的检测
-f, --values strings # 指定YAML文件或URL中的值到values上(可以指定多个)
--with-subcharts # 检测chart的依赖项
例子:
# 检测bookinfo, 并通过--set设置值
$ helm lint bookinfo --set image.name="0.2.0_canary_1"
==> Linting bookinfo
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed
# 检测bookinfo, 并通过--strict进行严格检测
$ helm lint bookinfo --strict
==> Linting bookinfo
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed
Show
helm show [subcommand]
显示chart的信息
Chart
helm show chart
显示chart定义,该命令检查chart(目录、文件或URL)并显示Chart.yaml文件的内容
语法:
helm show chart [CHART] [flags]
选项:
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当验证远程仓库的chart时使用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端 (当验证远程仓库的chart时使用)
--devel # 使用开发版本,这等价于版本` >0.0.0-0 ` 如果设置了——version,则忽略此设置
--insecure-skip-tls-verify # 跳过tls下载chart (建议在测试环境使用)
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认 "~/.gnupg/pubring.gpg")
--pass-credentials # 将凭证传递给所有 domains
--password string # chart仓库的密码
--username string # chart仓库的用户
--repo string # chart存储库url, 用于定位所请求的chart
--verify # 在使用package前进行验证
--version string # 指定chart版本要使用的版本约束,这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
例子:
# 显示本地bookinfo目录的chart信息
$ helm show chart bookinfo
helm show chart bookinfo
apiVersion: v2
appVersion: 1.16.0
description: A Helm chart for Kubernetes
name: bookinfo
type: application
version: 0.1.0
# 显示bitnami远程仓库的redis chart信息
$ helm show chart bitnami/redis --version 18.2.0
annotations:
category: Database
images: |
- name: os-shell
image: docker.io/bitnami/os-shell:11-debian-11-r90
- name: redis-exporter
image: docker.io/bitnami/redis-exporter:1.55.0-debian-11-r0
- name: redis-sentinel
image: docker.io/bitnami/redis-sentinel:7.2.2-debian-11-r0
- name: redis
image: docker.io/bitnami/redis:7.2.2-debian-11-r0
licenses: Apache-2.0
apiVersion: v2
appVersion: 7.2.2
dependencies:
- name: common
repository: oci://registry-1.docker.io/bitnamicharts
tags:
- bitnami-common
version: 2.x.x
description: Redis(R) is an open source, advanced key-value store. It is often referred
to as a data structure server since keys can contain strings, hashes, lists, sets
and sorted sets.
home: https://bitnami.com
icon: https://bitnami.com/assets/stacks/redis/img/redis-stack-220x234.png
keywords:
- redis
- keyvalue
- database
maintainers:
- name: VMware, Inc.
url: https://github.com/bitnami/charts
name: redis
sources:
- https://github.com/bitnami/charts/tree/main/bitnami/redis
version: 18.2.0
Crds
helm show crds
显示指定chart的CRD,该命令检查chart(目录、文件或URL)并显示自定义资源(CustomResourceDefinition)文件的内容。
:fire: 显示的是
chart/crds
目录下的自定义资源定义文件
语法:
helm show crds [CHART] [flags]
选项:
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当验证远程仓库的chart时使用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端 (当验证远程仓库的chart时使用)
--devel # 使用开发版本,这等价于版本` >0.0.0-0 ` 如果设置了——version,则忽略此设置
--insecure-skip-tls-verify # 跳过tls下载chart (建议在测试环境使用)
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认 "~/.gnupg/pubring.gpg")
--pass-credentials # 将凭证传递给所有 domains
--password string # chart仓库的密码
--username string # chart仓库的用户
--repo string # chart存储库url, 用于定位所请求的chart
--verify # 在使用package前进行验证
--version string # 指定chart版本要使用的版本约束,这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
例子:
# 查看bookinfo chart的crd
$ helm show crds bookinfo
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
...
Readme
helm show readme
显示chart的README,该命令检查chart(目录、文件或URL)并显示chart/README
文件内容
语法:
helm show readme [CHART] [flags]
选项:
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当验证远程仓库的chart时使用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端 (当验证远程仓库的chart时使用)
--devel # 使用开发版本,这等价于版本` >0.0.0-0 ` 如果设置了——version,则忽略此设置
--insecure-skip-tls-verify # 跳过tls下载chart (建议在测试环境使用)
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认 "~/.gnupg/pubring.gpg")
--pass-credentials # 将凭证传递给所有 domains
--password string # chart仓库的密码
--username string # chart仓库的用户
--repo string # chart存储库url, 用于定位所请求的chart
--verify # 在使用package前进行验证
--version string # 指定chart版本要使用的版本约束,这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
例子:
# 显示bookinfo chart的README文件
$ helm show readme bookinfo
# hello
## i'm bookinfo readme
Values
helm show values
显示指定chart的values,该命令检查chart(目录、文件或URL)并显示chart/values.yaml
文件的内容
语法:
helm show values [CHART] [flags]
选项:
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当验证远程仓库的chart时使用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端 (当验证远程仓库的chart时使用)
--devel # 使用开发版本,这等价于版本` >0.0.0-0 ` 如果设置了——version,则忽略此设置
--insecure-skip-tls-verify # 跳过tls下载chart (建议在测试环境使用)
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认 "~/.gnupg/pubring.gpg")
--pass-credentials # 将凭证传递给所有 domains
--password string # chart仓库的密码
--username string # chart仓库的用户
--repo string # chart存储库url, 用于定位所请求的chart
--verify # 在使用package前进行验证
--version string # 指定chart版本要使用的版本约束,这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
--jsonpath string # 提供一个JSONPath表达式来过滤输出
例子:
# 展示bookinfo的values
$ helm show values bookinfo
image:
name: application
pullPolicy: IfNotPresent
tag: "0.1.5_rc-2"
# 展示bookinfo的values, 并通过JsonPath进行过滤获取镜像名
$ helm show values bookinfo --jsonpath '{.image.name}'
application
All
helm show all
显示指定chart的所有信息,该命令检查chart(目录、文件或URL)并显示所有的内容:(chart/values.yaml
, chart/Chart.yaml
,chart/README
)
语法:
helm show all [CHART] [flags]
选项:
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当验证远程仓库的chart时使用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端 (当验证远程仓库的chart时使用)
--devel # 使用开发版本,这等价于版本` >0.0.0-0 ` 如果设置了——version,则忽略此设置
--insecure-skip-tls-verify # 跳过tls下载chart (建议在测试环境使用)
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认 "~/.gnupg/pubring.gpg")
--pass-credentials # 将凭证传递给所有 domains
--password string # chart仓库的密码
--username string # chart仓库的用户
--repo string # chart存储库url, 用于定位所请求的chart
--verify # 在使用package前进行验证
--version string # 指定chart版本要使用的版本约束,这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
例子:
# 显示bookinfo chart的所有信息
$ helm show all bookinfo
Install
helm install
命令用于安装chart包。安装参数必须是chart的引用,可以是打包后的chart路径,未打包的chart目录或者是一个URL。
想要要重写chart中的值,使用--values
参数传递一个文件或者使用--set
参数在命令行传递配置,强制使用字符串要用--set-string
。 当值本身对于命令行太长或者是动态生成的时候,可以使用 --set-file'
设置独立的值。也可以在命令行使用--set-json
参数设置json值。
你可以多次指定--values/-f
参数。最右侧指定的文件优先级最高。
# 最右侧文件优先级最高
$ helm install bookinfo bookinfo-1.0.0.gz -f val1.yaml -f val2.yaml
你也可以指定--set
参数多次,最右边的参数优先级最高。
如果为了检测生成的清单,但并不安装到chart,可以将
--debug
和--dry-run
组合使用。
# 最右侧参数优先级最高
$ helm install bookinfo bookinfo-1.0.0.gz --set image=bookinfo:v1.0.1_rc-2 --set image=bookinfo:v1.0.2
如果设置了--verify
,chart必须有出处文件,且出处文件必须传递所有的验证步骤。
有六种不同的方式来标识需要安装的chart:
Chart引用
chart引用是在chart仓库中引用chart的一种方便方式。
当你用仓库前缀('example/mariadb')引用chart时,Helm会在本地配置查找名为 'example' 的chart仓库, 然后会在仓库中查找名为'mariadb'的仓库,然后会安装这个chart最新的稳定版本,除非指定了'--devel'参数且包含了开发版本(alpha, beta,和候选版本),或者使用'--version'参数提供一个版本号。
要查看仓库列表,使用helm repo list
。要在仓库中搜索chart,使用helm search
语法:
helm install [NAME] [CHART] [flags]
选项:
--atomic # 如果设置,在安装过程失败时删除安装. 如果使用了——atomic,——wait标志会自动设置
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当安装远程仓库的chart时有用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端
--create-namespace # 如果chart声明的namespace不存在,在创建release时创建对应的namespace.
--dependency-update # 如果在安装chart之前缺少依赖项,则更新chart的依赖
--description string # 添加自定义的description描述
--devel # 使用开发版本。等价于版本` >0.0.0-0 `。如果设置了——version,则忽略此设置
--disable-openapi-validation # 如果设置, 安装过程将不会根据Kubernetes OpenAPI模式验证渲染的模板 (在debug渲染的chart时很有用)
--dry-run # 模拟运行 (在debug渲染的chart时很有用)
--enable-dns # 渲染模板时启用DNS lookups
--force # 通过替换策略强制资源更新
-g, --generate-name # 随机生成名称(将会省略name)
--insecure-skip-tls-verify # 跳过TLS证书检查, 下载chart
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认: "~/.gnupg/pubring.gpg")
--name-template string # 指定用于命名Release的模板
--no-hooks # 在安装过程中不运行hooks
-o, --output format # 指定输出格式. 可选值: table, json, yaml (默认 table)
--pass-credentials # 将凭证传递给所有domains
--password string # chart仓库的密码
--post-renderer postrenderer # 用于post渲染的可执行文件的路径。如果它存在于PATH中,二进制文件将被使用,否则它将尝试在给定的路径中寻找可执行文件(默认的exec)
--render-subchart-notes # 如果设置了,将子chart的notes与父chart的notes一起展示
--replace # 重复使用给定的Release名称, 仅当该名称是保留在历史中的已删除版本时。 (这在生产环境中是不安全的,在测试阶段可以进行替代)
--repo string # 安装目标chart的仓库
--set stringArray # 在命令行上设置值到values上(可以指定多个值或用逗号分隔:key1=val1,key2=val2)
--set-file stringArray # 通过命令行设置文件中的值到values上(可以指定多个或用逗号分隔的值:key1=path1,key2=path2)
--set-json stringArray # 在命令行中设置JSON值到values上(可以指定多个或以逗号分隔的值:key1=JsonVal1,key2=JsonVal2)
--set-literal stringArray # 在命令行上设置一个字面值字符串值
--set-string stringArray # 在命令行中设置字符串值到values上(可以指定多个或以逗号分隔的值:key1=val1,key2=val2)
--skip-crds # 如果设置,则不安装crd。默认情况下, 会先安装"chart/crds"下的CRD
--timeout duration # 等待任何单独Kubernetes操作的超时时间(例如hooks的任务)(默认5m0s)
--username string # chart仓库的用户
-f, --values strings # 指定YAML文件或URL中值作用到values上(可以指定多个)
--verify # 在使用package之前验证它
--version string # 指定chart版本要使用的版本约束。这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
--wait # 如果设置了,将等待所有的pod、pvc、Services和Deployment、StatefulSet或ReplicaSet的**最小**pod数量都处于就绪状态,然后才将发布标记为成功。它将等待的时间为——timeout
例子:
# 安装bookinfo,将Release命名为bookinfo-release,并且等待所有资源安装完毕, 超时时间为3min
$ helm install bookinfo-release bookinfo.gz --wait --timeout 3m
# 用于测试bookinfo的chart的渲染是否合法
$ helm install bookinfo-demo bookinfo.gz --dry-run --debug
# 在测试环境替代bookinfo-release的chart, 如果安装失败则自动删除安装
$ helm install bookinfo-release bookinfo_rc.gz --replace --atomic
# 测试bookinfo_rc, 不希望测试其hooks
$ helm install bookinfo-rc-release bookinfo_rc.gz --no-hooks
Uninstall
helm uninstall
命令用于卸载已安装的Release,会删除与最新版本chart相关的所有资源以及发布历史
使用--dry-run
参数可以查看哪些Release将在不实际卸载的情况下能够被卸载
语法:
helm uninstall RELEASE_NAME [...] [flags]
选项:
--cascade string # 资源的级联删除策略,必须是"background"、"orphan"或"foreground"。默认为background删除
--description string # 添加自定义的description描述
--dry-run # 模拟运行
--keep-history # 删除所有关联的资源并将Release标记为已删除,但保留发布历史 (这可以通过"helm history"进行追溯)
--no-hooks # 在uninstall过程不执行hooks
--timeout duration # 等待任何单独Kubernetes操作的超时时间(例如hooks的任务)(默认5m0s)
--wait # 如果设置了,将等待所有资源删除后才返回. 它将等待与——timeout相同的时间
例子:
# 删除bookinfo release, 但保留对应的revision
$ helm uninstall bookinfo --keep-history
# 删除bookinfo release, 通过前台策略进行删除
$ helm uninstall bookinfo --cascade "foreground"
# 阻塞等待所有资源删除完成, 超时时间为3min
$ helm uninstall bookinfo --wait --timeout 3m
Upgrade
helm upgrade
命令用于升级Release。升级参数必须是Release和chart。chart参数可以是:chart引用('example/mariadb'),chart目录路径,打包的chart或者完整URL。 对于chart引用,除非使用--version
参数指定,否则会使用最新版本。
语法:
helm upgrade [RELEASE] [CHART] [flags]
选项:
--atomic # 如果设置,在安装过程失败时删除安装. 如果使用了——atomic,——wait标志会自动设置
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当安装远程仓库的chart时有用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端
--create-namespace # 如果chart声明的namespace不存在,在创建release时创建对应的namespace.
--cleanup-on-fail # 允许在升级失败时删除本次升级中创建的**新资源**
--dependency-update # 如果在安装chart之前缺少依赖项,则更新chart的依赖
--description string # 添加自定义的description描述
--devel # 使用开发版本。等价于版本` >0.0.0-0 `。如果设置了——version,则忽略此设置
--disable-openapi-validation # 如果设置, 安装过程将不会根据Kubernetes OpenAPI模式验证渲染的模板 (在debug渲染的chart时很有用)
--dry-run # 模拟安装 (在debug渲染的chart时很有用)
--enable-dns # 渲染模板时启用DNS lookups
--force # 通过替换策略强制资源更新
--history-max int # 限制每个Release保存的最大revision数。使用0表示没有限制(默认为10)
-i, --install # 如果需要升级的Release还不存在,则运行install
--insecure-skip-tls-verify # 跳过TLS证书检查, 下载chart
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认: "~/.gnupg/pubring.gpg")
--name-template string # 指定用于命名Release的模板
--no-hooks # 在安装过程中不运行hooks
-o, --output format # 指定输出格式. 可选值: table, json, yaml (默认 table)
--pass-credentials # 将凭证传递给所有domains
--password string # chart仓库的密码
--post-renderer postrenderer # 用于post渲染的可执行文件的路径。如果它存在于PATH中,二进制文件将被使用,否则它将尝试在给定的路径中寻找可执行文件(默认的exec)
--render-subchart-notes # 如果设置了,将子chart的notes与父chart的notes一起展示
--replace # 重复使用给定的Release名称, 仅当该名称是保留在历史中的已删除版本时。 (这在生产环境中是不安全的,在测试阶段可以进行替代)
--repo string # 安装目标chart的仓库
--set stringArray # 在命令行上设置值到values上(可以指定多个值或用逗号分隔:key1=val1,key2=val2)
--set-file stringArray # 通过命令行设置文件中的值到values上(可以指定多个或用逗号分隔的值:key1=path1,key2=path2)
--set-json stringArray # 在命令行中设置JSON值到values上(可以指定多个或以逗号分隔的值:key1=JsonVal1,key2=JsonVal2)
--set-literal stringArray # 在命令行上设置一个字面值字符串值
--set-string stringArray # 在命令行中设置字符串值到values上(可以指定多个或以逗号分隔的值:key1=val1,key2=val2)
--skip-crds # 如果设置,则不安装crd。默认情况下, 会先安装"chart/crds"下的CRD
--timeout duration # 等待任何单独Kubernetes操作的超时时间(例如hooks的任务)(默认5m0s)
--username string # chart仓库的用户
-f, --values strings # 指定YAML文件或URL中值作用到values上(可以指定多个)
--verify # 在使用package之前验证它
--version string # 指定chart版本要使用的版本约束。这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
--wait # 如果设置了,将等待所有的pod、pvc、Services和Deployment、StatefulSet或ReplicaSet的**最小**pod数量都处于就绪状态,然后才将发布标记为成功。它将等待的时间为——timeout
--wait-for-jobs # 如果设置了——wait-for-jobs并且启用了——wait,则将等待所有作业完成后再将发布标记为成功。它将等待与——timeout相同的时间
例子:
# 升级bookinfo (此时bookinfo Release并不存在)
$ helm upgrade bookinfo bookinfo.gz -i
# 升级bookinfo,并且等待升级完成
$ helm upgrade bookinfo bookinfo.gz --wait
History
helm history
命令用于检索Release历史,打印给定Release的历史修订revision。
默认会返回最大的256个历史版本。设置--max
配置返回历史列表的最大长度。
语法:
helm history RELEASE_NAME [flags]
选项:
--max int # Release的最大历史revision 默认为256
-o, --output format # 指定打印格式. 可选值: table, json, yaml (默认 table)
例子:
# 打印image-info的所有历史revision
$ helm history image-info
helm history image-info
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sat Oct 28 15:25:39 2023 superseded bookinfo-0.1.0 1.16.0 Install complete
2 Sat Oct 28 15:33:50 2023 superseded bookinfo-0.1.0 1.16.0 Upgrade complete
3 Sat Oct 28 15:41:42 2023 deployed bookinfo-0.1.0 1.16.0 Upgrade complete
Env
helm env
命令用于打印helm所使用的环境变量
语法:
helm env
选项:
# 无
例子:
# 打印所有helm env
$ helm env
HELM_BIN="helm"
HELM_BURST_LIMIT="100"
HELM_CACHE_HOME="/root/.cache/helm"
HELM_CONFIG_HOME="/root/.config/helm"
HELM_DATA_HOME="/root/.local/share/helm"
HELM_DEBUG="false"
HELM_KUBEAPISERVER=""
HELM_KUBEASGROUPS=""
HELM_KUBEASUSER=""
HELM_KUBECAFILE=""
HELM_KUBECONTEXT=""
HELM_KUBEINSECURE_SKIP_TLS_VERIFY="false"
HELM_KUBETLS_SERVER_NAME=""
HELM_KUBETOKEN=""
HELM_MAX_HISTORY="10"
HELM_NAMESPACE="argo"
HELM_PLUGINS="/root/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry/config.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"
Rollback
helm rollback
命令用于将Release回滚上一个revision版本。回滚命令的第一个参数是Release的名称,第二是Revision(版本)号,如果省略此参数,会回滚到上一个版本。
:fire: 要查看修订号,执行
helm history RELEASE
语法:
helm rollback <RELEASE> [REVISION] [flags]
选项:
--cleanup-on-fail # 允许在回滚失败时删除本次回滚中创建的**资源**
--dry-run # 试运行
--force # 如果需要,强制使用delete/recreate更新资源
--history-max int # 限制每个Release保存的最大revision数。使用0表示没有限制(默认为10)
--no-hooks # 在回滚过程阻止hooks的运行
--recreate-pods # 对资源pods执行重启操作(如果适用)
--timeout duration # 等待任何单独Kubernetes操作的超时时间(例如hooks的任务)(默认5m0s)
--wait # 如果设置了,将等待所有的pod、pvc、Services和Deployment、StatefulSet或ReplicaSet的**最小**pod数量都处于就绪状态,然后才将发布标记为成功。它将等待的时间为——timeout
--wait-for-jobs # 如果设置了——wait-for-jobs并且启用了——wait,则将等待所有作业完成后再将发布标记为成功。它将等待与——timeout相同的时间
例子:
# 将image-info从revision=4回滚到revision=3
# 查看image-info的revision
$ helm history image-info
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sat Oct 28 15:25:39 2023 superseded bookinfo-0.1.0 1.16.0 Install complete
2 Sat Oct 28 15:33:50 2023 superseded bookinfo-0.1.0 1.16.0 Upgrade complete
3 Sat Oct 28 15:41:42 2023 superseded bookinfo-0.1.0 1.16.0 Upgrade complete
4 Sun Oct 29 13:45:58 2023 deployed bookinfo-0.1.0 1.16.0 Upgrade complete
# 将image-info进行回滚
$ helm rollback image-info 3
Rollback was a success! Happy Helming!
Pull
helm pull
命令用于从远程仓库下载并在本地目录解压(可选)。下载chart之后有解压的选项,会为chart创建一个目录并解压到这个目录中。
对于要获取检查,修改或重新打包的包很有用,还可以用于在不安装chart的情况下对chart进行加密验证。
如果指定了--verify
参数,请求的chart必须有出处文件,且必须通过验证。任意部分的失败都会导致错误,且chart不会在本地保存。
语法:
helm pull [chart URL | repo/chartname] [...] [flags]
选项:
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当安装远程仓库的chart时有用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端
-d, --destination string # chart的保存的路径. 如果指定了'-d'和'untardir', untardir会附加到'-d'后面(默认为'.')
--devel # 使用开发版本。等价于版本` >0.0.0-0 `。如果设置了——version,则忽略此设置
--insecure-skip-tls-verify # 跳过TLS证书检查, 下载chart
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认: "~/.gnupg/pubring.gpg")
--pass-credentials # 将凭证传递给所有domains
--password string # chart仓库的密码
--prov # 获取出处文件,但不进行验证
--repo string # 指定获取chart的仓库
--untar # 如果设置,将在下载chart之后对该chart进行untar操作
--untardir string # 如果指定untar, 则此标志指定图表展开到的目录的名称 (默认 ".") ('untar'+'untardir'组合使用可以将chart下载后解压至指定路径)
--username string # chart仓库的用户
--verify # 在使用package之前验证它
--version string # 指定chart版本要使用的版本约束。这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
例子:
# 下载binami的redis chart, 并解压到/home/redis目录下
$ helm pull bitnami/redis --version 18.2.0 --untar --untardir /home/redis
# 查看redis chart
$ tree /home/redis/
/home/redis/
└── redis
├── Chart.lock
├── charts
│ └── common
│ ├── Chart.yaml
│ ├── README.md
│ ├── templates
│ │ ├── _affinities.tpl
│ │ ├── _capabilities.tpl
......
Push
helm push
命令用于将chart推送到远程仓库或者注册表中。
如果chart有其他相关文件,也会一起上传
语法:
helm push [chart] [remote] [flags]
选项:
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当安装远程仓库的chart时有用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端
--insecure-skip-tls-verify # 跳过TLS证书检查, 下载chart
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
例子:
# 将bookinfo推送到私服
$ helm push bookinfo.tgz my-repo
# 将bookinfo推送到OCI规范容器registry
$ helm push bookinfo.tgz oci://localhost:7000/helm-charts
Search
helm search [subcommand]
命令提供了可以在已经添加的Artifact Hub和仓库等多个位置搜索Helm chart 的能力。
Hub
helm search hub
命令可以在Artifact Hub或自己的hub实例中搜索chart。
语法:
helm search hub [KEYWORD] [flags]
选项:
--endpoint string # 查询chart的hub端点endpoint (default "https://hub.helm.sh")
--list-repo-url # 打印chart repo url
--max-col-width uint # 输出表的最大列宽(默认值50)
-o, --output format # 指定输出格式. 可选值: table, json, yaml (默认 table)
例子:
# 在artifact hub中搜寻 elasticsearch chart, 同时提供此chart的仓库url, 最后以yaml格式输出
$ helm search hub elasticsearch --list-repo-url -o yaml
- app_version: 0.1.0
description: A Helm chart deploy elasticsearch for Kubernetes
repository:
name: elasticsearch-rafael
url: https://opsteamhub.github.io/charts/elasticsearch
url: https://artifacthub.io/packages/helm/elasticsearch-rafael/elasticsearch
version: 0.1.0
- app_version: 8.0.0
description: Elasticsearch is a distributed search and analytics engine. It is used
for web search, log monitoring, and real-time analytics. Ideal for Big Data applications.
repository:
name: elasticsearch
url: https://odysseycloud.github.io/oc-charts
url: https://artifacthub.io/packages/helm/elasticsearch/elasticsearch
version: 1.0.1
......
Repo
helm search repo
命令通过使用关键字搜索指定仓库中的chart。
搜索会读取系统上配置的所有仓库,并查找匹配。搜索这些仓库会使用存储在系统中的元数据。
它会展示找到最新稳定版本的chart。如果指定了--devel
参数,输出会包括预发布版本。
语法:
helm search repo [keyword] [flags]
选项:
--devel # ——devel也使用开发版本(alpha、beta和发布候选版本)。相当于版本'>0.0.0-0' 如果设置了——version,则忽略此设置
--max-col-width uint # 输出表的最大列宽(默认值50)
-o, --output format # 指定输出格式. 可选值: table, json, yaml (默认 table)
-r, --regexp # 使用正则表达式搜索您添加的存储库repo
--version string # 指定chart版本要使用的版本约束。这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
-l, --versions # 显示你添加的repo的长列表,每个chart的每个版本都在单独的一行中. (可以显示chart的所有版本)
例子:
# 查找repo bitnami中的kafka chart,并查看所有版本.
$ helm search repo kafka -l
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/kafka 26.2.0 3.6.0 Apache Kafka is a distributed streaming platfor...
bitnami/kafka 26.1.0 3.6.0 Apache Kafka is a distributed streaming platfor...
bitnami/kafka 26.0.1 3.6.0 Apache Kafka is a distributed streaming platfor...
......
Templte
helm template
命令用于在本地渲染指定模板并输出。
通常在集群中查找或检索到的任何值都可以在本地伪造。另外,没有对chart有效性进行服务端测试。
语法:
helm template [NAME] [CHART] [flags]
选项:
--atomic # 如果设置,在安装过程失败时删除安装. 如果使用了——atomic,——wait标志会自动设置
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当安装远程仓库的chart时有用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端
--create-namespace # 如果chart声明的namespace不存在,在创建release时创建对应的namespace.
--dependency-update # 如果在安装chart之前缺少依赖项,则更新chart的依赖
--description string # 添加自定义的description描述
--devel # 使用开发版本。等价于版本` >0.0.0-0 `。如果设置了——version,则忽略此设置
--disable-openapi-validation # 如果设置, 安装过程将不会根据Kubernetes OpenAPI模式验证渲染的模板 (在debug渲染的chart时很有用)
--dry-run # 模拟运行 (在debug渲染的chart时很有用)
--enable-dns # 渲染模板时启用DNS lookups
--force # 通过替换策略强制资源更新
-g, --generate-name # 随机生成名称(将会省略name)
--insecure-skip-tls-verify # 跳过TLS证书检查, 下载chart
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--keyring string # 用于验证的公钥的位置 (默认: "~/.gnupg/pubring.gpg")
--name-template string # 指定用于命名Release的模板
--no-hooks # 在安装过程中不运行hooks
-o, --output format # 指定输出格式. 可选值: table, json, yaml (默认 table)
--pass-credentials # 将凭证传递给所有domains
--password string # chart仓库的密码
--post-renderer postrenderer # 用于post渲染的可执行文件的路径。如果它存在于PATH中,二进制文件将被使用,否则它将尝试在给定的路径中寻找可执行文件(默认的exec)
--render-subchart-notes # 如果设置了,将子chart的notes与父chart的notes一起展示
--replace # 重复使用给定的Release名称, 仅当该名称是保留在历史中的已删除版本时。 (这在生产环境中是不安全的,在测试阶段可以进行替代)
--repo string # 安装目标chart的仓库
--set stringArray # 在命令行上设置值到values上(可以指定多个值或用逗号分隔:key1=val1,key2=val2)
--set-file stringArray # 通过命令行设置文件中的值到values上(可以指定多个或用逗号分隔的值:key1=path1,key2=path2)
--set-json stringArray # 在命令行中设置JSON值到values上(可以指定多个或以逗号分隔的值:key1=JsonVal1,key2=JsonVal2)
--set-literal stringArray # 在命令行上设置一个字面值字符串值
--set-string stringArray # 在命令行中设置字符串值到values上(可以指定多个或以逗号分隔的值:key1=val1,key2=val2)
--skip-crds # 如果设置,则不安装crd。默认情况下, 会先安装"chart/crds"下的CRD
--timeout duration # 等待任何单独Kubernetes操作的超时时间(例如hooks的任务)(默认5m0s)
--username string # chart仓库的用户
-f, --values strings # 指定YAML文件或URL中值作用到values上(可以指定多个)
--verify # 在使用package之前验证它
--version string # 指定chart版本要使用的版本约束。这个约束可以是一个特定的标签(例如1.1.1)或者它可以引用一个有效的范围(例如^2.0.0)。如果没有指定,则使用最新版本
--wait # 如果设置了,将等待所有的pod、pvc、Services和Deployment、StatefulSet或ReplicaSet的**最小**pod数量都处于就绪状态,然后才将发布标记为成功。它将等待的时间为——timeout
--wait-for-jobs # 如果设置了——wait-for-jobs并且启用了——wait,则将等待所有作业完成后再将发布标记为成功。它将等待与——timeout相同的时间
-s, --show-only stringArray # 只渲染模板中的清单
-a, --api-versions strings # Kubernetes api versions used for Capabilities.APIVersions
例子:
# 渲染bookinfo
$ helm template demo bookinfo/
---
# Source: bookinfo/templates/info.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: image-info
namespace: argo
data:
image: "application:0.1.5_rc-2"
imagePolicy: "IfNotPresent"
---
# Source: bookinfo/templates/hooks.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: hook-cm
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": hook-succeeded
data:
version: "i'm a hook!"
:fire: 关于
helm install --dry-run
和helm template
helm template
用于生成 Kubernetes 资源清单,供后续手动或自动部署使用,而不涉及实际的安装。helm install --dry-run
用于模拟 Helm Chart 的安装过程,以检查可能的问题,但不会在集群中创建资源。
Registry
helm registry [subcommand]
命令可以登录或登出注册表,该命令由多个子命令组成,用于与注册表交互。
Login
helm registry login
命令用于登录指定注册表。
语法:
helm registry login [host] [flags]
选项:
--ca-file string # 使用此CA包验证启用https的服务器的证书 (当安装远程仓库的chart时有用)
--cert-file string # 使用此SSL证书文件标识HTTPS客户端
--key-file string # 使用这个SSL密钥文件识别HTTPS客户端
--insecure # 允许连接到没有证书的TLS注册表
-p, --password string # registry的密码或身份令牌
--password-stdin # 从stdin读取密码或者token
-u, --username string # registry 用户名
例子:
# 登录私服
$ helm registry login localhost:6000 -u admin -p root123
Logout
helm registry logout
命令从指定的远程注册表移除认证信息。
语法:
helm registry logout [host] [flags]
选项:
# 无
例子:
# 从私服中登出
$ helm registry logout localhost:6000
Test
helm test
命令用于对发布的Release进行测试
:fire: 该命令使用的参数是部署Release的名称,要运行的测试在已安装的chart中定义。
语法:
helm test [RELEASE] [flags]
选项:
--filter strings # 使用attribute=value语法或`!Attribute =value`来排除一个测试(可以用逗号指定多个或单独的值:name=test1,name=test2)
--logs # 从测试pod转储日志(在所有测试完成后,但在任何清理之前运行)
--timeout duration # 等待任何单独Kubernetes操作的超时时间(例如hooks的任务)(默认5m0s)
例子:
# 对image-info 进行测试
$ helm test image-info --logs
:notes: 注意: 想要执行测试任务必须在
chart/templates/tests
下定义对应的模板
Status
helm status
命令可以显示已命名的Release的状态
该命令显示已命名Release的状态,状态包括:
- 最后部署时间
- 发布版本所在的k8s命名空间
- 发布状态(可以是: unknown, deployed, uninstalled, superseded, failed, uninstalling, pending-install, pending-upgrade 或 pending-rollback)
- 发布版本修订
- 发布版本描述(可以是完成信息或错误信息,需要用
--show-desc
启用) - 列举版本包含的资源(使用
--show-resources
显示) - 最后一次测试套件运行的详细信息(如果使用)
- chart提供的额外的注释
语法:
helm status RELEASE_NAME [flags]
选项:
-o, --output format # 指定输出格式. 可选值: table, json, yaml (默认 table)
--revision int # 显示指定修订Revision的Release的状态
--show-desc # 显示Release的描述信息
--show-resources # 显示Release的资源信息
例子:
# 显示image-info Release的status
$ helm status image-info
NAME: image-info
LAST DEPLOYED: Sun Oct 29 13:46:48 2023
NAMESPACE: argo
STATUS: deployed
REVISION: 5
TEST SUITE: None
NOTES:
# Hello
This is a image info
# 指定显示revision=3的image-info Release的status
$ helm status image-info --revision 3
NAME: image-info
LAST DEPLOYED: Sat Oct 28 15:41:42 2023
NAMESPACE: argo
STATUS: superseded
REVISION: 3
TEST SUITE: None
NOTES:
# Hello
This is a image info
Verify
helm verfify
命令可以验证给定路径的chart已经被签名且有效,验证指定的chart有合法的源文件。源文件提供了加密验证保证chart未被篡改,且由可信提供商打包。
该命令用于验证本地chart,其他一些命令提供
--verify
参数执行同样的验证。要生成一个签名包,使用helm package --sign
命令。
语法:
helm verify PATH [flags]
选项:
--keyring string # 用于验证的公钥的位置 (默认: "~/.gnupg/pubring.gpg")
例子:
# 验证bookinfo是否被签名
$ helm verify bookinfo.tgz