Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Helm — menedżer pakietów dla Kubernetes i k3s

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS / Kubernetes

Wdrożenie nawet prostej aplikacji na Kubernetes oznacza pisanie kilkunastu plików YAML: Deployment, Service, Ingress, ConfigMap, Secret, HorizontalPodAutoscaler. Helm rozwiązuje ten problem — to menedżer pakietów dla Kubernetes, gdzie "pakietem" jest chart zawierający szablony wszystkich zasobów. Jeden helm install i masz działający Nginx Ingress Controller z certyfikatami Let's Encrypt. Helm obsługuje też wersjonowanie (rollback do poprzedniej rewizji), parametryzację (values.yaml zamiast hardkodowanych wartości) i repozytorium chartów. Artykuł skupia się na praktycznym użyciu — od instalacji CLI po tworzenie własnego chart i wdrożenie na k3s.

Instalacja Helm CLI

Helm instalujesz tylko na maszynie, z której zarządzasz klastrem (lokalny komputer lub bastion host) — nie potrzeba agenta po stronie klastra. Wymaganie: działający kubectl z dostępem do klastra.

# Linux (oficjalny skrypt instalacyjny)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Alternatywnie przez apt (stabilniejsze w CI)
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | \
  sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [arch=${dpkg --print-architecture} signed-by=/usr/share/keyrings/helm.gpg] \
  https://baltocdn.com/helm/stable/debian/ all main" | \
  sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt update && sudo apt install helm -y

# macOS
brew install helm

# Weryfikacja
helm version
# version.BuildInfo{Version:"v3.17.x",...}

# Podlacz kubeconfig k3s
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# lub skopiuj do lokalnego katalogu
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown ${USER} ~/.kube/config

helm list   # powinno zwrocic pustą tablicę

Repozytoria chartów — repo add i update

Charty są publikowane w repozytoriach HTTP — jak apt sources. Przed instalacją musisz dodać repozytorium i pobrać indeks. Poniżej najczęściej używane repozytoria:

Repozytorium Alias Zawiera
https://charts.helm.sh/stable stable Oficjalne stabilne charty Helm
https://kubernetes.github.io/ingress-nginx ingress-nginx Nginx Ingress Controller
https://charts.jetstack.io jetstack cert-manager (Let's Encrypt)
https://charts.bitnami.com/bitnami bitnami MySQL, PostgreSQL, Redis, WordPress
https://prometheus-community.github.io/helm-charts prometheus-community Prometheus, Grafana, Alertmanager
# Dodaj repozytoria
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo add jetstack https://charts.jetstack.io
helm repo add bitnami https://charts.bitnami.com/bitnami

# Aktualizuj indeks (jak apt update)
helm repo update

# Przeszukaj chart
helm search repo nginx
helm search repo mysql --versions

# Informacje o charcie
helm show chart bitnami/mysql
helm show values bitnami/mysql   # dostępne parametry values.yaml

helm install / upgrade / rollback — cykl życia release

Helm nazywa każde wdrożenie release. Jeden chart można zainstalować wielokrotnie pod różnymi nazwami release (np. mysql-prod i mysql-dev). Komendy zarządzania:

# Instalacja (prosta)
helm install moja-aplikacja bitnami/mysql \
  --namespace produkcja \
  --create-namespace \
  --set auth.rootPassword=TajneHaslo123 \
  --set primary.persistence.size=10Gi

# Instalacja z plikiem values (preferowane)
helm install moja-aplikacja bitnami/mysql \
  --namespace produkcja \
  --create-namespace \
  -f my-mysql-values.yaml

# Upgrade (idempotentne - uzyj w CI/CD)
helm upgrade --install moja-aplikacja bitnami/mysql \
  --namespace produkcja \
  --create-namespace \
  -f my-mysql-values.yaml \
  --atomic \          # rollback automatyczny przy niepowodzeniu
  --timeout 5m

# Status wdrozenia
helm status moja-aplikacja -n produkcja
helm list -n produkcja
helm list --all-namespaces

# Historia rewizji
helm history moja-aplikacja -n produkcja

# Rollback do rewizji 2
helm rollback moja-aplikacja 2 -n produkcja

# Odinstalowanie (usuwa wszystkie zasoby K8s)
helm uninstall moja-aplikacja -n produkcja

Nginx Ingress Controller — wdrożenie na k3s

k3s domyślnie zawiera Traefik jako ingress controller. Jeśli wolisz Nginx (szerzej dokumentowany, więcej pluginów), usuń Traefik i zainstaluj Nginx Ingress przez Helm:

# Wylącz Traefik w k3s (edytuj /etc/rancher/k3s/config.yaml)
# disable:
#   - traefik

# Zainstaluj Nginx Ingress Controller
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace \
  --set controller.service.type=LoadBalancer \
  --set controller.replicaCount=1

# Sprawdz ze dostal EXTERNAL-IP (IP VPS)
kubectl get svc -n ingress-nginx
# NAME                       TYPE           CLUSTER-IP     EXTERNAL-IP
# ingress-nginx-controller   LoadBalancer   10.43.47.123   93.184.216.34

# Przykladowy Ingress dla aplikacji
# plik: my-app-ingress.yaml
#
# apiVersion: networking.k8s.io/v1
# kind: Ingress
# metadata:
#   name: my-app
#   annotations:
#     nginx.ingress.kubernetes.io/rewrite-target: /
# spec:
#   ingressClassName: nginx
#   rules:
#   - host: app.example.com
#     http:
#       paths:
#       - path: /
#         pathType: Prefix
#         backend:
#           service:
#             name: my-app-svc
#             port:
#               number: 80

cert-manager — automatyczne certyfikaty Let's Encrypt

# Instalacja cert-manager (wymaga Nginx Ingress)
helm upgrade --install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --set installCRDs=true

# Sprawdz ze pody biegna
kubectl get pods -n cert-manager

# ClusterIssuer dla Lets Encrypt (ACME HTTP-01)
# plik: cluster-issuer.yaml
#
# apiVersion: cert-manager.io/v1
# kind: ClusterIssuer
# metadata:
#   name: letsencrypt-prod
# spec:
#   acme:
#     email: [email protected]
#     server: https://acme-v02.api.letsencrypt.org/directory
#     privateKeySecretRef:
#       name: letsencrypt-prod
#     solvers:
#     - http01:
#         ingress:
#           class: nginx
#
# kubectl apply -f cluster-issuer.yaml

# Ingress z automatycznym certyfikatem
# metadata:
#   annotations:
#     cert-manager.io/cluster-issuer: letsencrypt-prod
# spec:
#   tls:
#   - hosts:
#     - app.example.com
#     secretName: app-tls

Tworzenie własnego chart

Gdy chcesz podzielić się konfiguracją lub wielokrotnie wdrażać tę samą aplikację, stwórz własny chart. Struktura katalogu jest sztywna:

# Tworzenie szkieletu chart
helm create moja-aplikacja

# Struktura katalogu
# moja-aplikacja/
# ├── Chart.yaml          # metadane chart
# ├── values.yaml         # domyslne wartosci
# ├── templates/          # szablony YAML (z Go template)
# │   ├── deployment.yaml
# │   ├── service.yaml
# │   ├── ingress.yaml
# │   ├── _helpers.tpl    # funkcje pomocnicze
# │   └── NOTES.txt       # wiadomosc po instalacji
# └── charts/             # zaleznosci (sub-charts)

# Chart.yaml - przyklad
# apiVersion: v2
# name: moja-aplikacja
# description: Moja aplikacja Node.js na Kubernetes
# type: application
# version: 0.1.0
# appVersion: "1.0.0"

# values.yaml - przyklad
# replicaCount: 2
# image:
#   repository: my-registry/moja-aplikacja
#   tag: "1.0.0"
#   pullPolicy: IfNotPresent
# service:
#   type: ClusterIP
#   port: 80
# ingress:
#   enabled: true
#   host: app.example.com

# Uzycie wartosci w szablonie deployment.yaml (Go template)
# spec:
#   replicas: {{ .Values.replicaCount }}
#   template:
#     spec:
#       containers:
#       - name: {{ .Chart.Name }}
#         image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

# Testowanie szablonow (renderuj bez instalacji)
helm template moja-aplikacja ./moja-aplikacja/ -f custom-values.yaml

# Walidacja
helm lint ./moja-aplikacja/

# Instalacja lokalnego chart
helm upgrade --install moja-app ./moja-aplikacja/ -f prod-values.yaml

# Pakowanie do archiwum
helm package ./moja-aplikacja/
# Tworzy: moja-aplikacja-0.1.0.tgz

MySQL przez Bitnami Helm chart

Bitnami MySQL chart to przykład produkcyjnego chart z dziesiątkami opcji konfiguracyjnych. Poniżej minimalny plik values.yaml dla developmentu i produkcji:

# mysql-values.yaml (dev)
# auth:
#   rootPassword: "dev-only-password"
#   database: "myapp"
#   username: "myapp"
#   password: "myapp-dev-pass"
# primary:
#   persistence:
#     enabled: true
#     size: 5Gi
#   resources:
#     limits:
#       memory: 512Mi
#       cpu: 500m

# mysql-prod-values.yaml (produkcja)
# auth:
#   existingSecret: mysql-secret  # Secret K8s z haslem
# primary:
#   persistence:
#     size: 50Gi
#     storageClass: "fast-ssd"
#   resources:
#     limits:
#       memory: 4Gi
#       cpu: 2000m
# metrics:
#   enabled: true   # eksporter Prometheus

# Instalacja
helm upgrade --install mysql bitnami/mysql \
  --namespace db \
  --create-namespace \
  -f mysql-values.yaml

# Polaczenie z MySQL w klastrze
kubectl exec -it -n db mysql-0 -- mysql -u root -p

# Port-forward dla zewnetrznego dostępu (dev)
kubectl port-forward svc/mysql -n db 3306:3306

Najczęstsze pytania

Czym jest Helm i dlaczego warto go używać z Kubernetes? +
Helm to menedżer pakietów dla Kubernetes — odpowiednik apt/yum, ale dla aplikacji w klastrze. Zamiast ręcznie pisać dziesiątki plików YAML (Deployment, Service, Ingress, ConfigMap, Secret), instalujesz gotowy chart jednym poleceniem. Helm zarządza wersjami aplikacji, umożliwia rollback do poprzedniej wersji, parametryzuje konfigurację przez values.yaml i pozwala tworzyć własne szablony wielokrotnego użytku. Szczególnie przydatny przy wdrożeniach na k3s — lekkim Kubernetes do self-hosted VPS.
Jaka jest różnica między helm install a helm upgrade --install? +
helm install zakłada, że release nie istnieje — jeśli istnieje, zwróci błąd. helm upgrade --install działa jak "upsert": jeśli release nie ma — instaluje, jeśli jest — uaktualnia. W skryptach CI/CD i Ansible zawsze używaj helm upgrade --install, bo idempotentność jest kluczowa: polecenie można uruchamiać wielokrotnie bez błędów.
Jak cofnąć wdrożenie Helm do poprzedniej wersji? +
Użyj helm rollback <release> <numer-rewizji>. Numer rewizji sprawdzisz poleceniem helm history <release>. Helm przywróci konfigurację zasobów Kubernetes do stanu z wybranej rewizji. Rollback tworzy nową rewizję (nie usuwa historii). Domyślnie Helm przechowuje 10 ostatnich rewizji — zmień przez --history-max w helm upgrade.
Czy Helm działa z k3s na małym VPS? +
Tak, Helm działa identycznie z k3s jak z pełnym Kubernetes. k3s eksportuje kubeconfig do /etc/rancher/k3s/k3s.yaml — wystarczy ustawić KUBECONFIG lub skopiować do ~/.kube/config. Na VPS z 2 GB RAM możesz uruchomić k3s + Helm + kilka lekkich chartów (Nginx Ingress, cert-manager, małą aplikację). Contabo VPS S (4 vCPU, 8 GB RAM) to dobra platforma startowa dla małego klastra k3s.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.