Kubernetes 应用包管理器 Helm 保姆级中文简明教程

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

ea107aaccab9dbbd36b5342b46e6e4f2.png

Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式!

Helm 帮助您管理 Kubernetes 应用 —— Helm 图表,即使是最复杂的 Kubernetes 应用程序,都可以帮助您定义,安装和升级。图表 Chart 易于创建、发版、分享和发布,所以停止复制粘贴,开始使用 Helm 吧。

  • Helm 是什么?

  • Kubernetes 包管理器,可以简单理解为 aptyml 工具。

1工具特性

Helm 是 CNCF 的毕业项目,由 Helm 社区维护。

  • 复杂性管理

即使是最复杂的应用,图表 Charts 依然可以描述, 提供使用单点授权的可重复安装应用程序。

  • 易于升级

随时随地升级和自定义的钩子消除您升级的痛苦。

  • 分发简单

图表 Charts 很容易在公共或私有化服务器上发版,分发和部署站点。

  • 回滚

使用 helm rollback 可以轻松回滚到之前的发布版本。

2安装使用

工具安装提供多种安装方式

https://helm.sh/zh/docs/topics/plugins/

  • [1] 获取 Helm 工具 - 包管理器安装

    • 安装完成后,解压二进制包并添加到 PATH,就可以使用了!

# homebrew(macOS)
$ brew install helm

# Chocolatey(Windows)
$ choco install kubernetes-helm

# Apt(Debian/Ubuntu)
$ curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
$ sudo apt-get install apt-transport-https --yes
$ echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
$ sudo apt-get update
$ sudo apt-get install helm
  • [2] 获取 Helm 工具 - 使用脚本安装

    • Helm 现在有个安装脚本可以自动拉取最新的 Helm 版本并在本地安装!

# 直接执行安装
$ curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  • [3] 获取 Helm 工具 - 二进制版本安装

    • 每个 Helm 版本都提供了各种操作系统的二进制版本!

# 下载需要的版本
$ https://github.com/helm/helm/releases

# 解压压缩包
$ tar -zxvf helm-v3.0.0-linux-amd64.tar.gz

# 移动到需要的目录中
$ mv linux-amd64/helm /usr/local/bin/helm
  • [4] 获取 Charts 图表

    • 访问 Helm 应用中心 浏览公共库大量的图表!

    bf14e1b98f37ea330bd2885929f7b9c9.png
Artifacthub
9c2c6fcf2c61e68bb1321aec2e046694.png
点击上图,打开小程序,『美团外卖』红包免费领!

[5] 简单上手使用

  • 安装好了 Helm 之后,可以添加一个 chart 仓库!

# 添加:有效的Helm-chart仓库
# 更新:确定可以拿到最新的charts列表
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo add brigade https://brigadecore.github.io/charts
$ helm repo update

# 之后就可以查找相关的charts列表
$ $ helm search repo bitnami
NAME                      CHART VERSION      APP VERSION      DESCRIPTION
bitnami/bitnami-common    0.0.9              0.0.9            ...
bitnami/airflow           8.0.2              2.0.0            ...
bitnami/apache            8.2.3              2.4.46        ...

# 了解到这个chart的基本信息
$ helm show chart bitnami/mysql
# 获取关于该chart的所有信息
$ helm show all bitnami/mysql

# 安装对应版本服务
$ helm install bitnami/mysql --generate-name
NAME: mysql-1612624192
LAST DEPLOYED: Sat Feb  6 16:09:56 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES: ...

# 列出所有可被部署的版本
$ helm list
NAME                NAMESPACE    REVISION    STATUS      CHART          APP VERSION
mysql-1612624192    default      1           deployed    mysql-8.3.0    8.0.23

# 卸载一个版本
$ helm uninstall mysql-1612624192
release "mysql-1612624192" uninstalled

# 查看帮助信息
$ helm get -h

3三大概念

Helm 安装 chartsKubernetes 集群中,每次安装都会创建一个新的 release

  • Chart

    • Chart 代表着 Helm 包。

    • 你可以把它看作是 AptYumKubernetes 中的等价物。

    • 它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。

  • Repository

    • Repository(仓库)是用来存放和共享 charts 的地方。

    • 它就像 Fedora 的软件包仓库,只不过它是供 Kubernetes 包所使用的。

  • Release

    • Release 是运行在 Kubernetes 集群中的 chart 的实例。

    • 一个 chart 通常可以在同一个集群中安装多次,每一次安装都会创建一个新的 release

Helm 按照以下顺序安装资源(这里列出主要的一些):

  • Namespace

  • NetworkPolicy

  • ResourceQuota

  • LimitRange

  • ServiceAccount

  • Secret

  • SecretList

  • ConfigMap

  • StorageClass

  • PersistentVolume

  • PersistentVolumeClaim

  • Role

  • RoleList

  • RoleBinding

  • RoleBindingList

  • Service

  • DaemonSet

  • Pod

  • ReplicationController

  • ReplicaSet

  • Deployment

  • HorizontalPodAutoscaler

  • StatefulSet

  • Job

  • CronJob

  • Ingress

  • APIService

4组织架构

  1. https://helm.sh/zh/docs/topics/architecture/

5常用操作

  1. https://helm.sh/zh/docs/helm/helm/

命令实例对应功能介绍
helm repo add bitnami https://charts.bitnami.com/bitnami添加有效的 Helm-chart 仓库
helm repo list查看配置的 chart 仓库
helm search repo wordpress从添加的仓库中查找 chart 的名字
helm install happy-panda bitnami/wordpress安装一个新的 helm 包
helm status happy-panda来追踪展示 release 的当前状态
helm show values bitnami/wordpress查看 chart 中的可配置选项
helm uninstall happy-panda从集群中卸载一个 release
helm list看到当前部署的所有 release
helm pull bitnami/wordpress下载和查看一个发布的 chart
helm upgrade升级 release 版本
helm rollback恢复 release 版本

6值传递方式

安装前自定义 chart

  1. https://helm.sh/zh/docs/chart_best_practices/conventions/

  2. https://helm.sh/zh/docs/chart_best_practices/values/

上述安装方式只会使用 chart 的默认配置选项。很多时候,我们需要自定义 chart 来指定我们想要的配置。

使用 helm show values 可以查看 chart 中的可配置选项:

$ helm show values bitnami/wordpress

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 数据库的权限。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 文件)

7模板的使用

  1. https://helm.sh/zh/docs/howto/charts_tips_and_tricks/

  2. https://helm.sh/zh/docs/chart_best_practices/templates/

8自定义开发

  1. https://helm.sh/zh/docs/topics/charts/

  2. https://helm.sh/zh/docs/chart_best_practices/pods/

  3. https://helm.sh/zh/docs/chart_template_guide/getting_started/

chart 开发指南 介绍了如何开发你自己的 chart。但是你也可以通过使用  helm create 命令来快速开始:

$ helm create deis-workflow
Creating deis-workflow

现在,./deis-workflow 目录下已经有一个 chart 了。你可以编辑它并创建你自己的模版。

在编辑 chart 时,可以通过  helm lint 验证格式是否正确。

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

$ helm package deis-workflow
deis-workflow-0.1.0.tgz

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

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

打包好的 chart 可以上传到 chart 仓库中。查看  Helm chart 仓库获取更多信息。

9钩子的使用

  1. https://helm.sh/zh/docs/topics/charts_hooks/

10仓库的创建

  1. https://helm.sh/zh/docs/topics/chart_repository/

  2. https://helm.sh/zh/docs/topics/registries/

11自动化发布

Chart 发布操作用以自动化 GitHub 的页面 Chart

12新版本变化

  1. https://helm.sh/zh/docs/topics/v2_v3_migration/

13参考链接

  • Helm 官方中文文档

本文转载自:「 Escapelife 的博客 」,原文:https://tinyurl.com/53hjshe2 ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

3f0bd675c662a9cb86926cfac549e723.gif

43892177671b057d48110fb2b93a72db.png

你可能还喜欢

点击下方图片即可阅读

d78b87f6702e01a07017b5fc417142cb.png

如何优雅的通过 ApiServer 远程访问 Kubernetes 集群

bb381764097cba8dbca781fa76520525.png

点击上方图片,『美团|饿了么』大额外卖红包天天免费领

81deb7ecdfae707ffd37fd104f24acaa.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值