目录
3、创建deployment、service以及values资源清单文件
一、 helm 简介
Helm是kubernetes生态系统中的一个软件包管理工具,类似ubuntu的apt,centos的yum或python的pip一样,专门负责管理kubernetes应用资源;使用helm可以对kubernetes应用进行统一打包、分发、安装、升级以及回退等操作。
想象一下,没有 Helm 的时候,部署一个应用得手动处理一堆 YAML 配置文件,繁琐又易错。而 Helm 就像一个贴心管家,把相关资源打包成 charts,让应用部署变得简单、高效,还可重复、易维护。
Helm 就是为了简化在 Kubernetes 中安装部署容器云应用的一个客户端工具。通过 helm 能够帮助开发者定义、安装和升级 Kubernetes 中的容器云应用,同时也可以通过 helm 进行容器云应用的分享。在 Kubeapps Hub 中提供了包括 Redis、MySQL 和 Jenkins 等常见的应用,通过 helm 可以使用一条命令就能够将其部署安装在自己的 Kubernetes 集群中。
Helm 是管理 Kubernetes 包的工具,Helm 能提供下面的能力:
- 创建新的 charts(图表)
- 将 charts 打包成 tgz 文件
- 与 chart 仓库交互
- 安装和卸载 Kubernetes 的应用
- 管理使用 Helm 安装的 charts 的生命周期
Helm本质上就是让K8s的应用管理(Deployment,Service等)可配置,能够动态生成。通过动态生成K8s资源清单文件(deployment.yaml,service.yaml)。然后调用Kubectl自动执行K8s资源部署。
要具体搞清楚Helm里面是什么东西,是怎么运作让其能够管理好我们的K8s应用资源的,我们看下Helm的架构和工作流程。
二、Helm架构及工作流程
1、Helm V2版本和V3版本架构
2019年11月Heml团队发布V3版本,相比于V2版本最大的变化是将Tiller删除,并大部分代码重构。
Helm里面涉及的几个重要概念:
(一)Chart:应用程序的 “蓝图”
Chart 可以说是 Helm 的灵魂所在,它是一种打包格式,把运行应用所需的全部资源定义都囊括其中,像 Kubernetes 里的 Deployment、Service、ConfigMap 等配置模板,以及一些可配置参数,都能在 Chart 里找到。你可以把它想象成盖房子的蓝图,有了它,就能依葫芦画瓢把应用在 Kubernetes 集群里搭建起来。而且 Chart 极具复用性,开发人员精心打造好后,其他人不用重复 “造轮子”,拿来稍作调整就能用,大大节省了开发部署时间。比如常见的 WordPress、MySQL 等应用,都有对应的 Chart 供大家选用。
(二)Release:Chart 的 “实例化身”
当我们拿着 Chart 这张 “蓝图”,在 Kubernetes 集群里实际部署运行一个应用时,就产生了 Release。简单来说,Release 就是 Chart 在集群中的一个运行实例,它有自己独一无二的名称,通过这个名称,Helm 就能精准地对其进行管理、升级、回滚等操作。一个 Chart 可以在同一个集群里多次安装,每安装一次就会生成一个新的 Release,就好比同一张蓝图能盖出多栋风格相同但又独立的房子。
(三)Repository:Chart 的 “宝库”
Repository 是用来存放 Chart 的仓库,类似于 Linux 系统里的软件源,像官方的 Helm Hub,还有知名的 Bitnami 仓库等,里面汇聚了海量的 Chart 资源。用户可以借助 helm search 命令,轻松地在这些仓库里查找自己所需的 Chart,找到后一键下载安装,就像在软件商店里挑选安装 APP 一样便捷,让获取和部署应用变得易如反掌。
(四)Helm cli:helm客户端组件,负载和Kubernetes api Server通信。
2、Helm 工作流程
(1)V2版本
原文链接:https://blog.youkuaiyun.com/weixin_45433031/article/details/133084748
Chart Install 过程:
- Helm从指定的目录或者tgz文件中解析出Chart结构信息
- Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller
- Tiller根据Chart和Values生成一个Release
- Tiller将Release发送给Kubernetes运行。
Chart Update过程:
- Helm从指定的目录或者tgz文件中解析出Chart结构信息
- Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller
- Tiller生成Release并更新指定名称的Release的History
- Tiller将Release发送给Kubernetes运行
Chart Rollback过程:
- Helm将要回滚的Release的名称传递给Tiller
- Tiller根据Release的名称查找History
- Tiller从History中获取上一个Release
- Tiller将上一个Release发送给Kubernetes用于替换当前Release
(2)V3版本
V3版本去掉了Tiller组件,让Helm cli客户端直接和apiServer通信,更加简单高效。helm客户端通过kubeconfig去连接k8s集群去完成应用的部署,跟kubectl类似。
整个V3的工作流程,可以简单认为基于V2基础上,去掉了Helm client与Tiller通信换成直接与apiServer通信即可。
3、Helm V2历史包袱以及V3的优势
三、安装Helm
由于我的是苹果笔记本,是A1芯片ARM架构的,所以安装文件要选择时arm64的版本。
1、安装Helm客户端
[root@master ~]# wget -c https://get.helm.sh/helm-v3.12.3-linux-arm64.tar.gz
[root@master ~]# tar zxvf helm-v2.14.3-linux-amd64.tar.gz
[root@master ~]# mv linux-amd64/helm /usr/local/bin/
[root@master ~]# chmod +x /usr/local/bin/helm
[root@master ~]# echo 'source <(helm completion bash)' >> /etc/profile
[root@master ~]# . /etc/profile
helm客户端也是基于我们当前用户目录下的~/.kube/config文件,这个文件用在kubectl访问apiserver,以及helm访问apiserver中,helm的权限跟此config文件绑定权限相同。如果在config文件中,给的权限不太够超出了helm可以去执行的事情,就会受限。
[root@k8s-master01 ~]# cd ~/.kube/
[root@k8s-master01 .kube]# ls -l
total 8
drwxr-x--- 4 root root 35 Jan 20 16:28 cache
-rw------- 1 root root 5653 Jan 20 16:21 config