概念
Charts 是Helm使用的Kubernetes 资源包打包格式,一个Charts就是一个描述一组Kubernetes资源的文件的集合。一个单独的Charts既能用于部署,也能部署复杂的应用。
charts文件组织结构
mychart/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
目录结构中出了charts和templates是目录以外,其他全都是文件,他们的基本公用如下:
- Chart.yaml 当前的Charts描述信息,yaml格式文件
- LICENSE 当前Charts的许可证信息,纯文本文件;可选文件
- README.md markdown格式readme文件
- requirementsyaml 当前Charts的依赖关系描述文件;可选
- values.yaml 当前Charts用到的默认配置值
- charts 目录,存放当前Charts以来到的所有Charts文件
- templates 目录,存放当前Charts用到的模板文件,可应用于charts生成有效Kubernetes清单配置
- templates/NOTES.txt 文本文件,用于描述Templates注解
Chart.yaml 文件组织格式
Chart.yaml 用于提供Charts相关的各种元素数据,如名称、版本、关键词、维护者信息、使用的模板引擎,它是一个Charts必备的核心文件,主要包含如下字段。
- name: 当前Charts的名称,必选字段。
- version: 遵循语义化版本规范第二版的版本号,必选字段。
- description: 当前项目的但语句描述信息,可选字段。
- keywords: 当前项目的关键词列表,可选字段
- home: 当前项目的主页URL,可选字段。
- sources: 当前项目用到的源码的来源URL列表,可选字段。
- maintainers: 项目维护者信息,组要嵌套 name、email、URL几个属性组成;可选字段
- engine:模板引擎的名称,默认为gotpl,即go模板。
- icon: URL,只想当前项目的图标,SVG或PNG格式的图片;可选字段
- appVersion: 本项目用到的应用程序的版本号,可选字段,且不必为语义化版本
- deprecated: 当前Charts是否已飞起,可选字段,布尔型
- tillerVersion: 当前Charts以来的Tiller版本号,可以使语义化版本号的范围,如”>2.4.0”;可选字段
Charts中的依赖关系
- requirements.yaml 文件
Helm中的一个Charts可能会依赖不止一个其他的charts,这种以来关系可经requirements.yaml进行动态连接,也可直接存储在于charts/目录中进行手动管理。
requirements.yaml 文件本质上只是一个简单的依赖关系列表,它具有类似如下定义中的可用字段:
dependencies:
- name:
version:
repository:
alias:
tags:
condition:
import-values:
- child:
parent:
上述示例中的字段基本可以见名知意
- name: 被依赖的Charts的名称
- version: 被依赖的Charts的版本
- repository: 被依赖的Charts所属的仓库以及URL;如果是非官方的仓库,则需要先用 helm repo add命令将其添加进本地可用仓库。
- alias: 被依赖的Charts创建一个别名,从而让当前Charts可以将所依赖的Charts对应到新名称;可选字段
- tags: 默认情况下所有的Charts都会被装载,若给定了tags,则仅装载那些匹配到的Charts。
- condition: 类似于tags字段,但需要通过自定义的条件来指明要装载的charts
- import-values: 导入子charts中的值;被导入的值需要在子charts中导出。,如下Wordpress Charts中定义的动态依赖关系:
dependencies:
- name: mariadb
version: 2.1.1
repository: https://kubernetes-charts.storage.googleapis.com/
condition: mariadb.enabled
tags:
- wordpress-database
一旦依赖关系稳健配置完成,即可使用 helm dependency update
命令更新依赖关系,并自动下载被依赖的Charts 至 charts/目录中
Charts 目录
若所需要对依赖关系进行更多的控制,则所有呗依赖到的charts都能以手工方式直接复制到Charts目录中。一个被依赖到的Charts即可是归档格式,也可以是展开的目录个事,不过名称不能以”_”和”.”开头,此类文件会被Charts装载器自动忽略。
示例:
charts/
└── mariadb
├── Chart.yaml
├── README.md
├── templates
│ ├── configmap.yaml
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── NOTES.txt
│ ├── pvc.yaml
│ ├── secrets.yaml
│ ├── svc.yaml
│ ├── test-runner.yaml
│ └── tests.yaml
└── values.yaml
模板和值
Helm Charts模板遵循Go模板语言格式,并支持50种以上来自Spring库的模板函数附件,以及为数不少的其他专用函数。所有的模板文件都存储与Templates目录的模板函数附件,以及为数不少的其他专用函数。所有的模板文件都存储于Templates
目录中,在当前Charts被Helm引用时,此目录中的所有模板文件都会传递给模板引擎进行处理。
模板文件中用到的值(value)有如下两种提供方式。
- 通过Charts的value.yaml文件提供,通常用于提供默认值
- 在运行”heml install”命令时传递包含所需自定义值的YAML文件;此处攒地的值会覆盖默认值。
templates示例:
apiVersion: extensions/v1beta1
kind: Deployment
name: {{ template "fullname" . }}
label:
app: {{ template "fullname" . }}
chart: "{{ .Chart.Name}}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
spec:
replicas: 1
template:
metadata:
labels:
app: {{ template "fullname" . }}
spec:
containers:
- name: {{ template "fullname" . }}
image: "{{ .Values.image }}"
imagePullPolicy: {{ default "" .Values.imagesPullPolicy | quote }}
提供依赖的值可由values.yaml文件或由用户在运行 helm install
命令时通过选项提供,除此以外,charts模板还办函一些固定的预定义值
固定的预定义值:
Release.Name
Release.Time
Release.Service
Release.IsUpgrade
Release.IsInstall
Release.Release.Revision
Chart.name
Chart.Version
Files
Capabilities
除以上,还有其他固定的预定义值,参见godoc站点内容
在values.yaml一类的文件中定一值(value)时,既可以将他们定义为全局作用域,也可以定义为仅供Charts目录下的某个Charts所使用。一般来说,上级Charts可访问下级Charts中的值,但下级Charts不能访问其上级charts的值。
示例:
title: "My WordPress Site"
mysql:
max_connections: 100
password: "secret"
apache:
port: 8080
title属于全局作用域
max_connections和password属于mysql Charts的作用域
生成空的Charts
helm create xxx
Charts 仓库
自己创建的charts仅能本地使用,如果要共享给团队,可以打成包发给使用者
也可以使用charts仓库
打包命令:
helm package ./mycahrt
Succssfully packaged chart and saved it to: /root/charts/mychart-0.1.0.tgz
基于chart包进行安装
helm install --name myapp2 mychart-0.1.0.tgz --set service.type=NodePort
Helm内置了HTTP server支持,使用helm serve 即可运行本地仓库来输出本地创建的Charts:
# 这种方式会阻塞,并且只监听了lo地址,需要添加其他参数
[appuser@stateful Helm]$ helm serve
Regenerating index. This may take a moment.
Now serving you on 127.0.0.1:8879
#另起一个终端查询
helm search local
#使用 helm repo add 添加仓库
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
#列出可用仓库
helm repo list
#更新 repo的元数据信息
helm repo update
- 配置依赖关系
在mychart目录中创建requirements.yaml文件给出依赖的Charts列表定义其依赖关系即可,文件内容类似如下所示:
```
dependencies:
- name: mysql
version: 0.6.0
repository: https://kubernetes-charts.storage.googleapis.com
helm dependency update ./mychart需要运行 helm dependency udpate 命令为Charts更新依赖关系
```