01 自定义chart入门
学习该内容之前,请确保您已经了解helm的基本使用。
我们可以使用helm create创建一个chart目录模板,在此目录模板的基础上对chart进行自定义修改。
➜ ~ helm create mychart
Creating mychart
通过上面的命令,创建了一个名称为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包进行最简单的自定义。我们先删除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包中的模板文件只有一个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