1、Helm介绍及使用
1.1 Helm简介
Helm 帮助管理 Kubernetes 应用程序——Helm Charts 帮助您定义、安装和升级最复杂的 Kubernetes 应用程序。
1.2 Helm 3与Helm 2
Helm3相较于Helm2:
- Helm3移除了Tiller
- 改进了升级策略:三路策略合补丁
- 发布名称限制在namespace范围内
- 引入了GO的path导入
- 使用JSON格式验证Chart Values
- 将requirement,yaml 合并到Chart.yaml
- name安装时是必需的,如果不指定可以使用--generate-name自动生成名称
- 支持Library chart
- Chart.yaml apiVersion切换到了v2同时兼容v1
- 一些命令的重新命名
- ...
1.3 Helm支持K8S版本
Helm 版本 | 支持的 Kubernetes 版本 |
---|---|
3.4.x | 1.19.x - 1.16.x |
3.3.x | 1.18.x - 1.15.x |
3.2.x | 1.18.x - 1.15.x |
3.1.x | 1.17.x - 1.14.x |
3.0.x | 1.16.x - 1.13.x |
1.4 Helm3 chart 默认目录结构
helm create test // 创建chart,目录结构如下
tree test
test
├── charts // 存放依赖的chart
├── Chart.yaml // 包含Chart的基本信息,包括chart版本,名称等
├── templates // 目录下存放应用一系列 k8s 资源的 yaml 模板
│ ├── deployment.yaml
│ ├── _helpers.tpl //定义一些可重用的模板片断,此文件中的定义在任何资源定义模板中可用
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt // 介绍chart 部署后的帮助信息,如何使用chart等
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml // 包含了必要的值定义(默认值), 用于存储 templates 目录中模板文件中用到变量的值
1.5 常用命令
helm version // 查看helm版本
helm create xxx // 创建一个xxx charts
helm install xxx1 ./xxx // 部署安装xxx,设置名称为xxx1
helm uninstall xxx1 // 卸载删除xxx1
helm list // 列出已经部署的charts
helm package ./xxx // 打包charts
helm template helm_charts-0.1.1.tgz // 查看生成的模板
helm repo add --username admin --password password myharbor xxx // 增加repo
helm repo update // 更新仓库资源
1.6 values.yaml文件
1.6.1 简介
Chart开发者可以在chart中提供一个命名为 values.yaml
的文件。这个文件包含了默认值,Chart用户可以提供一个包含了value的YAML文件。可以在命令行使用 helm install
命令时提供。
1.6.2 预定的value值
Values通过模板中.Values
对象可访问的values.yaml
文件(或者通过 --set
参数)提供, 但可以模板中访问其他预定义的数据片段。以下值是预定义的,对每个模板都有效,并且可以被覆盖。和所有值一样,名称 区分大小写。
Release.Name: 版本名称(非chart的)
Release.Namespace: 发布的chart版本的命名空间
Release.Service: 组织版本的服务
Release.IsUpgrade: 如果当前操作是升级或回滚,设置为true
Release.IsInstall: 如果当前操作是安装,设置为true
Chart: Chart.yaml的内容。因此,chart的版本可以从 Chart.Version 获得, 并且维护者在Chart.Maintainers里。
Files: chart中的包含了非特殊文件的类图对象。这将不允许您访问模板, 但是可以访问现有的其他文件(除非被.helmignore排除在外)。 使用{{ index .Files "file.name" }}可以访问文件或者使用{{.Files.Get name }}功能。 您也可以使用{{ .Files.GetBytes }}作为[]byte方位文件内容。
Capabilities: 包含了Kubernetes版本信息的类图对象。({{ .Capabilities.KubeVersion }} 和支持的Kubernetes API 版本({{ .Capabilities.APIVersions.Has "batch/v1" }})
1.6.3 value文件说明
values文件被定义为YAML格式。chart会包含一个默认的values.yaml
文件。 Helm安装命令允许用户使用附加的YAML values覆盖这个values。
chart包含的默认values文件 必须 被命名为values.yaml
。可以在命令行指定的文件可以是其他名称。
Values文件可以声明顶级chart的值,以及charts/
目录中包含的其他任意chart。
1.7 chart.yaml 文件
1.7.1 文件内容
包含如下字段,其他字段将被忽略。
apiVersion: chart API 版本 (必需) helm3支持v1、v2
name: chart名称 (必需)
version: 语义化2 版本(必需) 语义化版本2.0.0:https://semver.org/spec/v2.0.0.html
kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
description: 一句话对这个项目的描述(可选)
type: chart类型 (可选)application/library
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
enabled: (可选) 决定是否加载chart的布尔值
import-values: # (可选)
- ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
alias: (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用
maintainers: # (可选)
- name: 维护者名字 (每个维护者都需要)
email: 维护者邮箱 (每个维护者可选)
url: 维护者URL (每个维护者可选)
icon: 用做icon的SVG或PNG图片URL (可选)
appVersion: 包含的应用版本(可选)。不需要是语义化的
deprecated: 不被推荐的chart (可选,布尔值)
annotations:
example: 按名称输入的批注列表 (可选).
1.7.2 部分字段说明
apiVersion
需要Helm 3的chart,
apiVersion
字段应该是v2
。Chart支持之前apiVersion
设置为v1
的Helm 版本, 并且在Helm 3中仍然可安装。v1
到v2
的改变:dependencies
字段定义了chart的依赖,针对于
v1版本的chart被放置在分隔开的
requirements.yaml文件中.type`字段, 用于识别应用和库类型的chart.
appVersion
appVersion
字段与version
字段无关。它是指定应用程序版本的一种方式。 比如drupal
chart 可以是appVersion: 8.2.1
, 表示包含在chart中(默认)的Drupal 版本是8.2.1
。 这个字段是信息字段,对chart版本的计算没有影响kubeVersion
可选的
kubeVersion
字段可以在支持的Kubernetes版本上定义语义化版本约束,Helm 在安装chart时会验证这个版本约束, 并在集群运行不支持的Kubernetes版本时显示失败。版本约束可以包括空格分隔和比较运算符,比如:
>= 1.13.0 < 1.15.0 >= 1.13.0 < 1.14.0 || >= 1.14.1 < 1.15.0
dependencies
当前chart依赖的其他chart会在
dependencies
字段定义为一个列表。dependencies: - name: apache
version: 1.2.3
repository: https://example.com/charts
- name: mysql
version: 3.2.1
repository: https://another.example.com/chartsname
字段是你需要的chart的名称version
字段是你需要的chart的版本
repository
字段是chart仓库的完整URL。注意你必须使用helm repo add
在本地添加仓库- 可以使用仓库的名称代替URL