[Helm] 常用命令

2023年 10月 30日 70.7k 0

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 buildhelm 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.yamlchart/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引用: helm install mymaria example/mariadb
  • 通过chart包: helm install mynginx ./nginx-1.2.3.tgz
  • 通过未打包chart目录的路径: helm install mynginx ./nginx
  • 通过URL绝对路径: helm install mynginx example.com/charts/ngin…
  • 通过chart引用和仓库url: helm install --repo example.com/charts/ mynginx nginx
  • 通过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]

    选项:

    --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-runhelm 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
    

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论