helm入门

一、Helm概述

        Helm是一个由CNCF孵化和管理的项目,用于对需要在Kubernetes上部署的复杂应用进行定义、安装和更新。Helm以Chart的方式对应用软件进行描述,可以方便地创建、版本化、共享和发布复杂的应用软件。

二、Helm的主要概念

◎ Chart:一个Helm包,其中包含运行一个应用所需要的工具和资源定义,还可能包含Kubernetes集群中的服务定义,类似于Homebrew中的formula、APT中的dpkg或者Yum中的RPM文件。

◎ Release:在Kubernetes集群上运行的一个Chart实例。在同一个集群上,一个Chart可以被安装多次。例如有一个MySQL Chart,如果想在服务器上运行两个MySQL数据库,就可以基于这个Chart安装两次。每次安装都会生成新的Release,会有独立的Release名称。

◎ Repository:用于存放和共享Chart仓库。

        简单来说,Helm整个系统的主要任务就是,在仓库中查找需要的Chart,然后将Chart以Release的形式安装到Kubernetes集群中。

三、安装Helm

3.1、下载需要二进制版本:

Releases · helm/helm · GitHub

3.2、解压:

tar zxvf helm-v3.9.2-linux-amd64.tar.gz

3.3、在解压目录中找到 helm 程序,并移动到需要的目录中:

mv linux-amd64/helm /usr/local/bin/

四、Helm的常见用法

4.1、'helm search':查找 Charts

        Helm 自带一个强大的搜索命令,可以用来从两种来源中进行搜索:

        helm search hub 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。

        $ helm search hub wordpress
        helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。

        $ helm search repo brigade

4.2、'helm install':安装一个 helm 包

        使用 helm install 命令来安装一个新的 helm 包。最简单的使用方法只需要传入两个参数:你命名的release名字和你想安装的chart的名称。

        $ helm install happy-panda bitnami/wordpress

        现在wordpress chart 已经安装。注意安装chart时创建了一个新的 release 对象。上述发布被命名为 happy-panda。 (如果想让Helm生成一个名称,删除发布名称并使用 --generate-name。)

        Helm 客户端不会等到所有资源都运行才退出。许多 charts 需要大小超过 600M 的 Docker 镜像,可能需要很长时间才能安装到集群中。你可以使用 helm status 来追踪 release 的状态,或是重新读取配置信息:

        $ helm status happy-panda

4.3、安装前自定义 chart 的配置

        上述安装方式只会使用 chart 的默认配置选项。很多时候,我们需要自定义 chart 来指定我们想要的配置。使用 helm show values 可以查看 chart 中的可配置选项:

        $ helm show values bitnami/wordpress

        然后,你可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件。

        $ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
        $ helm install -f values.yaml bitnami/wordpress --generate-name
        上述命令将为 MariaDB 创建一个名称为 user0 的默认用户,并且授予该用户访问新建的 user0db 数据库的权限。chart 中的其他默认配置保持不变。

        安装过程中有两种方式传递配置数据:

        --values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
        --set:通过命令行的方式对指定项进行覆盖。
        如果同时使用两种方式,则 --set 中的值会被合并到 --values 中,但是 --set 中的值优先级更高。在--set 中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values <release-name> 来查看指定 release 中 --set 设置的值。也可以通过运行 helm upgrade 并指定 --reset-values 字段来清除 --set 中设置的值。

        --set 的格式和限制
        --set 选项使用0或多个 name/value 对。最简单的用法类似于:--set name=value,等价于如下 YAML 格式:

        name: value
多个值使用逗号分割,因此 --set a=b,c=d 的 YAML 表示是:

        a: b
        c: d
支持更复杂的表达式。例如,--set outer.inner=value 被转换成了:

        outer:
          inner: value
列表使用花括号({})来表示。例如,--set name={a, b, c} 被转换成了:

        name:
          - a
          - b
          - c
        从 2.5.0 版本开始,可以使用数组下标的语法来访问列表中的元素。例如 --set servers[0].port=80 就变成了:

        servers:
          - port: 80
        多个值也可以通过这种方式来设置。--set servers[0].port=80,servers[0].host=example 变成了:

        servers:
          - port: 80
            host: example
        如果需要在 --set 中使用特殊字符,你可以使用反斜线来进行转义;--set name=value1\,value2 就变成了:

        name: "value1,value2"
        类似的,你也可以转义点序列(英文句号)。这可能会在 chart 使用 toYaml 函数来解析 annotations,labels,和 node selectors 时派上用场。--set nodeSelector."kubernetes\.io/role"=master 语法就变成了:

        nodeSelector:
          kubernetes.io/role: master
        深层嵌套的数据结构可能会很难用 --set 表达。我们希望 Chart 的设计者们在设计 values.yaml 文件的格式时,考虑到 --set 的使用。(更多内容请查看 Values 文件 文件)

4.4、'helm upgrade' 和 'helm rollback':升级 release 和失败时恢复

        当你想升级到 chart 的新版本,或是修改 release 的配置,你可以使用 helm upgrade 命令。

        一次升级操作会使用已有的 release 并根据你提供的信息对其进行升级。由于 Kubernetes 的 chart 可能会很大而且很复杂,Helm 会尝试执行最小侵入式升级。即它只会更新自上次发布以来发生了更改的内容。

        $ helm upgrade -f panda.yaml happy-panda bitnami/wordpress
        在上面的例子中,happy-panda 这个 release 使用相同的 chart 进行升级,但是使用了一个新的 YAML 文件:

        mariadb.auth.username: user1
        我们可以使用 helm get values 命令来看看配置值是否真的生效了:

        $ helm get values happy-panda
        mariadb:
          auth:
            username: user1
        helm get 是一个查看集群中 release 的有用工具。正如我们上面所看到的,panda.yaml 中的新值已经被部署到集群中了。

        现在,假如在一次发布过程中,发生了不符合预期的事情,也很容易通过 helm rollback [RELEASE] [REVISION] 命令回滚到之前的发布版本。

        $ helm rollback happy-panda 1
        上面这条命令将我们的 happy-panda 回滚到了它最初的版本。release 版本其实是一个增量修订(revision)。 每当发生了一次安装、升级或回滚操作,revision 的值就会加1。第一次 revision 的值永远是1。我们可以使用 helm history [RELEASE] 命令来查看一个特定 release 的修订版本号。

4.5、安装、升级、回滚时的有用选项

        你还可以指定一些其他有用的选项来自定义 Helm 在安装、升级、回滚期间的行为。请注意这并不是 cli 参数的完整列表。 要查看所有参数的说明,请执行 helm <command> --help 命令。

        --timeout:一个 Go duration 类型的值, 用来表示等待 Kubernetes 命令完成的超时时间,默认值为 5m0s。
        --wait:表示必须要等到所有的 Pods 都处于 ready 状态,PVC 都被绑定,Deployments 都至少拥有最小 ready 状态 Pods 个数(Desired减去 maxUnavailable),并且 Services 都具有 IP 地址(如果是LoadBalancer, 则为 Ingress),才会标记该 release 为成功。最长等待时间由 --timeout 值指定。如果达到超时时间,release 将被标记为 FAILED。注意:当 Deployment 的 replicas 被设置为1,但其滚动升级策略中的 maxUnavailable 没有被设置为0时,--wait 将返回就绪,因为已经满足了最小 ready Pod 数。
        --no-hooks:不运行当前命令的钩子。
        --recreate-pods(仅适用于 upgrade 和 rollback):这个参数会导致重建所有的 Pod(deployment中的Pod 除外)。(在 Helm 3 中已被废弃)

4.6、'helm uninstall':卸载 release

        使用 helm uninstall 命令从集群中卸载一个 release:

        $ helm uninstall happy-panda
        该命令将从集群中移除指定 release。你可以通过 helm list 命令看到当前部署的所有 release。

4.7、'helm repo':使用仓库

        Helm 3 不再附带一个默认的 chart 仓库。helm repo 提供了一组命令用于添加、列出和移除仓库。使用 helm repo list 来查看配置的仓库:

        $ helm repo list

        使用 helm repo add 来添加新的仓库:

        $ helm repo add dev https://example.com/dev-charts
        因为 chart 仓库经常在变化,在任何时候你都可以通过执行 helm repo update 命令来确保你的 Helm 客户端是最新的。

        使用 helm repo remove 命令来移除仓库。

4.8、创建你自己的 charts

        你可以通过使用 helm create 命令来快速开始:

        $ helm create deis-workflow

        现在,./deis-workflow 目录下已经有一个 chart 了。你可以编辑它并创建你自己的模版。在编辑 chart 时,可以通过 helm lint 验证格式是否正确。

        当准备将 chart 打包分发时,你可以运行 helm package 命令:

        $ helm package deis-workflow

        然后这个 chart 就可以很轻松的通过 helm install 命令安装:

        $ helm install deis-workflow ./deis-workflow-0.1.0.tgz

        最后,你也可以选择将打包好的 chart 上传到 chart 仓库中。查看 Helm chart 仓库 获取更多信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值