# 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 # 可选: 包含简要使用说明的纯文本文件 ```
## 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: 按名称输入的批注列表 (可选). ```
## 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文件可用于此。
## Values文件 考虑到后面部分的模板,values.yaml文件提供的必要值如下: ``` yaml imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "s3" ```
## 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)