helm 模板开发入门 (一)

目录
警告
本文最后更新于 2020-06-18 17:27,文中内容可能已过时。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
demo1/
├── charts                #子chart包目录
├── Chart.yaml            #chart包的描述信息元数据
├── templates             # 资源清单模板目录
│   ├── deployment.yaml   #资源清单模板
│   ├── _helpers.tpl      #存放可在整个chart中重复使用的变量
│   ├── ingress.yaml      #资源清单模板
│   ├── NOTES.txt         #说明文件,install后会打印在屏幕中
│   └── service.yaml      #资源清单模板
└── values.yaml           #chart包的默认配置信息

Chart.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
apiVersion: api版本,始终是v1 (必须)
name: chart名称(必须)
version: chart版本号 (必须)
kubeVersion: 兼容的kubernetes版本 (可选)
description: 描述信息 (可选)
keywords:
  - 关键字列表 (可选)
home: 项目url (可选)
sources:
  - 项目源码url列表 (可选)
maintainers: # 维护人员的信息(可选)
  - name: 名字
    email: 邮箱
    url: 维护人员的url
engine: gotpl # 模板引擎的名称 (可选, 默认是gotpl)
icon: 要用作图标的SVG或PNG图像的URL (可选)
appVersion: chart包含的应用程序版本(可选)
deprecated: 这个chart是否被废弃 (可选, 布尔型)
tillerVersion: 需要的tiller版本(可选)
1
2
helm create mychart
rm -fr mychart/templates/*

vim mychart/templates/configmap.yaml

1
2
3
4
5
6
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
1
2
3
4
5
安装
helm install . --name my-cm

#查看渲染后的模板
helm get manifest my-cm

上面的 {{.Release.Name}} 意思是获取 Release 对象的 Name 值

  • Release.Name: release 的名称
  • Release.Time: release 的发布时间
  • Release.Namespace: release 的 namespace
  • Release.Service: 发布服务的名称,总是 Tiller
  • Release.Revision: release 的版本修订号。它从 1 开始,随着 release 的升级而增加。
  • Release.IsUpgrade: 如果当前操作是升级或回滚,则为 true
  • Release.IsInstall: 如果当前操作是安装,则为 true
  • Files.Get 是一个按名称获取文件的函数(.Files.Get config.ini)
  • Files.GetBytes 是将文件内容作为字节数组而不是字符串获取的函数。这对于像图片这样的东西很有用。
  • Capabilities.APIVersions:是一组版本信息。
  • Capabilities.APIVersions.Has $version:是否支持指定的 api 或 resources 版本
  • Capabilities.KubeVersion:提供查找 Kubernetes 版本的方法。它有以下值:Major、Minor、GitVersion、GitCommit、GitTreeState、BuildDate、GoVersion、Compiler 和 Platform。
  • Capabilities.TillerVersion:提供了一种查找 tiller 版本的方法。它有以下值:SemVer, GitCommit, GitTreeState。
  • Name: 当前模板的文件路径 (例如 mychart/templates/mytemplate.yaml)
  • BasePath: 当前 chart 模板目录路径 (例如 mychart/templates)

这些值可用于任何顶级模板。这并不一定意味着它们将在任何地方都可用。

传递到 chart 中的值。它的内容来自四个来源:

  • chart 包的 values.yaml 文件
  • 如果是子 chart,则 values.yaml 文件为父 chart 包的
  • 通过 - f 参数指定一个文件 (helm install -f myvals.yaml ./mychart)
  • 通过–set 指定 (helm install –set foo=bar ./mychart)

上面的列表按特定性顺序排列:values.yaml 是默认值,可以被父图表的覆盖 values.yaml,而后者可以由用户提供的值文件覆盖,而后者又可以由–set 参数覆盖。

示例: 1. 添加一个 value

1
echo 'name: soulchild' > values.yaml

2. 修改模板 cat templates/configmap.yaml

1
2
3
4
5
6
7
8
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  namespace: {{ .Release.Namespace }}
  name: {{ .Values.name }}

3. 升级 chart

1
helm upgrade my-cm .

4. 查看渲染后的结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
helm get manifest my-cm
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: wishing-rottweiler-configmap
data:
  myvalue: "Hello World"
  namespace: default
  name: soulchild
请我喝杯水
SoulChild 微信号 微信号
SoulChild 微信打赏 微信打赏
0%