0
点赞
收藏
分享

微信扫一扫

Helm(肝起来)

小贴贴纸happy 2022-04-13 阅读 103

目录

一.Helm介绍

1.Helm的本质

2.Helm的三大概念

二.Helm的版本

1.Helm2

主要组件

存在的问题

2.Helm3

主要组件

主要特性

3.Helm2到Helm3的迁移

1.安装插件

2.迁移helm2的配置,例如仓库

3.迁移helm2部署的应用(确保helm2和helm3同时安装在同一台机器上)

三.Helm3的安装

1.二进制版本安装

2.使用脚本安装

四.Helm的使用

1.查找 Charts

2.安装一个 helm 包

使用现有的chart包

安装前自定义 chart

更多安装方法

3.‘helm upgrade’ 和 ‘helm rollback’:升级 release 和失败时恢复

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

4.‘helm uninstall’:卸载 release

5.‘helm repo’:使用仓库

6.创建自己的 charts

五.*Helm3的常用操作命令*

1.helm

2.helm show——查看chart包文件内容

3.helm get——查看release指定内容(与helm show作用、格式相同)

4.helm plugin——插件管理

5.helm repo——仓库管理


一.Helm介绍

1.Helm的本质

2.Helm的三大概念

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

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

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

二.Helm的版本

1.Helm2

主要组件

    Tiller: helm的服务端,部署在k8s里面的一个pod,通常在kube-system这个系统空间里。主要负责部署helm charts,管理release,跟k8s API通信。

    Helm Client: 主要负责从共有或者私有helm charts仓库拉取chart包,修改变量值,然后直接扔给tiller。

存在的问题

    Helm2的一个主要问题是需要在k8s集群里面运行一个服务端,而这就需要把tiller的端口暴露给外界,会产生安全隐患。

    在helm 2中引入的tiller主要是当时k8s还没有RBAC机制,所以就引入了服务端tiller。的功能相应完善,加入了RBAC和CRD等,都使得tiller这个东西显得多余。

2.Helm3

主要组件

    helm3只有一个客户端,没有服务端,所以安装起来很方便,把相应的程序下下来即可,不需要helm init安装了。

主要特性

  • 移除了tiller
  • 支持分布式helm hub, 有了它就可以在很多时候不需要手动添加非官方repo了,例如helm3 search hub <package name>
  • 为chart输入值进行json schema验证。
  • 可以给helm charts添加test了,通过helm test <release>就能针对部署的应用跑一些tests。
  • 部署的时候release name必须指定了,helm2的时候不指定会自动生成一个。
  • 删除的时候不需要--purge了,删了就是删了。

3.Helm2到Helm3的迁移

1.安装插件

helm3 plugin install https://github.com/helm/helm-2to3

2.迁移helm2的配置,例如仓库

helm3 2to3 move config

3.迁移helm2部署的应用(确保helm2和helm3同时安装在同一台机器上)

 helm3 2to3 convert <release-name> --delete-v2-releases

三.Helm3的安装

1.二进制版本安装

下载 需要的版本

解压

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

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

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

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

如果想直接执行安装,运行

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

四.Helm的使用

1.查找 Charts

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

  • helm search hub 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。
  • helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。

helm search hub 命令会展示所有可用的 charts。

使用 helm search repo 命令,你可以从你所添加的仓库中查找chart的名字

找到想安装的 helm 包,可以通过使用 helm install 命令来安装它。

2.安装一个 helm 包

使用现有的chart包

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

例:

helm install happy-panda bitnami/wordpress

在安装过程中,helm 客户端会打印一些有用的信息,其中包括:哪些资源已经被创建,release当前的状态,以及你是否还需要执行额外的配置步骤。

Helm按照以下顺序安装资源:

Namespace
NetworkPolicy
ResourceQuota
LimitRange
PodSecurityPolicy
PodDisruptionBudget
ServiceAccount
Secret
SecretList
ConfigMap
StorageClass
PersistentVolume
PersistentVolumeClaim
CustomResourceDefinition
ClusterRole
ClusterRoleList
ClusterRoleBinding
ClusterRoleBindingList
Role
RoleList
RoleBinding
RoleBindingList
Service
DaemonSet
Pod
ReplicationController
ReplicaSet
Deployment
HorizontalPodAutoscaler
StatefulSet
Job
CronJob
Ingress
APIService

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

可以使用 helm status 来追踪 release 的状态,或是重新读取配置信息

例:

helm status happy-panda

安装前自定义 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

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

  • --values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
  • --set:通过命令行的方式对指定项进行覆盖。

如果同时使用两种方式,则 --set 中的值会被合并到 --values 中,但是 --set 中的值优先级更高。在--set 中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values <release-name> 来查看指定 release 中 --set 设置的值。也可以通过运行 helm upgrade 并指定 --reset-values 字段来清除 --set 中设置的值。

更多安装方法

helm install 命令可以从多个来源进行安装:

  • chart 的仓库(如上所述)
  • 本地 chart 压缩包
helm install foo foo-0.1.1.tgz
  • 解压后的 chart 目录
helm install foo path/to/foo
  • 完整的 URL
helm install foo https://example.com/charts/foo-1.2.3.tgz

3.‘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 文件

可以使用 helm get values 命令来看看配置值是否真的生效了

例:

helm get values happy-panda

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

例:

helm rollback happy-panda 1

这条命令将我们的 happy-panda 回滚到了它最初的版本。

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

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

  • --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.‘helm uninstall’:卸载 release

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

例:

helm uninstall happy-panda

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

在 Helm2 版本中,当一个 release 被删除,会保留一条删除记录。

而在 Helm 3 中,删除也会移除 release 的记录。 如果你想保留删除记录,使用 helm uninstall --keep-history。使用 helm list --uninstalled 只会展示使用了 --keep-history 删除的 release

helm list --all 会展示 Helm 保留的所有 release 记录,包括失败或删除的条目(指定了 --keep-history)

5.‘helm repo’:使用仓库

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

使用 helm repo list 来查看配置的仓库

例:

helm repo list

NAME            URL
stable          https://charts.helm.sh/stable
mumoshu         https://mumoshu.github.io/charts

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

helm repo add dev https://example.com/dev-charts

chart 仓库经常在变化,在任何时候你都可以通过执行 helm repo update 命令来确保你的 Helm 客户端是最新的

helm install test ./test

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

6.创建自己的 charts

chart 开发指南 介绍了如何开发自己的chart

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

例:

helm create test

./test 目录下已经有一个 chart 了。可以编辑它并创建自己的模版。

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

将 chart 打包分发时,可以运行 helm package 命令

helm package test

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

helm install test ./test

打包好的 chart 可以上传到 chart 仓库中

五.*Helm3的常用操作命令*

1.helm

查看helm基本操作命令

helm

查看helm的版本

helm version

查看helm环境变量

helm env

创建chart目录(含基本配置文件和目录)

helm create chartName

将chart目录打包

helm package chartDir

chartDir为chart目录

渲染template目录下的模板文件(即将这些模板文件的字段内容用values.yaml填充,然后直接输出到终端)

helm template chartName

根据关键字检索chart包

helm search repo keyword
helm search repo keyword

repo表示在本地所添加的仓库中进行检索;hub表示在Helm Hub中进行检索。

查看发布到k8s中的chart对应的release

helm list

上传chart到chart仓库

helm push chart.tgz repoName

有些仓库是有账号密码验证的,所以需要加上账号、密码的参数(比如Harbor提供的chart仓库功能

从chart仓库中拉取chart到本地

helm pull repoName/keyword

检查chart包中的文件内容是否正确(即该chart包去k8s中是否能够成功安装部署)

helm lint chartName

包可以是chart目录、chart压缩包

将chart包发布到k8s集群中安装部署

helm install releaseName chartName
releaseName为release的名字,chartName为chart包名,chart可以是未打包的chart,也可以是打包的chart,也可以是仓库中的chart。【chart和release的关系可以大致理解为程序和进程的关系,一个是静态的,一个是动态的】

helm install chartName --generate-name
可以不指定release的名字,只需要指定–generate-name即可随机生成一个名字
验证:创建完后可以使用helm list查看是否有对应的release

将部署到k8s中的release卸载掉

helm uninstall releaseName

卸载完后使用helm list查看relDemo是否被删除了,同时可以使用kubectl get pods查看相应的pod等与release相关的资源是否全部删除干净

将部署到k8s中的release升级,即相当于应用升级

helm upgrade releaseName chartName

relName指定一个release,该release对应一个k8s中的应用,chartName指定一个chart包,整个过程为直接使用指定的chart包替换部署release。就helm而言release还是原来那个,不过对应的chart包被替换了。对k8s而言,仅仅是将原先资源删除,然后用新的chart包创建资源。

验证:使用helm list查看release的CHART字段是否更新,同时可以使用kubectl get pods查看相应的pod等与release相关的资源是否全部更新(看名字、运行时间)

将release回退到前一个或若干个版本(k8s中会同步回退)

helm rollback releaseName revision

revision为第几个版本,1表示第一个版本,2表示第二个版本,以此类推。通常回滚会搭配helm history releaseName使用,通过该命令查看所有的关于本release的发布历史,然后选择回退到哪个版本

验证:回滚成功后使用helm list查看该release的CHART和APP VERSION是否更新(具体得看chart中的chart.yaml中的version和appVersion有没有相应的修改),同时可以使用kubectl get pods查看相应的pod等与release相关的资源是否全部更新(看名字、运行时间)

查看release的发布历史(包括安装、升级、回滚)

helm history releaseName

查看release的基本信息

helm status releaseName

2.helm show——查看chart包文件内容

查看chart包中的chart.yaml文件内容

helm show chart chartName

chart包可以是本地的未打包的chart目录(即helm create 创建出来的chart目录),也可以是打包的chart压缩包(由helm package打包),也可以是保存在仓库中的chart包

查看chart包中的values.yaml文件内容

helm show values chartName

查看chart包中README文件内容

helm show readme chartName

查看chart包中chart.yaml、values.yaml、README文件内容

helm show all chartName

3.helm get——查看release指定内容(与helm show作用、格式相同)

查看release的说明信息(相当于chart中的NOTES.TXT)

helm get notes releaseName

查看release在k8s中创建出来的资源

helm get manifest releaseName

查看release的回调创建资源

查看release的回调创建资源

查看release的values配置

helm get values releaseName

查看上述所有内容

helm get all releaseName

4.helm plugin——插件管理

查看本地安装好的插件

helm plugin list

安装插件

插件下载地址:下载插件

helm plugin install pluginURL

卸载插件

helm plugin uninstall pluginName

更新插件,将插件升级到最新版本

helm plugin update pluginName

在下载插件的时候会保存插件及其下载地址,更新的时候使用原本的下载地址直接下载最新版本替换

5.helm repo——仓库管理

查看添加的chart仓库,可在这些chart仓库中拉取chart(实际上就相当于一个应用的安装包)

helm repo list

本地添加chart仓库

helm repo add repoName repoURL

repoName是你自己起的一个名字,用来代表这个repoURL,后续操作仓库的命令中直接用repoName来代替repoURL,只要指定了repoName,就表示要去操作repoName指向的repoURL的仓库

本地删除chart仓库

helm repo remove repoName

将本地所添加的chart仓库的最新信息缓存到本地

helm repo update

helm search命令是检索某仓库中的chart包,假设仓库中一开始是没有所指定的chart包,所以helm search是检索不到的。这时候如果将chart包上传至该仓库,本地需要执行一遍helm repo update以更新本地的缓存数据才能检索到该指定的chart,因为helm search就是读取本地缓存数据的

根据指定仓库目录下的chart包生成index.yaml索引文件

helm repo index repoDir --url=repoURL

repoDir指定一个仓库的目录,该目录用来存放chart包及索引文件index.yaml。url指定仓库的访问路径,生成的索引文件中会以该url为地址前缀拼接上chart包名作为chart包的访问路径
举报

相关推荐

0 条评论