Kubernetes Chart 简单开发测试
k8s Chart简单开发测试
Kubernetes Chart(即 Helm Chart)是用于管理 Kubernetes 应用的打包格式。它类似于 Docker 镜像,封装了 Kubernetes 资源(Deployment、Service、Ingress 等)以及配置模板,使应用的部署和管理更加方便。以下是 Helm Chart 开发指南:
1. Helm Chart 基础
Helm 是 Kubernetes 的包管理工具,Helm Chart 是 Helm 的打包格式,包含 Kubernetes 资源的 YAML 模板。Helm Chart 主要由以下部分组成:
mychart/
│── charts/ # 依赖的子 Chart
│── templates/ # Kubernetes 资源模板文件
│ ├── deployment.yaml # Deployment 资源
│ ├── service.yaml # Service 资源
│ ├── _helpers.tpl # 变量定义及模板函数
│ ├── ingress.yaml # 可选,Ingress 资源
│ ├── NOTES.txt # 安装后输出的提示信息
│── values.yaml # 变量默认值
│── Chart.yaml # Chart 元信息(名称、版本等)
│── README.md # 说明文档
2. 编写 Chart
2.1 创建 Chart
使用 helm create 命令生成一个基本的 Helm Chart:
helm create mychart
生成的 Chart 目录结构如下:
mychart/
├── charts/
├── templates/
├── values.yaml
├── Chart.yaml
└── README.md
2.2 修改 Chart.yaml
Chart.yaml 定义了 Chart 的元信息:
apiVersion: v2
name: mychart
description: A Helm chart for deploying my application
type: application
version: 1.0.0
appVersion: "1.16.0"
2.3 编写 values.yaml
values.yaml 主要用于定义 Chart 的默认变量:
replicaCount: 3
image:
repository: myregistry/myapp
tag: latest
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: false
hostname: myapp.local
2.4 编写 templates/deployment.yaml
Helm 使用 Go 模板语法({{ .Values }})动态生成 YAML 资源:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: myapp
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: 80
2.5 编写 templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
selector:
app: {{ .Release.Name }}
ports:
- port: {{ .Values.service.port }}
targetPort: 80
3. 测试与调试
3.1 运行 Lint 检查
helm lint mychart
3.2 预览模板渲染
helm template mychart
3.3 安装 Chart
helm install myapp mychart
3.4 升级 Chart
修改 values.yaml 之后,可以执行:
helm upgrade myapp mychart
3.5 卸载 Chart
helm uninstall myapp
4. Helm Chart 进阶
4.1 使用 _helpers.tpl 定义通用变量
在 templates/_helpers.tpl 中定义公共标签:
{{- define "mychart.labels" -}}
app: {{ .Release.Name }}
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
{{- end }}
然后在 deployment.yaml 里引用:
metadata:
labels:
{{- include "mychart.labels" . | nindent 4 }}
4.2 添加 ConfigMap 和 Secret
ConfigMap (configmap.yaml)
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-config
data:
ENV_VAR: "production"
Secret (secret.yaml)
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-secret
type: Opaque
data:
password: {{ "my-secret-password" | b64enc }}
5. 依赖管理
5.1 添加子 Chart
在 Chart.yaml 里定义依赖:
dependencies:
- name: redis
version: "17.3.2"
repository: "https://charts.bitnami.com/bitnami"
然后执行:
helm dependency update
6. Helm Chart 打包与发布
6.1 打包 Chart
helm package mychart
会生成 mychart-1.0.0.tgz。
6.2 发布到 Helm 仓库
可以将 .tgz 文件上传到 S3、GCS 或 Helm 兼容的 Chart 仓库(如 ChartMuseum)。
本地搭建 ChartMuseum:
docker run -d -p 8080:8080 --name chartmuseum \
-v $(pwd)/charts:/charts \
-e STORAGE=local \
-e STORAGE_LOCAL_ROOTDIR=/charts \
chartmuseum/chartmuseum
推送 Chart:
helm push mychart-1.0.0.tgz oci://myregistry.com/helm-charts
7. 总结
helm create mychart创建基础结构values.yaml定义默认变量templates/目录编写 Kubernetes 资源模板- 使用
helm template预览渲染结果 - 通过
helm install、helm upgrade、helm uninstall部署和管理应用 - 使用
_helpers.tpl进行模板优化 - 通过
dependencies添加子 Chart - 通过
helm package和helm push发布 Chart

浙公网安备 33010602011771号