Documentation/Buki/Helm/ skills /helm-charts

📖 helm-charts

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



Overview

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
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 }}