Helm 3 完整教程(一):Helm 3 简介

网上苦寻详细的 Helm 3 文档无果,官网文档过于杂乱,在技术群里咨询文档信息又惨遭嘲讽。MD 不蒸馒头争口气,没有好的文档我就自己总结一份文档。文档中的部分内容来源于各大博客和官网,部分文字内容经过我的重新整理。所有的概念讲解均会配有本人实操的代码记录和心得。文章不定期更新,欢迎关注和订阅专栏。有问题欢迎评论区留言。
本专栏原文链接:https://blog.csdn.net/xzk9381/category_10895812.html,转载请注明出处

一、什么是 Helm

Kubernetes 是一个分布式的容器集群管理系统,它将集群中的所有资源都抽象成 API 对象,并且使用声明的方式来创建、修改、删除这些对象。这样带来的一个问题就是这些 API 对象的声明文件非常多。每当需要创建一个应用时,都需要去编写一堆声明创建资源的文件。尤其是当前很多业务都向微服务转变,通过分解巨大的单体应用为多个服务的方式,分解了单体应用的复杂性,使每个微服务都可以独立部署和扩展,实现了敏捷开发和快速迭代和部署。但任何事情都有两面性,虽然微服务给我们带来了很多便利,但由于应用被拆分成多个组件,导致服务数量大幅增加,对于 Kubernetest 编排来说,每个组件有自己的资源文件,并且可以独立的部署与伸缩,这就带来了如下一些问题:

  • 需要管理、更新和维护大量的 yaml 文件
  • 不能根据一套 yaml 文件创建多个环境,需要手动进行修改

Helm 就是用来管理这些 API 对象的工具。它类似于 CentOS 的 YUM 包管理,Ubuntu 的 APT 包管理,你可以把它理解成 Kubernetes 的包管理工具。它能够把创建一个应用所需的所有 Kubernetes API 对象声明文件组合并打包在一起。并提供了仓库的机制便于分发共享,还支持模版变量替换,同时还有版本的概念,使之能够对一个应用的版本进行管理。

二、Helm 组件

Helm 有如下组件(概念):

  • Chart: 就是 Helm 的一个包(package),包含一个应用所有的 Kubernetes manifest 模版,类似于 YUM 的 RPM 或者 APT 的 dpkg 文件。
  • Helm CLI: Helm 的客户端组件,负责和 Kubernetes API 通信
  • Repository: 用于发布和存储 Chart 的仓库。
  • Release: 可以理解成 Chart 部署的一个实例。通过 Chart 在 Kubernetes 中部署的应用都会产生一个唯一的 Release,即使是同一个 Chart,部署多次就会产生多个 Release。

三、Helm 3 和 Helm 2 的不同

以下只列出部分重要的改动,完整的信息请参考官网:https://v3.helm.sh/zh/docs/faq/

1、移除 Tiller

Helm 2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。而由于 RBAC 等权限控制体系的组件完善,多租户和安全的需求日益兴起,Tiller变得越来越不安全,社区在权限控制领域遇到了极大的阻碍。所以在 Helm 3 版本中,直接将 Tiller 这一核心组件移除,helm 直接和 Kubernetes API 进行通信。这样做带来的好处有如下几点:

  • Helm 的架构变的更为简单和灵活

  • 不再需要创建 ServiceAccount,直接使用当前环境中的 kubeconfig 配置

  • 可以直接和 Kubernetes API 交互,更为安全

  • 不再需要使用 helm init 来进行初始化(以前的版本需要使用该命令来向 K8S 集群中安装 Tiller)

2. 删除 release 命令变更

以前的版本中完全删除一个 release 需要使用如下命令:

helm delete release-name --purge

现在只需要使用 uninstall 命令即可,–purge 会作为一个默认的行为:

helm uninstall release-name

3. 查看 charts 信息命令变更

以前的版本使用 helm inspect 命令查看具体的 charts 信息,现在改为了 helm show 命令。

4. 拉取 charts 包命令变更

将以前版本中的 helm fetch 命令修改为 helm pull 命令。这更像是与 docker pull 看齐。

5. 必须指定 release 名称

在 helm 2 中,如果在 helm install 时没有指定 release 名称,那么会自动生成一个随机名称。但是在 helm 3 中,则必须要指定 release 名称,或者使用 --generate-name 选项。

Error: must either provide a name or specify --generate-name

6. 关于 release 信息存储

helm 2 中,release 的信息全部存储在 Tiller 所在的命名空间中,所以 release 的名称不能重复。在 helm 3 中,release 的信息只会存储在 release 安装的命名空间中,这样不同的 namepsace 就可以出现相同名字的 release。

所以如果考虑将 helm 2 升级至 helm 3,需要使用官方提供的 2To3 插件来完成,具体的操作流程可以参考官网:https://helm.sh/zh/docs/topics/v2_v3_migration/

本专栏原文链接:https://blog.csdn.net/xzk9381/category_10895812.html,转载请注明出处

猜你喜欢

转载自blog.csdn.net/xzk9381/article/details/114984492