写点什么

4. helm 3.8.0 入门

作者:ghostwritten
  • 2022 年 5 月 10 日
  • 本文字数:6622 字

    阅读完需:约 22 分钟

4. helm 3.8.0 入门

1. 条件

  • Kubernetes 集群


有关 Helm 和 Kubernetes 之间支持的最大版本偏差,请参阅Helm 版本支持策略

2. 安装

2.1 二进制版本安装

helm 的每个版本都为各种操作系统提供二进制版本


$ wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz$ tar -xzvf helm-v3.8.0-linux-amd64.tar.gz$ cp linux-amd64/helm /usr/local/bin/$ helm versionversion.BuildInfo{Version:"v3.8.0", GitCommit:"d14138609b01886f544b2025f5000351c9eb092e", GitTreeState:"clean", GoVersion:"go1.17.5"}
复制代码

2.2 脚本安装

Helm 现在有一个安装程序脚本,它会自动获取最新版本的 Helm 并在本地安装它。


$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3$ chmod 700 get_helm.sh$ ./get_helm.sh
复制代码

2.3 更多安装方式

更多安装方式请参考这里

3. 三大概念

  • Chart是一个 Helm 包。它包含在 Kubernetes 集群内运行应用程序、工具或服务所需的所有资源定义。可以把它想象成 Kubernetes 的 Homebrew 公式、Apt dpkg 或 Yum RPM 文件。

  • Repository 是可以收集和共享图表的地方。它类似于 Perl 的 CPAN 存档或 Fedora 包数据库,但用于 Kubernetes 包。

  • Release是在 Kubernetes 集群中运行的 Chart 的实例。一个 Chart 通常可以多次安装到同一个集群中。每次安装时,都会创建一个新 Release。考虑一个 MySQL Chart。如果您希望在集群中运行两个数据库,则可以将该 Chart 安装两次。每个都有自己的发行版,而发行版又会有自己的发行版名称。

4. 常用方法

4.1 'helm repo':使用存储库

检查Artifact Hub以获取可用的 Helm 图表存储库。


$ helm repo listNAME            URLstable          https://charts.helm.sh/stablemumoshu         https://mumoshu.github.io/charts
$ helm repo add bitnami https://charts.bitnami.com/bitnami
复制代码


由于图表存储库经常更改,因此您可以随时通过运行helm repo update.


可以使用 删除存储库helm repo remove

4.2 'helm search': 查找图表

  • helm search hub搜索Artifact Hub,其中列出了来自数十个不同存储库的 helm 图表。

  • helm search repo搜索您添加到本地 helm 客户端的存储库(使用 helm repoadd)。此搜索是在本地数据上完成的,不需要公共网络连接。


$ helm search hub wordpressURL                                                 CHART VERSION APP VERSION DESCRIPTIONhttps://hub.helm.sh/charts/bitnami/wordpress        7.6.7         5.2.4       Web publishing platform for building blogs and ...https://hub.helm.sh/charts/presslabs/wordpress-...  v0.6.3        v0.6.3      Presslabs WordPress Operator Helm Charthttps://hub.helm.sh/charts/presslabs/wordpress-...  v0.7.1        v0.7.1      A Helm chart for deploying a WordPress site on ...
复制代码


以上搜索了wordpress Artifact Hub 上的所有图表。


没有过滤器,helm search hub向您显示所有可用的图表。


使用helm search repo,您可以在已添加的存储库中找到图表的名称:


$ helm repo add brigade https://brigadecore.github.io/charts"brigade" has been added to your repositories$ helm search repo brigadeNAME                          CHART VERSION APP VERSION DESCRIPTIONbrigade/brigade               1.3.2         v1.2.1      Brigade provides event-driven scripting of Kube...brigade/brigade-github-app    0.4.1         v0.2.1      The Brigade GitHub App, an advanced gateway for...brigade/brigade-github-oauth  0.2.0         v0.20.0     The legacy OAuth GitHub Gateway for Brigadebrigade/brigade-k8s-gateway   0.1.0                     A Helm chart for Kubernetesbrigade/brigade-project       1.0.0         v1.0.0      Create a Brigade projectbrigade/kashti                0.4.0         v0.4.0      A Helm chart for Kubernetes
复制代码


Helm 搜索使用模糊字符串匹配算法,因此您可以键入部分单词或短语:


$ helm search repo kashNAME            CHART VERSION APP VERSION DESCRIPTIONbrigade/kashti  0.4.0         v0.4.0      A Helm chart for Kubernetes
复制代码

4.3 helm install':安装包

在最简单的情况下,它需要两个参数:您选择的版本名称和您要安装的图表的名称。


$ helm install happy-panda bitnami/wordpressNAME: happy-pandaLAST DEPLOYED: Tue Jan 26 10:27:17 2021NAMESPACE: defaultSTATUS: deployedREVISION: 1NOTES:** Please be patient while the chart is being deployed **Your WordPress site can be accessed through the following DNS name from within your cluster:    happy-panda-wordpress.default.svc.cluster.local (port 80)To access your WordPress site from outside the cluster follow the steps below:1. Get the WordPress URL by running these commands:  NOTE: It may take a few minutes for the LoadBalancer IP to be available.        Watch the status with: 'kubectl get svc --namespace default -w happy-panda-wordpress'   export SERVICE_IP=$(kubectl get svc --namespace default happy-panda-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")   echo "WordPress URL: http://$SERVICE_IP/"   echo "WordPress Admin URL: http://$SERVICE_IP/admin"2. Open a browser and access WordPress using the obtained URL.3. Login with the following credentials below to see your blog:  echo Username: user  echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
复制代码


现在wordpress图表已安装。请注意,安装图表会创建一个新的发布对象。上面的版本名为happy-panda. (如果您希望 Helm 为您生成名称,请省略发布名称并使用--generate-name.)


在安装过程中,helm 客户端将打印有关创建了哪些资源、发布状态是什么以及您是否可以或应该采取其他配置步骤的有用信息。Helm 按以下顺序安装资源:


命名空间网络策略资源配额限制范围PodSecurityPolicyPodDisruptionBudget服务帐户秘密秘密清单配置映射存储类持久卷PersistentVolumeClaim自定义资源定义集群角色集群角色列表集群角色绑定ClusterRoleBindingList角色角色列表角色绑定角色绑定列表服务守护程序集在下面复制控制器副本集部署Horizo​​ntalPodAutoscaler有状态集工作定时任务入口API服务
复制代码


Helm 不会等到所有资源都运行完才退出。许多图表需要大小超过 600M 的 Docker 镜像,并且可能需要很长时间才能安装到集群中。


要跟踪发布的状态,或重新读取配置信息,您可以使用helm status


$ helm status happy-pandaNAME: happy-pandaLAST DEPLOYED: Tue Jan 26 10:27:17 2021NAMESPACE: defaultSTATUS: deployedREVISION: 1NOTES:** Please be patient while the chart is being deployed **Your WordPress site can be accessed through the following DNS name from within your cluster:    happy-panda-wordpress.default.svc.cluster.local (port 80)To access your WordPress site from outside the cluster follow the steps below: - Get the WordPress URL by running these commands:  NOTE: It may take a few minutes for the LoadBalancer IP to be available.        Watch the status with: 'kubectl get svc --namespace default -w happy-panda-wordpress'   export SERVICE_IP=$(kubectl get svc --namespace default happy-panda-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")   echo "WordPress URL: http://$SERVICE_IP/"   echo "WordPress Admin URL: http://$SERVICE_IP/admin" - Open a browser and access WordPress using the obtained URL. - Login with the following credentials below to see your blog:  echo Username: user  echo Password: $(kubectl get secret --namespace default happy-panda-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
复制代码


更多安装方式


  • 一个图表存储库(正如我们在上面看到的)

  • 本地图表存档 ( helm install foo foo-0.1.1.tgz)

  • 解压后的图表目录 ( helm install foo path/to/foo)

  • 完整网址 ( helm install foo https://example.com/charts/foo-1.2.3.tgz)

4.4 自定义 chart

要查看图表上可配置的选项,请使用helm show values


$ helm show values bitnami/wordpress## Global Docker image parameters## Please, note that this will override the image parameters, including dependencies, configured to use the global value## Current available global Docker image parameters: imageRegistry and imagePullSecrets### global:#   imageRegistry: myRegistryName#   imagePullSecrets:#     - myRegistryKeySecretName#   storageClass: myStorageClass## Bitnami WordPress image version## ref: https://hub.docker.com/r/bitnami/wordpress/tags/##image:  registry: docker.io  repository: bitnami/wordpress  tag: 5.6.0-debian-10-r35  [..]
复制代码


然后,您可以覆盖 YAML 格式文件中的任何这些设置,然后在安装期间传递该文件。


$ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml$ helm install -f values.yaml bitnami/wordpress --generate-name
复制代码


以上将创建一个名为 的默认 MariaDB 用户user0,并授予该用户对新创建的user0db数据库的访问权限,但将接受该图表的所有其余默认值。


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


  • --values(或-f):指定具有覆盖的 YAML 文件。这可以指定多次,最右边的文件将优先

  • --set:在命令行上指定覆盖


如果两者都使用,则以更高的优先级--set合并值。--values用 指定的覆盖--set将持久保存在 ConfigMap 中。--set可以使用 . 查看给定版本的值helm get values <release-name>。可以通过使用指定--set的运行来清除已被清除的值。helm upgrade--reset-values

4.4.1 格式和限制--set

--set选项采用零个或多个名称/值对。最简单的用法是这样的:--set name=value. 等效的 YAML 是:


name: value
复制代码


多个值由,字符分隔。于是--set a=b,c=d变成:


a: bc: d
复制代码


支持更复杂的表达式。例如,--set outer.inner=value翻译成这样:


outer:  inner: value
复制代码


列表可以通过将值括在{和中来表示}。例如,--set name={a, b, c}转换为:


name:  - a  - b  - c
复制代码


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


toYaml同样,您也可以转义点序列,当图表使用该函数解析注释、标签和节点选择器时,这可能会派上用场。的语法--set nodeSelector."kubernetes\.io/role"=master变为:


nodeSelector:  kubernetes.io/role: master
复制代码


阅读有关值文件的更多信息

4.5 'helm upgrade' 和 'helm rollback':升级版本,并在失败时恢复

当发布新版本的图表时,或者当您想要更改发布的配置时,可以使用该 helm upgrade 命令。


升级采用现有版本并根据您提供的信息对其进行升级。由于 Kubernetes 图表可能很大且很复杂,Helm 尝试执行侵入性最小的升级。它只会更新自上次发布以来已更改的内容。


$ helm upgrade -f panda.yaml happy-panda bitnami/wordpress
复制代码


在上述情况下,happy-panda 使用相同的图表升级版本,但使用新的 YAML 文件:


mariadb.auth.username: user1
复制代码


我们可以helm get values用来查看新设置是否生效。


$ helm get values happy-pandamariadb:  auth:    username: user1
复制代码


helm get命令是查看集群中发布的有用工具。正如我们在上面看到的,它表明我们的新值panda.yaml已部署到集群中。


现在,如果在发布期间某些事情没有按计划进行,很容易使用helm rollback [RELEASE] [REVISION].


$ helm rollback happy-panda 1
复制代码


以上将我们的happy-panda 回滚到它的第一个发布版本。发布版本是增量修订。每次安装、升级或回滚时,修订号都会增加 1。第一个修订号始终为 1。我们可以使用它helm history [RELEASE]来查看某个版本的修订号。

4.6 安装/升级/回滚的有用选项

在安装/升级/回滚期间,您可以指定其他几个有用的选项来自定义 Helm 的行为。请注意,这不是 cli 标志的完整列表。要查看所有标志的描述,只需运行helm <command> --help.


  • --timeout:等待 Kubernetes 命令完成的 Go 持续时间值。这默认为5m0s.

  • --wait:等到所有 Pod 都处于就绪状态,PVC 被绑定,部署有最少(Desired 减号 maxUnavailable)的 Pod 处于就绪状态并且服务有一个 IP 地址(如果是 a 则为 Ingress LoadBalancer),然后才将发布标记为成功。只要--timeout值,它将等待。如果达到超时,释放将被标记为FAILED。注意:在Deploymentreplicas设置为 1 并且maxUnavailable作为滚动更新策略的一部分未设置为 0 的情况下,--wait 将返回就绪状态,因为它满足了处于就绪状态的最小 Pod。

  • --no-hooks:这会跳过命令的运行钩子

  • --recreate-pods(仅适用于 upgrade 和 rollback):此标志将导致重新创建所有 Pod(属于部署的 Pod 除外)。(在 Helm 3 中已弃用)

4.7 'helm uninstall':卸载版本

$ helm uninstall happy-panda$ helm listNAME            VERSION UPDATED                         STATUS          CHARTinky-cat        1       Wed Sep 28 12:59:46 2016        DEPLOYED        alpine-0.1.0
复制代码


在以前的 Helm 版本中,当一个版本被删除时,它的删除记录将保留。在 Helm 3 中,删除也会删除发布记录。如果您希望保留删除版本记录,请使用helm uninstall --keep-history. Using helm list --uninstalled将仅显示使用该--keep-history标志卸载的版本。


helm list --all标志将显示 Helm 保留的所有发布记录,包括失败或已删除项目的记录(如果--keep-history已指定):


$  helm list --allNAME            VERSION UPDATED                         STATUS          CHARThappy-panda     2       Wed Sep 28 12:47:54 2016        UNINSTALLED     wordpress-10.4.5.6.0inky-cat        1       Wed Sep 28 12:59:46 2016        DEPLOYED        alpine-0.1.0kindred-angelf  2       Tue Sep 27 16:16:10 2016        UNINSTALLED     alpine-0.1.0
复制代码


请注意,由于现在默认删除版本,因此无法再回滚已卸载的资源。


有时,当 Helm 运行helm uninstall. chart 开发人员可以为资源添加注释以防止其被卸载。


kind: Secretmetadata:  annotations:    "helm.sh/resource-policy": keep[...]
复制代码


注释"helm.sh/resource-policy": keep指示 Helm 在 helm 操作(例如helm uninstallhelm upgradehelm rollback)导致其删除时跳过删除此资源。但是,此资源成为孤立资源。Helm 将不再以任何方式管理它。helm install --replace如果在已卸载但保留资源的版本上使用,这可能会导致问题。

4.8 创建自己的 chart

图表开发指南解释了如何开发您自己的图表。helm create但是您可以使用以下命令快速入门:


$ helm create deis-workflowCreating deis-workflow
复制代码


当您编辑图表时,您可以通过运行来验证它的格式是否正确helm lint


当需要打包图表以进行分发时,您可以运行以下helm package命令:


$ helm package deis-workflowdeis-workflow-0.1.0.tgz
复制代码


现在可以通过以下方式轻松安装该图表 helm install:


$ helm install deis-workflow ./deis-workflow-0.1.0.tgz
复制代码


打包的图表可以加载到图表存储库中。有关更多详细信息,请参阅Helm 图表存储库的文档




✈<font color= #FF4500 size=4 style="font-family:Courier New">推荐阅读:</font>


发布于: 刚刚阅读数: 2
用户头像

ghostwritten

关注

还未添加个人签名 2018.11.14 加入

还未添加个人简介

评论

发布
暂无评论
4. helm 3.8.0 入门_Kubernetes_ghostwritten_InfoQ写作社区