TheBushidoCollective

helm-charts

Use when understanding and creating Helm charts for packaging and deploying Kubernetes applications.

TheBushidoCollective 190 20 Updated 6mo ago
GitHub

Install

npx skillscat add thebushidocollective/han/helm-charts

Install via the SkillsCat registry.

About this skill

We need to produce a 2-3 sentence plain-text summary, objective, factual, no marketing, no superlatives, no calls to action. Must be at most 60 words. No quotes, no markdown, no bullet points, no headings. Just plain text. Summarize skill: Helm charts skill: understanding and creating Helm charts for packaging and deploying Kubernetes applications. Problem: simplifies deployment, configuration management of K8s apps. When to use: when packaging, versioning, deploying Kubernetes apps, managing dependencies, customizing via values. We need 2-3 sentences. Let's craft ~40 words.

SKILL.md

Helm Charts

Understanding and creating Helm charts for Kubernetes applications.

Chart Structure

mychart/
├── Chart.yaml          # Chart metadata
├── values.yaml         # Default values
├── charts/            # Chart dependencies
├── templates/         # Template files
│   ├── NOTES.txt     # Usage notes
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── _helpers.tpl  # Template helpers
│   └── tests/        # Test files
└── .helmignore       # Files to ignore

Chart.yaml

apiVersion: v2
name: my-app
user-invocable: false
description: A Helm chart for my application
type: application
version: 1.0.0
appVersion: "1.0.0"
keywords:
  - web
  - api
maintainers:
  - name: Your Name
    email: you@example.com
dependencies:
  - name: postgresql
    version: "12.1.0"
    repository: "https://charts.bitnami.com/bitnami"
    condition: postgresql.enabled

values.yaml

replicaCount: 3

image:
  repository: myapp
  pullPolicy: IfNotPresent
  tag: "1.0.0"

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false
  className: "nginx"
  hosts:
    - host: myapp.local
      paths:
        - path: /
          pathType: Prefix

resources:
  limits:
    cpu: 500m
    memory: 512Mi
  requests:
    cpu: 250m
    memory: 256Mi

autoscaling:
  enabled: false
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80

Common Commands

Create Chart

helm create mychart

Install Chart

# Install from directory
helm install myrelease ./mychart

# Install with custom values
helm install myrelease ./mychart -f custom-values.yaml

# Install with value overrides
helm install myrelease ./mychart --set image.tag=2.0.0

Upgrade Chart

helm upgrade myrelease ./mychart

# Upgrade or install
helm upgrade --install myrelease ./mychart

Validate Chart

# Lint chart
helm lint ./mychart

# Dry run
helm install myrelease ./mychart --dry-run --debug

# Template rendering
helm template myrelease ./mychart

Manage Releases

# List releases
helm list

# Get release status
helm status myrelease

# Get release values
helm get values myrelease

# Rollback
helm rollback myrelease 1

# Uninstall
helm uninstall myrelease

Dependencies

Chart.yaml

dependencies:
  - name: redis
    version: "17.0.0"
    repository: "https://charts.bitnami.com/bitnami"
    condition: redis.enabled
    tags:
      - cache

Update Dependencies

helm dependency update ./mychart
helm dependency build ./mychart
helm dependency list ./mychart

Chart Repositories

# Add repository
helm repo add bitnami https://charts.bitnami.com/bitnami

# Update repositories
helm repo update

# Search charts
helm search repo nginx

# Search hub
helm search hub wordpress

Best Practices

Version Conventions

  • Chart version: Semantic versioning (1.2.3)
  • App version: Application version (v1.0.0)

Default Values

Provide sensible defaults in values.yaml:

# Good defaults
resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

# Allow customization
config: {}
env: {}

Documentation

Include NOTES.txt for post-installation instructions:

Thank you for installing {{ .Chart.Name }}.

Your release is named {{ .Release.Name }}.

To learn more about the release, try:

  $ helm status {{ .Release.Name }}
  $ helm get all {{ .Release.Name }}