ljzsdut
GitHubToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

01 自定义chart入门

预备知识

学习该内容之前,请确保您已经了解helm的基本使用。

创建chart包

我们可以使用helm create创建一个chart目录模板,在此目录模板的基础上对chart进行自定义修改。

➜  ~ helm create mychart
Creating mychart

chart目录结构

通过上面的命令,创建了一个名称为mychart的chart包,我们查看chart包的文件结构如下:

➜  ~ tree mychart
mychart
├── Chart.yaml
├── charts
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   ├── serviceaccount.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

3 directories, 10 files

以上目录结构就是一个chart包的基本结构,我们先认识一下各个目录、文件的主要作用。

  • Chart.yaml: chart包的metedata信息(元数据)。例如chart的名称、版本、描述信息。通常结合requirements.yaml文件一起使用
  • charts:主要存放当前chart的子chart包。子chart是当前chart所依赖的chart。
  • templates :模板文件
    • NOTES.txt:在执行helm install时显示的提示信息。
    • _helpers.tpl:该文件以.tpl后缀结尾,文件名可以任意。作用是放置模板的公共模块(命名模板/子模板),可以在整个chart的其他地方重复引用。
    • *.yaml :k8s的资源配置文件,使用go-template编写。
  • values.yaml:chart参数的默认值。
  • requirements.yaml :定义依赖chart的信息。可选
root@master1:/ # cat requirements.yaml
dependencies:
  - name: helm-toolkit
    repository: http://localhost:8879/charts/
    version: 0.1.0

自定义chart

了解了chart目录结构后,我们对该chart包进行最简单的自定义。我们先删除template目录下所有的文件,然后创建一个不使用go-template(把所有配置都写死的)模板文件。

➜  ~ rm -rf mychart/templates/*
zsh: sure you want to delete all 8 files in /Users/lijuzhang/mychart/templates [yn]? y
➜  ~ ls mychart/templates
➜  ~ vim mychart/templates/configmap.yaml
➜  ~ cat mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mychart-configmap
data:
  myvalue: "Hello World"

安装chart

此时,我们就有一个最简单的chart包。该chart包中的模板文件只有一个configmap.yaml,而且该文件中没有使用模板语言,现在我们对该chart包进行安装。

➜  ~ helm install mychart mychart/
NAME: mychart
LAST DEPLOYED: Tue Feb 23 08:12:06 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

➜  ~ helm list
NAME   	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART        	APP VERSION
mychart	default  	1       	2021-02-23 08:12:06.229854 +0800 CST	deployed	mychart-0.1.0	1.16.0

➜  ~ kubectl get cm
NAME                 DATA   AGE
mychart-configmap    1      88s

➜  ~ kubectl get cm mychart-configmap -oyaml
apiVersion: v1
data:
  myvalue: Hello World
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: mychart
    meta.helm.sh/release-namespace: default
  creationTimestamp: "2021-02-23T00:12:06Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: mychart-configmap
  namespace: default
  resourceVersion: "54247827"
  selfLink: /api/v1/namespaces/default/configmaps/mychart-configmap
  uid: cfc1a1bc-4a37-44de-ae07-9f776097c5c5