1 Ce este Helm?
📦 Package Manager pentru Kubernetes
Helm este managerul de pachete pentru Kubernetes, similar cu apt/yum pentru Linux sau npm pentru Node.js. Acesta simplifică deployment-ul și managementul aplicațiilor complexe în Kubernetes.
- 📝 Templatizare - Un singur set de fișiere pentru multiple environment-uri
- 🔄 Versionare - Rollback ușor la versiuni anterioare
- ♻️ Reutilizare - Nu mai copiezi YAML-uri cu mici modificări
- 📦 Dependency Management - Charts pot depinde de alte charts
🎯 Concepte Cheie
📊 Chart
Pachetul Helm care conține toate resursele Kubernetes necesare
🔧 Values
Configurațiile care pot fi customizate pentru fiecare deployment
🚀 Release
O instanță instalată a unui chart în cluster
2 Structura Chart-ului
📁 Structura Proiectului
Un Helm Chart pentru aplicația noastră Backend + MySQL va avea următoarea structură:
- my-backend-app/
-
- Chart.yaml # Metadata despre chart
- values.yaml # Valori configurabile
- templates/
-
- backend-deployment.yaml
- backend-service.yaml
- mysql-deployment.yaml
- mysql-service.yaml
- mysql-pvc.yaml
- mysql-secret.yaml
- configmap.yaml
- _helpers.tpl
apiVersion: v2
name: my-backend-app
description: A Helm chart for backend application with MySQL
type: application
version: 0.1.0 # Versiunea chart-ului
appVersion: "1.0.0" # Versiunea aplicației tale
# Backend Configuration
backend:
name: backend-api
replicaCount: 2
image:
repository: node
tag: "18-alpine"
service:
port: 3000
# MySQL Configuration
mysql:
enabled: true
image:
repository: mysql
tag: "8.0"
auth:
database: "myapp_db"
username: "backend_user"
3 Crearea Template-urilor
Creează Secret pentru MySQL
Primul pas este să securizăm credențialele bazei de date:
apiVersion: v1
kind: Secret
metadata:
name: {{ include "myapp.fullname" . }}-mysql-secret
type: Opaque
data:
mysql-root-password: {{ .Values.mysql.auth.rootPassword | b64enc }}
mysql-username: {{ .Values.mysql.auth.username | b64enc }}
mysql-password: {{ .Values.mysql.auth.password | b64enc }}
Configurează Backend Deployment
Deployment-ul pentru aplicația backend cu variabile de environment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "myapp.fullname" . }}-backend
spec:
replicas: {{ .Values.backend.replicaCount }}
template:
spec:
containers:
- name: backend
image: "{{ .Values.backend.image.repository }}:{{ .Values.backend.image.tag }}"
env:
- name: DB_HOST
value: {{ include "myapp.fullname" . }}-mysql-service
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "myapp.fullname" . }}-mysql-secret
key: mysql-password
Setup MySQL cu Persistent Storage
Configurează MySQL cu volum persistent pentru date:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ include "myapp.fullname" . }}-mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.mysql.storage.size }}
Template-urile folosesc sintaxa Go template. Variabilele din values.yaml sunt accesate cu {{ .Values.nume }}
4 Comenzi Esențiale
🔍 Testare & Debug
Verifică template-urile generate înainte de instalare
📦 Instalare
Instalează chart-ul în cluster
🔄 Actualizare
Actualizează release-ul existent
📋 Listare
Vezi toate release-urile instalate
↩️ Rollback
Revenire la versiunea anterioară
🗑️ Ștergere
Șterge complet release-ul
5 Deploy în Kubernetes
🚀 Pași pentru Deploy
Verifică Conexiunea la Cluster
Asigură-te că ești conectat la cluster-ul Kubernetes corect
Validează Chart-ul
Verifică dacă chart-ul nu are erori de sintaxă
Dry Run (Test)
Simulează instalarea fără a face modificări în cluster
Instalare Efectivă
Instalează aplicația în namespace-ul production
Verifică Deployment-ul
Vezi toate resursele create de Helm
🎯 Environments Multiple
Folosește fișiere de valori diferite pentru fiecare environment:
backend:
replicaCount: 1
resources:
limits:
cpu: 250m
memory: 256Mi
mysql:
storage:
size: 1Gi
backend:
replicaCount: 5
resources:
limits:
cpu: 1000m
memory: 1Gi
mysql:
storage:
size: 50Gi
- 🔐 Nu păstra parole în values.yaml - folosește Sealed Secrets sau External Secrets
- 📁 Păstrează values-*.yaml files în version control
- 🏷️ Folosește semantic versioning pentru chart-uri
- 📝 Documentează toate valorile configurabile în values.yaml
- 🔍 Rulează întotdeauna
helm lintînainte de deploy
6 Troubleshooting
🔧 Comenzi Utile pentru Debug
Vezi valorile folosite
Vezi manifest-ul generat
Istoric release
Status release
Logs pentru pod
Describe pod
- ImagePullBackOff - Verifică numele și tag-ul imaginii Docker
- CrashLoopBackOff - Verifică logs-urile și environment variables
- Pending PVC - Verifică dacă ai StorageClass disponibil
- Connection refused - Verifică Service names și ports