[Helm] 常用命令

Helm

写在前面:

本文根据Helm官方文档helm进行编写,对Helm常用命令的使用,选项参数等进行了解释。阅读本文需要掌握Helm的基本使用。

Helm是什么?正如在官方介绍的那样,是一款Kubernetes 包管理器 。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。

三大概念

  1. Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。

  2. Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。

  3. Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release 。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 releaserelease name

在了解了上述这些概念以后,我们就可以这样来解释 Helm:

Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release 。你可以在 Helm 的 chart repositories 中寻找新的 chart。

1. Install

shell 复制代码
# 下载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

ValuesValues对象是从values.yaml文件和用户提供的文件传进模板的。默认为空

ChartChart.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]

选项:

shell 复制代码
-o, --output format  # 指定输出格式: table, json, yaml (默认为 table)

例子:

shell 复制代码
# 列出所有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]

选项:

shell 复制代码
--fail-on-repo-update-fail   # 如果任何存储库更新失败,则更新失败

例子:

shell 复制代码
# 更新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]

选项:

shell 复制代码
--merge string  # 根据已有的index.yaml进行合并
--url string    # Chart仓库的url

例子:

shell 复制代码
# 根据已有的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]

选项:

shell 复制代码
--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仓库用户

例子:

shell 复制代码
# 添加一个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]

选项:

shell 复制代码
# 无

例子:

shell 复制代码
# 删除orange仓库
$ helm repo remove orange

Dependency

helm dependency用于管理Chart依赖

Helm chart将依赖存储在charts/目录中。对于chart开发者,管理声明了所有依赖的Chart.yaml文件更容易。

依赖命令对该文件进行操作,使得存储在charts/目录的需要的依赖和实际依赖之间同步变得很容易。

比如Chart.yaml声明了一个guestbook的依赖:

yaml 复制代码
# 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]

选项:

shell 复制代码
--max-col-width uint # 输出结果的最大宽度(默认80)

例子:

shell 复制代码
# 列出所有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]

选项:

shell 复制代码
--keyring string   # 包含公钥的密匙 (default "~/.gnupg/pubring.gpg")
--skip-refresh     # 不刷新本地存储库缓存
--verify           # 根据签名验证package

例子:

shell 复制代码
# 如果声明的依赖是在本地, 可以不需要刷新缓存, 这样有助于提高速度
$ 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 buildhelm dep update的区别:一个是根据Chart.lock进行构建,另外一个是根据Chart.yaml进行构建。

语法:

helm dependency build CHART [flags]

选项:

shell 复制代码
--keyring string   # 包含公钥的密匙 (default "~/.gnupg/pubring.gpg")
--skip-refresh     # 不刷新本地存储库缓存
--verify           # 根据签名验证package

例子:

shell 复制代码
# 如果声明的依赖是在本地, 可以不需要刷新缓存, 这样有助于提高速度
$ helm dep build bookinfo --skip-refresh
Saving 1 charts
Deleting outdated charts

List

helm list命令会列举出指定命名空间的所有Release版本,(如果没有指定命名空间,会使用当前命名空间)。

默认情况下,只会列举出部署的或者失败的发布,像--uninstalled或者--all会修改默认行为。这些参数可以组合使用:--uninstalled --failed

默认情况下,列表按字母排序。使用-d参数按照日期排序。

如果使用--filter参数,会作为一个过滤器。过滤器是应用于发布列表的正则表达式(兼容Perl)。只有过滤器匹配的才会返回。

shell 复制代码
$ 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]

选项:

shell 复制代码
-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

例子:

shell 复制代码
# 列出所有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]

选项:

shell 复制代码
--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版本

例子:

shell 复制代码
# 将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]

选项:

shell 复制代码
--revision int    # 获取Release指定的revision
--template string   # 使用goTemplate格式化输出,例: {{.Release.Name}}

例子:

shell 复制代码
# 使用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]

选项:

shell 复制代码
--revision int # 指定Release的revision

例子:

shell 复制代码
# 获取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]

选项:

shell 复制代码
--revision int # 指定Release的revision

例子:

shell 复制代码
# 获取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]

选项:

shell 复制代码
--revision int # 指定Release的revision

例子:

shell 复制代码
# 查看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]

选项:

shell 复制代码
-a, --all   # dump所有(计算)值
-o, --output format  # 指定输出格式.可选值: table, json, yaml (默认 table)
--revision int # 指定Release的revision

例子:

shell 复制代码
# 获取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]

选项:

shell 复制代码
-o, --output format  # 指定输出格式.可选值: table, json, yaml (默认 table)
--revision int # 指定Release的revision

例子:

shell 复制代码
# 获取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会创建一个目录结构看起来像这样:

shell 复制代码
foo/
├── .helmignore   # 定义Helm charts打包时要忽略的文件
├── Chart.yaml    # chart的信息文件
├── values.yaml   # 定义模板的默认值
├── charts/       # chart的依赖项目录
└── templates/    # 模板文件目录
    └── tests/    # 测试文件目录

helm create使用一个目录作为参数。如果给定目录路径不存在,Helm会自动创建。

:fire: 如果给定目录存在且非空,冲突文件会被覆盖,其他文件会被保留。

语法:

helm create NAME [flags]

选项:

shell 复制代码
-p, --starter string   # Helm starter scaffold的名称或绝对路径

例子:

shell 复制代码
# 创建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]

选项:

shell 复制代码
--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的依赖项

例子:

shell 复制代码
# 检测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]

选项:

shell 复制代码
--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)。如果没有指定,则使用最新版本

例子:

shell 复制代码
# 显示本地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]

选项:

shell 复制代码
--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)。如果没有指定,则使用最新版本

例子:

shell 复制代码
# 查看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]

选项:

shell 复制代码
--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)。如果没有指定,则使用最新版本

例子:

shell 复制代码
# 显示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]

选项:

shell 复制代码
--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表达式来过滤输出

例子:

shell 复制代码
# 展示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.yamlchart/README

语法:

helm show all [CHART] [flags]

选项:

shell 复制代码
--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)。如果没有指定,则使用最新版本

例子:

shell 复制代码
# 显示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参数。最右侧指定的文件优先级最高

shell 复制代码
# 最右侧文件优先级最高
$ helm install bookinfo bookinfo-1.0.0.gz -f val1.yaml -f val2.yaml

你也可以指定--set参数多次,最右边的参数优先级最高

如果为了检测生成的清单,但并不安装到chart,可以将--debug--dry-run组合使用。

shell 复制代码
# 最右侧参数优先级最高
$ 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:

  1. 通过chart引用: helm install mymaria example/mariadb
  2. 通过chart包: helm install mynginx ./nginx-1.2.3.tgz
  3. 通过未打包chart目录的路径: helm install mynginx ./nginx
  4. 通过URL绝对路径: helm install mynginx example.com/charts/ngin...
  5. 通过chart引用和仓库url: helm install --repo example.com/charts/ mynginx nginx
  6. 通过OCI注册中心: helm install mynginx --version 1.2.3 oci://example.com/charts/nginx

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]

选项:

shell 复制代码
--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

例子:

shell 复制代码
# 安装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]

选项:

shell 复制代码
--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相同的时间

例子:

shell 复制代码
# 删除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]

选项:

shell 复制代码
--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相同的时间

例子:

shell 复制代码
# 升级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]

选项:

shell 复制代码
--max int  # Release的最大历史revision 默认为256
-o, --output format  # 指定打印格式. 可选值: table, json, yaml (默认 table)

例子:

shell 复制代码
# 打印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

选项:

shell 复制代码
# 无

例子:

shell 复制代码
# 打印所有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]

选项:

shell 复制代码
--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相同的时间

例子:

shell 复制代码
# 将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]

选项:

shell 复制代码
--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)。如果没有指定,则使用最新版本

例子:

shell 复制代码
# 下载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]

选项:

shell 复制代码
--ca-file string   # 使用此CA包验证启用https的服务器的证书 (当安装远程仓库的chart时有用)
--cert-file string   # 使用此SSL证书文件标识HTTPS客户端
--insecure-skip-tls-verify   # 跳过TLS证书检查, 下载chart
--key-file string   # 使用这个SSL密钥文件识别HTTPS客户端

例子:

shell 复制代码
# 将bookinfo推送到私服
$ helm push bookinfo.tgz my-repo

# 将bookinfo推送到OCI规范容器registry
$ helm push bookinfo.tgz oci://localhost:7000/helm-charts

helm search [subcommand]命令提供了可以在已经添加的Artifact Hub和仓库等多个位置搜索Helm chart 的能力。

Hub

helm search hub命令可以在Artifact Hub或自己的hub实例中搜索chart。

语法:

helm search hub [KEYWORD] [flags]

选项:

shell 复制代码
--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)

例子:

shell 复制代码
# 在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]

选项:

shell 复制代码
--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的所有版本)

例子:

shell 复制代码
# 查找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]

选项:

shell 复制代码
--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

例子:

shell 复制代码
# 渲染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-runhelm template

  • helm template 用于生成 Kubernetes 资源清单,供后续手动或自动部署使用,而不涉及实际的安装。
  • helm install --dry-run 用于模拟 Helm Chart 的安装过程,以检查可能的问题,但不会在集群中创建资源。

Registry

helm registry [subcommand]命令可以登录或登出注册表,该命令由多个子命令组成,用于与注册表交互。

Login

helm registry login命令用于登录指定注册表。

语法:

helm registry login [host] [flags]

选项:

shell 复制代码
--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 用户名

例子:

shell 复制代码
# 登录私服
$ helm registry login localhost:6000 -u admin -p root123

Logout

helm registry logout命令从指定的远程注册表移除认证信息。

语法:

helm registry logout [host] [flags]

选项:

shell 复制代码
# 无

例子:

shell 复制代码
# 从私服中登出
$ helm registry logout localhost:6000

Test

helm test命令用于对发布的Release进行测试

:fire: 该命令使用的参数是部署Release的名称,要运行的测试在已安装的chart中定义。

语法:

helm test [RELEASE] [flags]

选项:

shell 复制代码
--filter strings    # 使用attribute=value语法或`!Attribute =value`来排除一个测试(可以用逗号指定多个或单独的值:name=test1,name=test2)
--logs   # 从测试pod转储日志(在所有测试完成后,但在任何清理之前运行)          
--timeout duration     # 等待任何单独Kubernetes操作的超时时间(例如hooks的任务)(默认5m0s)

例子:

shell 复制代码
# 对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]

选项:

shell 复制代码
-o, --output format   # 指定输出格式. 可选值: table, json, yaml (默认 table)
--revision int     # 显示指定修订Revision的Release的状态
--show-desc   # 显示Release的描述信息
--show-resources   # 显示Release的资源信息

例子:

shell 复制代码
# 显示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]

选项:

shell 复制代码
--keyring string    # 用于验证的公钥的位置 (默认: "~/.gnupg/pubring.gpg")

例子:

shell 复制代码
# 验证bookinfo是否被签名
$ helm verify bookinfo.tgz
相关推荐
运维佬1 小时前
kubernetes组件ETCD未授权访问
容器·kubernetes·etcd
运维佬1 小时前
限制对 etcd 的访问范围是确保 Kubernetes 集群安全的一个重要环节。
安全·kubernetes·etcd
斯普信专业组5 小时前
K8s内存溢出问题剖析:排查与解决方案
云原生·容器·kubernetes
陈哥聊测试10 小时前
DevOps引领数字化转型新趋势
项目管理·devops·企业转型
运维&陈同学12 小时前
【kafka03】消息队列与微服务之Kafka 读写数据
linux·微服务·云原生·架构·kafka·前端框架·云计算
秃头菜狗16 小时前
ubuntu 安装docker
linux·运维·服务器·ubuntu·docker·云原生
向阳121818 小时前
Seata使用ZooKeeper作为注册中心
分布式·zookeeper·云原生
成都 - 阿木木18 小时前
云原生自动化测试之命令行工具自动化测试设计思路分享
自动化测试·软件测试·功能测试·测试工具·云原生·云计算·命令行自动化测试
极客先躯19 小时前
k8s 架构详解
容器·架构·kubernetes·etcd·scheduler·api server