Helm

1 简介

概念

Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来管理 Charts。

类似于:Ubuntu 中的 APT、CentOS 中的 YUM。主要功能:

  • 创建:创建新的charts
  • 打包:将charts打包成tgz文件
  • 交互:与chart仓库交互
  • 安装:安装和卸载K8s的应用
  • 管理:管理使用Helm安装的charts的生命周期

2 安装与仓库

前置条件

  • kubernets集群
  • 安装配置helm

安装

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

自动补全

1
2
3
#设置命令自动补全
echo 'source <(helm completion bash)' >> /etc/profile
. /etc/profile #重载环境变量

配置helm仓库

1
2
3
4
5
6
7
8
9

#查看其仓库信息
helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com
#如上,默认是Google,在国外,速度特别慢
local http://127.0.0.1:8879/charts
#执行下面命令,更改为国内阿里云的仓库
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

更新仓库/查看版本信息

1
2
3
helm repo update   

helm version

测试远程仓库

1
2
3
4
5
6
7
8
9
10
11
helm search mysql      #搜索MySQL
#查看到的是charts包文件,查出来的版本是helm的Charts包的版本

#查看其详细信息
helm inspect stable/mysql

#下载搜索到的包到本地
helm fetch stable/mysql

#在线安装这个MySQL
helm install stable/mysql

3 Chart

基本概念

Chart 是 Helm 的应用打包格式。是创建Kubernetes应用实例的信息集合.Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。由一系列文件组成,这些文件描述了 Kubernetes 部署应用时所需要的资源

比如:

1
2
3
4
5
Service
Deployment
PersistentVolumeClaim
Secret
ConfigMap
  • 我们可以在部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
  • Chart可以很简单:例如,只用于部署一个服务,比如 Memcached。Chart 也可以很复杂:例如,部署整个应用,比如包含 HTTP Servers、 Database、消息中间件、cache 等。
  • Chart 将这些文件放置在预定义的目录结构中,通常整个 chart 被打成 tar 包,而且标注上版本信息,便于 Helm 部署。

目录结构

  • Chart.yaml : chart 的描述文件, 包含版本信息, 名称 等.
  • Chart.lock : chart 依赖的版本信息. ( apiVersion: v2 )
  • values.yaml : 存储 chart 所需要的默认配置,用于配置 templates/ 目录下的模板文件使用的变量.
  • values.schema.json : 一个使用JSON结构的 values.yaml 文件,用于校检 values.yaml 的完整性.
  • charts : chart 所依赖的其他 chart,依赖包的存储目录.
  • README : 说明文件.
  • LICENSE : 版权信息文件.
  • crd/ : 自定义资源的定义,存放 CRD 资源的文件的目录.
  • templates/ : 模板文件存放目录,chart 模板文件,引入变量值后可以生成用于 Kubernetes 的 manifest 文件
  • NOTES.txt : 模板须知/说明文件. helm install 成功后会显示此文件内容到屏幕.
  • deployment.yaml : kubernetes 资源文件. ( 所有类型的 kubernetes 资源文件都存放于 templates 目录下 )
  • _helpers.tpl : 以 _ 开头的文件, 可以被其他模板引用.

Chart.yaml

在同一个集群中,一个Charts可以使用不同的config重复安装多次,每次安装都会创建一个新的Release。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
apiVersion: 			# chart API 版本信息, 通常是 "v1" (必须)
name: # chart 的名称 (必须)
version: # chart 包的版本 (必须),版本控制、只有version变化才会触发升级更新
kubeVersion: # 指定 Kubernetes 版本 (可选)
type: # chart类型 (可选)
description: # 对项目的描述 (可选)
keywords:
- # 有关于项目的一些关键字 (可选)
home: # 项目 HOME 页面的 URL 地址 (可选)
sources:
- # 项目源码的 URL 地址 (可选)
dependencies: # chart 必要条件列表 (可选)
- name: # chart名称 (nginx)
version: # chart版本 ("1.2.3")
repository: # (可选)仓库URL ("https://example.com/charts") 或别名 ("@repo-name")
condition: # (可选) 解析为布尔值的yaml路径,用于启用/禁用chart (e.g. subchart1.enabled )
tags: # (可选)
- # 用于一次启用/禁用 一组chart的tag
import-values: # (可选)
- # ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
alias: # (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用
maintainers: # (可选)维护者信息
- name: # 维护者的名称
email: # 维护者的邮件地址
url: # 维护者的个人主页
engine: gotpl # 模板引擎的名称(可选,默认为 gotpl)
icon: # (可选)指定 chart 图标的 SVG 或 PNG 图像的 URL
appVersion: # 应用程序包含的版本
deprecated: # (可选,使用布尔值)该 chart 是否被废弃
annotations:
example: # 按名称输入的批注列表 (可选).

部署有顺序

chart中所有的Kubernetes对象以及依赖会

  • 聚合成一个单一的集合;然后
  • 按照类型和名称排序;然后
  • 按这个顺序创建/升级。

4 Repository

chart Repoistory是一个可用来存储index.yaml与打包的chart文件的HTTP server。

可以理解为是存放chart的仓库,类似于docker的镜像仓库、GitHub代码仓库等。

仓库使用 helm repo命令管理。

5 Config

应用程序实例化安装时运行使用的配置信息;

6 Release

chart的实例化,将chart安装到k8s上,就叫做生成一个release。如果把 chart 比作程序源码的话,那么 release 则可以看做是程序运行时的进程。

chart 是用户可直接感知的对象(其表现形式就是 .tgz 格式的压缩包)

release 比较抽象,它是专属于 helm 的一个逻辑概念,用来标识在 k8s 中运行的一组资源。有了 release,helm 在操作 k8s 时,就再也不用逐个管理资源,而可以将一组相关的资源当做一个整体来操作,比如删除或升级。