Mustafa CavusogluMC

Command Palette

Search for a command to run...

AboutExperiencesProjects
Linux3Docker7Git4Kubernetes4Network2uv1Miniconda1
Back to Home
Kubernetes

Kubernetes package management with Helm charts and templates

helmchartsreleasespackagestemplatevalues

Helm Package Manager

Kubernetes package management with Helm.

Repository Management

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

# Update repositories
helm repo update

# List repositories
helm repo list

# Search for charts
helm search repo nginx
helm search hub nginx

Installing Charts

# Install a chart
helm install my-release bitnami/nginx

# Install with custom values
helm install my-release bitnami/nginx -f values.yaml

# Install with set values
helm install my-release bitnami/nginx --set service.type=LoadBalancer

# Install in namespace
helm install my-release bitnami/nginx -n my-namespace

# Dry run
helm install my-release bitnami/nginx --dry-run

Managing Releases

# List releases
helm list
helm list -A  # All namespaces

# Upgrade release
helm upgrade my-release bitnami/nginx

# Rollback release
helm rollback my-release 1

# Uninstall release
helm uninstall my-release

# Get release status
helm status my-release

# Get release history
helm history my-release

Working with Charts

# Show chart values
helm show values bitnami/nginx

# Show chart info
helm show chart bitnami/nginx
helm show all bitnami/nginx

# Download chart
helm pull bitnami/nginx
helm pull bitnami/nginx --untar

# Create new chart
helm create my-chart

# Package chart
helm package my-chart

# Lint chart
helm lint my-chart

Helm Template

# Render templates locally (without installing)
helm template my-release bitnami/nginx

# Render with custom values
helm template my-release ./my-chart -f values.yaml

# Render specific template file
helm template my-release ./my-chart -s templates/deployment.yaml

# Render with set values
helm template my-release ./my-chart --set replicaCount=3

# Render and save to file
helm template my-release ./my-chart > rendered.yaml

# Render with namespace
helm template my-release ./my-chart -n production

# Debug: show computed values
helm template my-release ./my-chart --debug

# Validate rendered output against cluster
helm template my-release ./my-chart | kubectl apply --dry-run=client -f -

Chart Template Syntax

# values.yaml
replicaCount: 3
image:
  repository: nginx
  tag: "1.25"
service:
  type: ClusterIP
  port: 80
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-app
  labels:
    app: {{ .Chart.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Chart.Name }}
  template:
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: {{ .Values.service.port }}

Common Template Functions

# Default value
{{ .Values.env | default "production" }}

# Conditional
{{- if .Values.ingress.enabled }}
  # ingress config here
{{- end }}

# Range (loop)
{{- range .Values.env }}
  - name: {{ .name }}
    value: {{ .value | quote }}
{{- end }}

# Include named template
{{ include "mychart.labels" . | nindent 4 }}

# toYaml
{{ toYaml .Values.resources | nindent 12 }}