关于 helm-chart-development
面向自定义 Helm chart 开发与维护的技能,适合负责 chart 编写的开发者。内容涵盖目录结构、模板、验证、测试、依赖管理、打包与发布。
主要功能
- 01创建 chart 基础结构
- 02开发并渲染模板
- 03检查并测试 chart
- 04管理 chart 依赖
- 05打包与发布 chart
适用场景
- 01创建新的 Helm chart
- 02部署前验证模板
- 03打包 chart 以供分发
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill helm-chart-development安装后在 Claude Code 中输入/helm-chart-development确认已加载。
附带文件REFERENCE.md
详细介绍
Helm Chart 开发
全面介绍如何创建、测试和打包自定义 Helm chart,并遵循可维护性和可复用性最佳实践。
何时使用此技能
| 在以下情况下使用此技能…… | 在以下情况下改用 …… |
|---|---|
使用 helm create、Chart.yaml、模板和依赖项创建新 chart | 安装或升级现有 chart 时,使用 helm-release-management |
| 检查、打包或发布自己的 chart | 在不同环境中覆盖 values 时,使用 helm-values-management |
| 添加 chart 测试或改进模板结构 | 现有部署失败或模板渲染不正确时,使用 helm-debugging |
何时使用
在以下情况下自动使用此技能:
- 用户想要创建新的 Helm chart
- 用户需要验证 chart 结构或模板
- 用户提到在本地测试 chart
- 用户想要打包或发布 chart
- 用户需要管理 chart 依赖项
- 用户询问 chart 最佳实践
Chart 创建与结构
创建新 Chart
# Scaffold new chart with standard structure
helm create mychart
# Creates:
# mychart/
# ├── Chart.yaml # Chart metadata
# ├── values.yaml # Default values
# ├── charts/ # Chart dependencies
# ├── templates/ # Kubernetes manifests
# │ ├── NOTES.txt # Post-install instructions
# │ ├── _helpers.tpl # Template helpers
# │ ├── deployment.yaml
# │ ├── service.yaml
# │ ├── ingress.yaml
# │ └── tests/
# │ └── test-connection.yaml
# └── .helmignore # Files to ignore
Chart.yaml 结构
# Chart.yaml - Chart metadata
apiVersion: v2 # Helm 3 uses v2
name: mychart # Chart name
version: 0.1.0 # Chart version (SemVer)
appVersion: "1.0.0" # Application version
description: A Helm chart for Kubernetes
type: application # application or library
keywords:
- api
- web
home: https://example.com
sources:
- https://github.com/example/mychart
maintainers:
- name: John Doe
email: [email protected]
dependencies: # Chart dependencies
- name: postgresql
version: "12.1.9"
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled # Optional: enable/disable
tags: # Optional: group dependencies
- database
Chart 验证与测试
检查 Chart
# Basic linting
helm lint ./mychart
# Strict linting (warnings as errors)
helm lint ./mychart --strict
# Lint with specific values
helm lint ./mychart --values values.yaml --strict
# Lint with multiple value files
helm lint ./mychart \
--values values/common.yaml \
--values values/production.yaml \
--strict
在本地渲染模板
# Render all templates
helm template mychart ./mychart
# Render with custom release name and namespace
helm template myrelease ./mychart --namespace production
# Render with values
helm template myrelease ./mychart --values values.yaml
# Render specific template
helm template myrelease ./mychart \
--show-only templates/deployment.yaml
# Validate against Kubernetes API
helm template myrelease ./mychart --validate
模拟安装
# Dry-run with server-side validation
helm install myrelease ./mychart \
--namespace production \
--dry-run \
--debug
运行 Chart 测试
# Install chart, run tests, cleanup
helm install myrelease ./mychart --namespace test
helm test myrelease --namespace test --logs
helm uninstall myrelease --namespace test
Chart 测试结构:
# templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "mychart.fullname" . }}-test-connection"
annotations:
"helm.sh/hook": test
"helm.sh/hook-delete-policy": hook-succeeded,hook-failed
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "mychart.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never
模板开发
模板辅助函数(_helpers.tpl)
{{/*
Expand the name of the chart.
*/}}
{{- define "mychart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a fully qualified app name.
*/}}
{{- define "mychart.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "mychart.labels" -}}
helm.sh/chart: {{ include "mychart.chart" . }}
{{ include "mychart.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "mychart.selectorLabels" -}}
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
Chart 依赖项
定义依赖项(Chart.yaml)
# Chart.yaml
dependencies:
- name: postgresql
version: "12.1.9"
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled
- name: redis
version: "17.0.0"
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
- name: common # Local dependency
version: "1.0.0"
repository: file://../common-library
管理依赖项
# Download/update dependencies
helm dependency update ./mychart
# Build from existing Chart.lock
helm dependency build ./mychart
# List dependencies
helm dependency list ./mychart
配置子 Chart 的 Values
# values.yaml - Parent chart
postgresql:
enabled: true
auth:
username: myapp
database: myapp
existingSecret: myapp-db-secret
primary:
persistence:
size: 10Gi
redis:
enabled: true
auth:
enabled: false
master:
persistence:
size: 5Gi
Chart 打包与分发
打包 Chart
# Package chart into .tgz
helm package ./mychart
# Package with specific destination
helm package ./mychart --destination ./dist/
# Package and update dependencies
helm package ./mychart --dependency-update
# Sign package (requires GPG key)
helm package ./mychart --sign --key mykey --keyring ~/.gnupg/secring.gpg
Chart 仓库
# Create repository index
helm repo index ./repo/
# Push to OCI registry (Helm 3.8+)
helm push mychart-0.1.0.tgz oci://registry.example.com/charts
有关 values.yaml 设计、架构验证、chart 文档模板、测试工作流、常见 chart 模式和最佳实践的详细示例,请参阅 REFERENCE.md。
Agentic 优化
| 上下文 | 命令 |
|---|---|
| 检查(严格模式) | helm lint ./mychart --strict |
| 渲染指定模板 | helm template myapp ./mychart --show-only templates/deployment.yaml |
| 模拟验证 | helm install myapp ./mychart --dry-run --debug 2>&1 | head -100 |
| 打包 Chart | helm package ./mychart --dependency-update |
相关技能
- Helm 发布管理 - 使用 chart 进行部署
- Helm 调试 - 排查 chart 问题
- Helm Values 管理 - 配置 chart
参考资料
评论
支持 Markdown