Kubernetes的软件包管理工具:Helm3

一、概述

1.Helm是什么?

Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Python中的 pip 一样,能快速查找、下载和安装软件包。

2.Helm解决的痛点

在 Kubernetes中部署一个可以使用的应用,需要涉及到很多的 Kubernetes 资源的共同协作。比如你安装一个 WordPress,用到了一些 Kubernetes (下面全部简称k8s)的一些资源对象,包括 Deployment 用于部署应用、Service 提供服务发现、Secret 配置 WordPress 的用户名和密码,可能还需要 pv 和 pvc 来提供持久化服务。并且 WordPress 数据是存储在mariadb里面的,所以需要 mariadb 启动就绪后才能启动 WordPress。这些 k8s 资源过于分散,不方便进行管理。
Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操作。

3. Helm相关组件及概念

  • helm 是一个命令行工具,主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
  • chart Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。
  • Repoistory Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
  • release 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。

4.Helm原理

Kubernetes的软件包管理工具:Helm3_第1张图片

创建release

  • helm 客户端从指定的目录或本地tar文件或远程repo仓库解析出chart的结构信息
  • helm 客户端根据 chart 和 values 生成一个 release
  • helm 将install release请求直接传递给 kube-apiserver

删除release

  • helm 客户端从指定的目录或本地tar文件或远程repo仓库解析出chart的结构信息
  • helm 客户端根据 chart 和 values 生成一个 release
  • helm 将delete release请求直接传递给 kube-apiserver

更新release

  • helm 客户端从指定的目录或本地tar文件或远程repo仓库解析出chart的结构信息
  • helm 将收到的信息生成新的 release,并同时更新这个 release 的 history
  • helm 将新的 release 传递给 kube-apiserver 进行更新

5、chart的基本结构

Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源。Chart中的文件安装特定的目录结构组织, 最简单的chart 目录如下所示:

## Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源。
## Chart中的文件安装特定的目录结构组织, 最简单的chart 目录如下所示:
./
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml
  • charts 目录存放依赖的chart
  • Chart.yaml 包含Chart的基本信息,包括chart版本,名称等
  • templates 目录下存放应用一系列 k8s 资源的 yaml 模板
  • _helpers.tpl 此文件中定义一些可重用的模板片断,此文件中的定义在任何资源定义模板中可用
  • NOTES.txt 介绍chart 部署后的帮助信息,如何使用chart等
  • values.yaml 包含了必要的值定义(默认值), 用于存储 templates 目录中模板文件中用到变量的值

二、安装Helm

1.安装Helm

点击下载最新版本

tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
echo "source <(helm completion bash)" >> .bashrc

2.添加常用repo

#微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库强烈推荐,基本上官网有的chart这里都有。
#阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
#官方仓库(https://hub.kubeapps.com/charts/incubator)官方chart仓库,国内有点不好使。

#添加存储库:
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update

三、使用Helm

1.使用chart部署一个mysql

## 查找所有repo下的所有chart
helm search repo
## 查找stable这个repo下的chart mysql
helm search repo stable/mysql

## 查看chart信息:
helm show chart stable/mysql
## 安装包:
helm install db stable/mysql**
## 查看发布状态:
helm status db

2.安装前自定义chart配置选项

上面部署的mysql并没有成功,这是因为并不是所有的chart都能按照默认配置运行成功,可能会需要一些环境依赖,例如PV。
所以我们需要自定义chart配置选项,安装过程中有两种方法可以传递配置数据:

  • –values(或-f):指定带有覆盖的YAML文件。这可以多次指定,最右边的文件优先
  • –set:在命令行上指定替代。如果两者都用,–set优先级高
# helm show values stable/mysql
# cat config.yaml
persistence:
  enabled: true
  storageClass: "managed-nfs-storage"
  accessMode: ReadWriteOnce
  size: 8Gi
mysqlUser: "k8s"
mysqlPassword: "123456"
mysqlDatabase: "k8s"

helm install db -f config.yaml stable/mysql
kubectl get pods

3.构建一个Helm Chart

helm create demo

#Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及版本等。
#values.yaml :用于存储 templates 目录中模板文件中用到变量的值。
#Templates: 目录里面存放所有yaml模板文件。
#charts:目录里存放这个chart依赖的所有子chart。
#NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给用户。例如:如何使用这个 Chart、列出缺省的设置等。
#_helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用

#创建Chart后,接下来就是将其部署:
helm install web demo/

#也可以打包推送的charts仓库共享别人使用。
helm package demo/
demo-0.1.0.tgz

4.升级、回滚和删除

## 发布新版本的chart时,或者当您要更改发布的配置时,可以使用该helm upgrade 命令。
helm upgrade --set imageTag=1.17 web demo
helm upgrade -f values.yaml web demo

## 如果在发布后没有达到预期的效果,则可以使用helm rollback回滚到之前的版本。
例如将应用回滚到第一个版本:
helm rollback web 2
## 卸载发行版,请使用以下helm uninstall命令:
helm uninstall web
## 查看历史版本配置信息
helm get --revision 1 web

你可能感兴趣的:(Kubernetes)