helm 模板的基础使用
1、Helm Chart 目录结构
mychart/
├── Chart.yaml # 存放该Chart的基本信息
├── values.yaml # 存放参数值
├── charts/ # 存放该Chart依赖的其他子Chart
├── templates/ # 存放模板文件
│ ├── deployment.yaml # 资源模板
│ ├── service.yaml # 资源模板
│ ├── ingress.yaml # 资源模板
│ ├── _helpers.tpl # 存放自定义模板
│ └── NOTES.txt # 安装完成后在终端显示的提示信息
├── crds/ # 自定义资源模板
└── .helmignore # 指定哪些文件在打包Chart (helm package)时应被忽略
2、templates的基本使用
[root@master-11 mychart]# mkdir templates
[root@master-11 mychart]# touch Chart.yaml
[root@master-11 mychart]# touch values.yaml
[root@master-11 mychart]# tree .
.
├── Chart.yaml
├── templates
│ └── deployment.yaml
└── values.yaml
# 再找一个nginx的deployment的创建文件
[root@master-11 mychart]# cat ./templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: registry.cn-beijing.aliyuncs.com/xwk123/nginx:aaa
name: nginx
# 尝试安装
[root@master-11 mychart]# helm install nginx .
NAME: nginx
LAST DEPLOYED: Thu Oct 2 00:14:30 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master-11 mychart]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-867d96d6bb-cjlqt 1/1 Running 0 37s
# 删除
[root@master-11 mychart]# helm uninstall nginx
release "nginx" uninstalled
3、Chart.yaml 与 values.yaml
# 先随便写一个Chart.yaml
[root@master-11 mychart]# cat Chart.yaml
apiVersion: v2
name: mychart
description: nginx
type: application
version: 0.1.0
appVersion: "1.0.0"
# 编写values.yaml文件,将deployment中的变量全部写到values.yaml里面
[root@master-11 mychart]# cat values.yaml
replicas: 1
image:
repository: registry.cn-beijing.aliyuncs.com/xwk123/nginx
tag: aaa
# 编写deployment文件,将里面的变量全部替换掉
[root@master-11 mychart]# cat ./templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: {{ .Chart.Name }} # .Chart.Name指的就是Chart.yaml文件里的name字段后对应的值mychart
name: {{ .Chart.Name }}
spec:
replicas: {{ .Values.replicas }} # .Values.replicas指的就是values.yaml文件中replicas字段后对应的值1
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
containers:
- image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
# .Values.image.repository指的就是values.yaml文件中image字段下的tag所对应的值,和上面的差别就是多了一层image字段,使用方法还是一样的,这种组合需要添加双引号
name: nginx
# 查看渲染效果
[root@master-11 mychart]# helm template nginx .
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: mychart
name: mychart
spec:
replicas: 1
selector:
matchLabels:
app: mychart
template:
metadata:
labels:
app: mychart
spec:
containers:
- image: "registry.cn-beijing.aliyuncs.com/xwk123/nginx:aaa"
name: nginx
# 再进行部署
[root@master-11 mychart]# helm install nginx .
NAME: nginx
LAST DEPLOYED: Thu Oct 2 00:40:29 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master-11 mychart]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mychart-57d9dbd796-l64mk 1/1 Running 0 4s
# service也是同理
[root@master-11 mychart]# cat values.yaml
replicas: 1
image:
repository: registry.cn-beijing.aliyuncs.com/xwk123/nginx
tag: aaa
nodePort: 30000 # 添加进去
[root@master-11 mychart]# cat templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-svc
labels:
app: {{ .Chart.Name }}
spec:
type: NodePort
selector:
app: {{ .Chart.Name }}
ports:
- port: 80
targetPort: 80
nodePort: {{ .Values.nodePort }}
[root@master-11 mychart]# helm template nginx .
---
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: mychart-svc
labels:
app: mychart
spec:
type: NodePort
selector:
app: mychart
ports:
- port: 80
targetPort: 80
nodePort:
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: mychart
name: mychart
spec:
replicas: 1
selector:
matchLabels:
app: mychart
template:
metadata:
labels:
app: mychart
spec:
containers:
- image: "registry.cn-beijing.aliyuncs.com/xwk123/nginx:aaa"
name: nginx
4、NOTES.txt
# 随便瞎写一点东西到NOTES.txt里
[root@master-11 mychart]# cat ./templates/NOTES.txt
国亲节快乐
国亲节快乐
国亲节快乐
国亲节快乐
国亲节快乐
国亲节快乐
国亲节快乐
# 安装
[root@master-11 mychart]# helm install nginx .
NAME: nginx
LAST DEPLOYED: Thu Oct 2 00:43:01 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES: # 这个就是你NOTES.txt的内容了,他会在你安装的使用打印出来
国亲节快乐
国亲节快乐
国亲节快乐
国亲节快乐
国亲节快乐
国亲节快乐
国亲节快乐
4、.helmignore
[root@master-11 harbor]# cat .helmignore # 在此处添加文件的筛选,使用helm package时会将这些文件忽略掉
.github/*
docs/*
.git/*
.gitignore
CONTRIBUTING.md