Helm —— 强大的 Kubernetes 应用的包管理工具

目录

Helm 是什么?

使用helm的优势

Helm 整体架构

​编辑Helm 主要组件

Helm 工作流程

Helm 版本

Helm 部署安装

构建一个 Helm Chart

Helm 基本命令


Helm 是什么?

Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来管理 Charts。有点类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。

Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。

对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。

对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。

使用helm的优势

一般部署一个应用的过程:

  • 编写yaml文件 ——》 创建 service 对外暴露 ——》 通过ingress域名访问
    • 外部的应用访问集群内的服务有很多种方法,这里不细讲

不使用helm

  • 只适合简单的应用。实际上我们部署微服务项目,可能有几十个服务,用这种方式就不合适了。需要维护大量的yaml文件。

使用helm

  • 可以将大量yaml文件作为一个整体进行管理
  • 实现yaml文件的高效复用。
  • 实现应用级别的版本管理

Helm 整体架构

Helm —— 强大的 Kubernetes 应用的包管理工具_第1张图片Helm 主要组件

  • Chart:Chart 是一个 Helm 的软件包,采用 tar 格式。包含了运行一个K8S应用程序所需的镜像、依赖关系和资源定义等,也就是包含了一个应用所需资源对象的YAML文件。
  • Repository(仓库):是 Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包供用户下载,并且提供了该 Repository 的 Chart 包的清单文件便于查询。
  • Config(配置数据):部署时设置到 Chart 中的配置数据。
  • Release:使用 helm install 命令在 k8s 集群中部署的 Chart 称为 Release 。是基于 Chart 和Config 部署到 K8S 集群中运行的一个实例。一个Chart可以被部署多次,每次的 Release 都不相同。

Helm 工作流程

  • 开发人员将开发好的 Chart 上传到 Chart 仓库。
  • 运维人员基于 Chart 的定义,设置必要的配置数据(Config),使用 Helm 命令行工具将应用一键部署到 K8S 集群中,以 Release 概念管理后续的更新回滚等。
  • Chart 仓库中的 Chart 可以用于共享和分发。

Helm 版本

  • V2版本Helm依赖Tiller组件。Tiller组件用于接收Helm客户端发出的指令,与K8S的API Server交互,完成资源对象的部署和管理。
  • V3版本Helm不再使用Tiller组件,而是将API Server交互的功能整合到Helm客户端程序中。

Helm 部署安装

由于 helm 包在国外,国内通过这个网址进行下载:

wget https://mirrors.huaweicloud.com/helm/v3.3.1/helm-v3.3.1-linux-amd64.tar.gz      

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

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

helm version

注: helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上, 否则 helm 将不可用

构建一个 Helm Chart

helm create mychart

该命令创建了一个 mychart 目录,该目录结构如下所示。

[root@scweb ~]# tree mychart/
mychart/                             # Chart 目录
├── charts                           # 这个 charts 依赖的其他 charts,始终被安装
├── Chart.yaml                       # 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
├── templates                        # 模板目录
│   ├── deployment.yaml              # deployment 控制器的 Go 模板文件
│   ├── _helpers.tpl                 # 以 _ 开头的文件不会部署到 k8s 上,可用于定制通用信息
│   ├── hpa.yaml                     # hpa 的模板文件
│   ├── ingress.yaml                 # ingress 的模板文件
│   ├── NOTES.txt                    # Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值
│   ├── serviceaccount.yaml          # serviceaccount 的 Go 模板文件
│   ├── service.yaml                 # service 的 Go 模板文件
│   └── tests                        # 测试pod目录
│       └── test-connection.yaml     # 测试pod的deployment文件
└── values.yaml                      # 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件

Templates 目录下 YAML 文件模板的值默认都是在 values.yaml 里定义的,比如在 deployment.yaml 中定义的容器镜像。

image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

其中的 .Values.image.repository 的值就是在 values.yaml 里定义的 nginx,.Values.image.tag 的值就是 stable。

$ cat mychart/values.yaml|grep repository
repository: nginx

$ cat mychart/values.yaml|grep tag
tag: stable

以上两个变量值是在 create chart 的时候就自动生成的默认值,可以根据实际情况进行修改。

Helm 基本命令

添加仓库地址

因为helm自带的仓库为境外仓库地址,拉取应用很慢。通过阿里云镜像安装的服务器端可以看到已经安装了很多charts。

helm repo add 存储库名 存储库URL
helm repo update

例如添加阿里云的仓库地址
helm repo add repo_name1 https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/

因为仓库一直在更新,所以最好使用update更新一下
helm repo update

查看添加的仓库列表
helm repo list

据关键字检索chart包

$ helm search repo keyword
$ helm search hub keyword

上面2个命令仅仅在第3个字段有区别,repo表示在本地所添加的仓库中进行检索;hub表示在Helm Hub中进行检索。

查看helm包

$ helm inspect state/mysql

安装helm

最简单的情况下,它只需要一个 chart 的名称参数:

$ helm install stable/mysql

如果想使用自己的release名称 使用参数 --name 即可

可以通过 helm install --dry-run --debug 命令进行调试

查看安装的chart列表

$ helm list

更新charts列表以获取最新版本

helm repo update 

查看chart包文件内容

helm show chart chartName  # 查看chart包中的 chart.yaml 文件内容
# chart包可以是本地的未打包的chart目录(即 helm create 创建出来的chart目录),也可以是打包的chart压缩包(由helm package打包),也可以是保存在仓库中的chart包
 
helm show values chartName    # 查看chart包中的values.yaml文件内容

helm show readme chartName     #查看chart包中README文件内容

helm show all chartName   # 查看chart包中chart.yaml、values.yaml、README文件内容

卸载release

$ helm uninstall releaseName

参数:--keep-history(加上这个参数就会有删除记录)

升级release

$ helm upgrade releaseName chartName

回滚release

$ helm rollback releaseName vision

vision表示为第几个版本,1表示第一个版本,2表示第二个版本,以此类推

查看release的基本信息

$ helm status releaseName

有关Helm的简单介绍就到这里,helm是一个很强大的k8s包管理工具,想详细了解可以找官方文档仔细看一下,希望本文对大家有帮助!

你可能感兴趣的:(Docker,Kubernetes,kubernetes,docker,容器,云原生)