mcpField
H
helm-chart-development

helm-chart-development

github.com/laurigates云与 DevOps5967 次安装1 天前更新
代码仓库

关于 helm-chart-development

面向自定义 Helm chart 开发与维护的技能,适合负责 chart 编写的开发者。内容涵盖目录结构、模板、验证、测试、依赖管理、打包与发布。

主要功能

  1. 01创建 chart 基础结构
  2. 02开发并渲染模板
  3. 03检查并测试 chart
  4. 04管理 chart 依赖
  5. 05打包与发布 chart

适用场景

  1. 01创建新的 Helm chart
  2. 02部署前验证模板
  3. 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
打包 Charthelm package ./mychart --dependency-update

相关技能

  • Helm 发布管理 - 使用 chart 进行部署
  • Helm 调试 - 排查 chart 问题
  • Helm Values 管理 - 配置 chart

参考资料

评论

支持 Markdown