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: nulllabels:app: nginxname: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: registry.cn-beijing.aliyuncs.com/xwk123/nginx:aaaname: 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/nginxtag: aaa# 编写deployment文件,将里面的变量全部替换掉
[root@master-11 mychart]# cat ./templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: {{ .Chart.Name }} # .Chart.Name指的就是Chart.yaml文件里的name字段后对应的值mychartname: {{ .Chart.Name }}
spec:replicas: {{ .Values.replicas }} # .Values.replicas指的就是values.yaml文件中replicas字段后对应的值1selector: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: nulllabels:app: mychartname: mychart
spec:replicas: 1selector:matchLabels:app: mycharttemplate:metadata:labels:app: mychartspec: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/nginxtag: aaanodePort: 30000 # 添加进去[root@master-11 mychart]# cat templates/service.yaml
apiVersion: v1
kind: Service
metadata:name: {{ .Chart.Name }}-svclabels:app: {{ .Chart.Name }}
spec:type: NodePortselector:app: {{ .Chart.Name }}ports:- port: 80targetPort: 80nodePort: {{ .Values.nodePort }}[root@master-11 mychart]# helm template nginx .
---
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata:name: mychart-svclabels:app: mychart
spec:type: NodePortselector:app: mychartports:- port: 80targetPort: 80nodePort:
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: mychartname: mychart
spec:replicas: 1selector:matchLabels:app: mycharttemplate:metadata:labels:app: mychartspec: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