Helm使用的包格式称为 chart。chart就是一个描述Kubernetes相关资源的文件集合。
Chart 文件结构
以bitnami/sonarqube
为例来说明chart的文件结构
[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir helm-chart
[root@localhost helm-chart]# helm pull bitnami/sonarqube
[root@localhost helm-chart]# ll
总用量 88
-rw-r--r--. 1 root root 89299 12月 31 19:46 sonarqube-0.1.6.tgz
[root@localhost helm-chart]# tar -xzvf sonarqube-0.1.6.tgz
[root@localhost helm-chart]# ll
总用量 88
drwxr-xr-x. 5 root root 138 12月 31 19:50 sonarqube
-rw-r--r--. 1 root root 89299 12月 31 19:46 sonarqube-0.1.6.tgz
[root@localhost helm-chart]# cd sonarqube/
[root@localhost sonarqube]# tree
.
├── Chart.lock
├── charts #包含chart依赖的其他chart
│ ├── common
│ │ ├── Chart.yaml
│ │ ├── README.md
│ │ ├── templates
│ │ │ ├── _affinities.tpl
│ │ │ ├── _capabilities.tpl
│ │ │ ├── _errors.tpl
│ │ │ ├── _images.tpl
│ │ │ ├── _ingress.tpl
│ │ │ ├── _labels.tpl
│ │ │ ├── _names.tpl
│ │ │ ├── _secrets.tpl
│ │ │ ├── _storage.tpl
│ │ │ ├── _tplvalues.tpl
│ │ │ ├── _utils.tpl
│ │ │ ├── validations
│ │ │ │ ├── _cassandra.tpl
│ │ │ │ ├── _mariadb.tpl
│ │ │ │ ├── _mongodb.tpl
│ │ │ │ ├── _postgresql.tpl
│ │ │ │ ├── _redis.tpl
│ │ │ │ └── _validations.tpl
│ │ │ └── _warnings.tpl
│ │ └── values.yaml
│ └── postgresql
│ ├── Chart.lock
│ ├── charts
│ │ └── common
│ │ ├── Chart.yaml
│ │ ├── README.md
│ │ ├── templates
│ │ │ ├── _affinities.tpl
│ │ │ ├── _capabilities.tpl
│ │ │ ├── _errors.tpl
│ │ │ ├── _images.tpl
│ │ │ ├── _ingress.tpl
│ │ │ ├── _labels.tpl
│ │ │ ├── _names.tpl
│ │ │ ├── _secrets.tpl
│ │ │ ├── _storage.tpl
│ │ │ ├── _tplvalues.tpl
│ │ │ ├── _utils.tpl
│ │ │ ├── validations
│ │ │ │ ├── _cassandra.tpl
│ │ │ │ ├── _mariadb.tpl
│ │ │ │ ├── _mongodb.tpl
│ │ │ │ ├── _postgresql.tpl
│ │ │ │ ├── _redis.tpl
│ │ │ │ └── _validations.tpl
│ │ │ └── _warnings.tpl
│ │ └── values.yaml
│ ├── Chart.yaml
│ ├── ci
│ │ ├── commonAnnotations.yaml
│ │ ├── default-values.yaml
│ │ └── shmvolume-disabled-values.yaml
│ ├── files
│ │ ├── conf.d
│ │ │ └── README.md
│ │ ├── docker-entrypoint-initdb.d
│ │ │ └── README.md
│ │ └── README.md
│ ├── README.md
│ ├── templates
│ │ ├── configmap.yaml
│ │ ├── extended-config-configmap.yaml
│ │ ├── extra-list.yaml
│ │ ├── _helpers.tpl
│ │ ├── initialization-configmap.yaml
│ │ ├── metrics-configmap.yaml
│ │ ├── metrics-svc.yaml
│ │ ├── networkpolicy.yaml
│ │ ├── NOTES.txt
│ │ ├── podsecuritypolicy.yaml
│ │ ├── prometheusrule.yaml
│ │ ├── rolebinding.yaml
│ │ ├── role.yaml
│ │ ├── secrets.yaml
│ │ ├── serviceaccount.yaml
│ │ ├── servicemonitor.yaml
│ │ ├── statefulset-readreplicas.yaml
│ │ ├── statefulset.yaml
│ │ ├── svc-headless.yaml
│ │ ├── svc-read-set.yaml
│ │ ├── svc-read.yaml
│ │ ├── svc.yaml
│ │ └── tls-secrets.yaml
│ ├── values.schema.json
│ └── values.yaml
├── Chart.yaml # 包含了chart信息的YAML文件
├── ci
│ ├── ct-values.yaml
│ └── values-with-ingress-and-metrics.yaml
├── README.md # 可选: 可读的README文件
├── templates #模板目录,当和values 结合时,可生成有效的Kubernetes manifest文件
│ ├── deployment.yaml
│ ├── externaldb-secret.yaml
│ ├── extra-list.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── jmx-configmap.yaml
│ ├── jmx-metrics-svc.yaml
│ ├── jmx-servicemonitor.yaml
│ ├── NOTES.txt
│ ├── pvc.yaml
│ ├── secret.yaml
│ ├── service-account.yaml
│ ├── service.yaml
│ └── tls-secret.yaml
└── values.yaml # chart 默认的配置值
16 directories, 96 files
Chart dependency
Helm 中,chart可能会依赖其他的charts。 这些依赖可以使用Chart.yaml文件中的dependencies 字段动态链接,或者放到charts/ 目录并手动配置。
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: 按名称输入的批注列表 (可选).
Templates and Values
模板的Value通过两种方式提供:
- Chart开发者可以在chart中提供一个命名为 values.yaml 的文件。这个文件包含了默认值。
- Chart用户可以提供一个包含了value的YAML文件。可以在命令行使用 helm install命令时提供。
当用户提供自定义value时,这些value会覆盖chart的values.yaml文件中value。
values文件被定义为YAML格式。chart会包含一个默认的values.yaml文件。 Helm安装命令允许用户使用附加的YAML values覆盖这个values:
$ helm install --generate-name --values=myvals.yaml ./mychart
$ helm install -f myvals.yaml ./mychart
使用Helm管理Chart
创建一个新chart:
$ helm create mychart
Created mychart/
编辑了chart之后,把它打包成一个chart存档:
$ helm package mychart
Archived mychart-0.1.-.tgz
使用helm lint
检查chart的格式问题:
$ helm lint mychart
No issues found
网友评论