创建一个自定义的Helm Chart主要包括以下几个步骤:
1. 初始化Chart模板
使用helm create
命令创建一个新的Chart模板:
helm create my-chart
这将在当前目录下创建一个名为my-chart
的目录,里面包含了标准的Chart结构和基础模板文件。
2. 查看Chart目录结构
打开创建的my-chart
目录,你会看到类似以下的目录结构:
my-chart/
|-- charts/ # 存放依赖的其他Chart
|-- templates/ # 包含YAML manifests的模板文件
| |-- _helpers.tpl # 辅助函数文件
| |-- deployment.yaml
| |-- ingress.yaml
| |-- service.yaml
| |-- NOTES.txt
|-- Chart.yaml # Chart的元数据描述文件
|-- values.yaml # 默认配置值
3. 修改Chart.yaml
编辑Chart.yaml
文件,提供Chart的基本信息,例如:
apiVersion: v2
name: my-chart
description: A sample Helm chart for deploying my application to Kubernetes
type: application
version: 0.1.0
appVersion: 1.0.0
dependencies: [] # 如果有依赖的其他Charts,这里列出它们
4. 编辑values.yaml
values.yaml
文件包含了Chart的默认配置值。例如,你可以在这里配置应用的镜像版本、端口号、环境变量等:
replicaCount: 1
image:
repository: myregistry/myapp
tag: 1.0.0
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
5. 编写模板文件
在templates/
目录下,编辑或新增YAML模板文件。这些文件使用Go模板语法,将values.yaml中的值插入到Kubernetes资源定义中。例如,deployment.yaml
可能是这样的:
{{- $fullName := include "my-chart.fullname" . -}}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ $fullName }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "my-chart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ include "my-chart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}
6. 测试和打包Chart
在本地测试Chart:
helm install my-release . --dry-run --debug
或者打包Chart以便分发:
helm package my-chart
这将生成一个.tgz
格式的Helm包,可以上传到Helm仓库中,供他人下载和安装。
7. 安装Chart
在测试和验证完成后,可以将Chart安装到Kubernetes集群:
helm install my-release ./my-chart-0.1.0.tgz
以上就是创建一个基本Helm Chart的实战过程。在实际开发中,可能还需要根据应用需求定制更多的模板文件,如ConfigMap、Secret、ServiceAccount等,并完善Chart的README文档和NOTES.txt,以便使用者更好地理解Chart的用途和配置方式。