130 lines
5.0 KiB
Markdown
130 lines
5.0 KiB
Markdown
# Chart 说明
|
||
## 文件结构
|
||
|
||
chart是一个组织在文件目录中的集合。目录名称就是chart名称(没有版本信息)。
|
||
|
||
``` bash
|
||
chart/
|
||
Chart.yaml # 包含了chart信息的YAML文件
|
||
LICENSE # 可选: 包含chart许可证的纯文本文件
|
||
README.md # 可选: 可读的README文件
|
||
values.yaml # chart 默认的配置值
|
||
values.schema.json # 可选: 一个使用JSON结构的values.yaml文件
|
||
charts/ # 包含chart依赖的其他chart
|
||
crds/ # 自定义资源的定义
|
||
templates/ # 模板目录, 当和values 结合时,可生成有效的Kubernetes manifest文件
|
||
templates/NOTES.txt # 可选: 包含简要使用说明的纯文本文件
|
||
```
|
||
|
||
<br/>
|
||
|
||
## Chart.yaml
|
||
|
||
Chart.yaml文件是chart必需的。包含了以下字段:
|
||
|
||
``` yaml
|
||
apiVersion: chart API 版本 (必需)
|
||
name: chart名称 (必需)
|
||
version: 语义化2 版本(必需)
|
||
kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
|
||
description: 一句话对这个项目的描述(可选)
|
||
type: chart类型 (可选)
|
||
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: 维护者URL (每个维护者可选)
|
||
icon: 用做icon的SVG或PNG图片URL (可选)
|
||
appVersion: 包含的应用版本(可选)。不需要是语义化,建议使用引号
|
||
deprecated: 不被推荐的chart (可选,布尔值)
|
||
annotations:
|
||
example: 按名称输入的批注列表 (可选).
|
||
```
|
||
|
||
<br/>
|
||
|
||
## values.yaml
|
||
### 预定义的 Values
|
||
|
||
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" }})
|
||
|
||
注意: 任何未知的Chart.yaml字段会被抛弃。在Chart对象中无法访问。因此, Chart.yaml不能用于将任意结构的数据传递到模板中。不过values文件可用于此。
|
||
|
||
<br/>
|
||
|
||
## Values文件
|
||
|
||
考虑到后面部分的模板,values.yaml文件提供的必要值如下:
|
||
|
||
``` yaml
|
||
imageRegistry: "quay.io/deis"
|
||
dockerTag: "latest"
|
||
pullPolicy: "Always"
|
||
storage: "s3"
|
||
```
|
||
|
||
<br/>
|
||
|
||
## Templates 模板文件
|
||
|
||
模板文件遵守书写Go模板的标准惯例(查看 文本/模板 Go 包文档了解更多)。 模板文件的例子看起来像这样:
|
||
|
||
``` yaml
|
||
apiVersion: v1
|
||
kind: ReplicationController
|
||
metadata:
|
||
name: deis-database
|
||
namespace: deis
|
||
labels:
|
||
app.kubernetes.io/managed-by: deis
|
||
spec:
|
||
replicas: 1
|
||
selector:
|
||
app.kubernetes.io/name: deis-database
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app.kubernetes.io/name: deis-database
|
||
spec:
|
||
serviceAccount: deis-database
|
||
containers:
|
||
- name: deis-database
|
||
image: {{ .Values.imageRegistry }}/postgres:{{ .Values.dockerTag }}
|
||
imagePullPolicy: {{ .Values.pullPolicy }}
|
||
ports:
|
||
- containerPort: 5432
|
||
env:
|
||
- name: DATABASE_STORAGE
|
||
value: {{ default "minio" .Values.storage }}
|
||
```
|
||
|
||
# 参考资料
|
||
|
||
- [官方文档 *https://helm.sh/zh/docs/topics/charts*](https://helm.sh/zh/docs/topics/charts)
|
||
|