Title

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
posted @ 2025-10-08 14:11  xwk123  阅读(5)  评论(0)    收藏  举报