Chart
Helm 使用的包格式称为 chart。 chart 就是一个描述 Kubernetes 相关资源的文件集合。
1 Chart 文件结构
chart是一个组织在文件目录中的集合。目录名称就是chart名称(没有版本信息)。因而描述WordPress的chart可以存储在wordpress/
目录中。
在这个目录中,Helm 期望可以匹配以下结构:
wordpress/
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 # 可选: 包含简要使用说明的纯文本文件
Helm保留使用 charts/
,crds/
, templates/
目录,以及列举出的文件名。其他文件保持原样。
查看主要的两个文件目录
templates/
: 这是运维大哥写的配置文件模板,示例是最简单应用的资源配置,但复杂应用还会有 pvc,role,service-acount 等等values.yaml
: 这是给开发小弟写的可选参数,但是大部分参数都被运维大哥给内置了
1.2 Chart.yaml 文件
Chart.yaml
文件是chart必需的。包含了以下字段:
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: 按名称输入的批注列表 (可选).
例子
apiVersion: v2
name: mysql57
version: 2.0.3
kubeVersion: '>=1.12.0-0'
description: High Availability MySQL Cluster
type: application
keywords:
- MySQL HA
- database
- kubernetes
dependencies:
- name: zookeeper
repository: file://charts/zookeeper
version: 3.4.6-1.0.1
maintainers:
- email: meetbill@163.com
name: meetbill
appVersion: 5.7.38
annotations:
app.kubesphere.io/category: Database & Cache
1.2 Templates
例子
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 }}
可以使用下面四种模板值(一般被定义在values.yaml
文件):
imageRegistry
: Docker镜像的源注册表dockerTag
: Docker镜像的tagpullPolicy
: Kubernetes的拉取策略storage
: 后台存储,默认设置为"minio"
预定义的Values
Values通过模板中.Values
对象可访问的values.yaml
文件(或者通过 --set
参数)提供, 但可以模板中访问其他预定义的数据片段。
以下值是预定义的,对每个模板都有效,并且可以被覆盖。和所有值一样,名称 区分大小写。
Release.Name
: 版本名称(非chart的)Release.Namespace
: 发布的chart版本的命名空间Release.Service
: 组织版本的服务Release.IsUpgrade
: 如果当前操作是升级或回滚,设置为trueRelease.IsInstall
: 如果当前操作是安装,设置为trueChart
: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.3 Values.yaml
imageRegistry: "quay.io/deis"
dockerTag: "latest"
pullPolicy: "Always"
storage: "s3"
values 文件被定义为YAML格式。chart会包含一个默认的values.yaml
文件。 Helm安装命令允许用户使用附加的YAML values覆盖这个values:
$ helm install --generate-name --values=myvals.yaml wordpress
以这种方式传递值时,它们会合并到默认的values文件中。比如,myvals.yaml
文件如下:
storage: "gcs"
当在chart中这个值被合并到values.yaml
文件中时,生成的内容是这样:
imageRegistry: "quay.io/deis"
dockerTag: "latest"
pullPolicy: "Always"
storage: "gcs"
注意只有最后一个字段会覆盖。
Last updated