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

k3s — lekki Kubernetes na VPS

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS / Kontenery

Pełny Kubernetes wymaga minimum kilku serwerów, skomplikowanej konfiguracji i sporego budżetu. k3s (Rancher/SUSE) to certyfikowana dystrybucja Kubernetes skompilowana do jednego pliku binarnego — instalujesz go w 30 sekund jednym poleceniem i masz działający klaster K8s na VPS za 20 PLN/miesiąc. API jest w 100% kompatybilne z vanilla Kubernetes — wszystkie manifesty YAML, helm charty i narzędzia jak kubectl, Helm, Kustomize działają bez żadnych modyfikacji. Ten artykuł pokazuje jak zainstalować k3s, uruchomić aplikację w deploymencie i wystawić ją na świat przez Traefik Ingress z Let's Encrypt.

k3s vs pełny Kubernetes — porównanie

Cecha k3s Pełny K8s (kubeadm)
Instalacja 1 polecenie, ~30 sekund Kilkanaście kroków, 30-60 min
RAM (control plane) od 512 MB od 2 GB
Rozmiar binarki ~70 MB Dziesiątki komponentów
Datastore SQLite (domyślnie), PostgreSQL, MySQL, etcd etcd (obowiązkowo)
Ingress Traefik (wbudowany) Brak — instalujesz sam
Load Balancer ServiceLB (wbudowany) Brak — MetalLB lub cloud LB
Kompatybilność API 100% CNCF certified 100%
Prod-ready Tak (z HA setup) Tak

Instalacja k3s — single node

# Na serwerze Linux (Ubuntu 22.04 / Debian 12)
curl -sfL https://get.k3s.io | sh -

# k3s server startuje automatycznie jako systemd service
systemctl status k3s

# Konfiguracja kubectl
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get nodes
# NAME        STATUS   ROLES                  AGE   VERSION
# vps-01      Ready    control-plane,master   1m    v1.29.4+k3s1

# Pobierz kubeconfig na swoj komputer lokalny
# Na lokalnym: scp root@vps-ip:/etc/rancher/k3s/k3s.yaml ~/.kube/config-k3s
# Zamien server: na adres IP VPS

# Sprawdz pody systemowe
kubectl get pods -A

Deployment — uruchomienie aplikacji

# Przyklad: deployment aplikacji Node.js
# myapp-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: node:20-alpine
          command: ["node", "-e", "require('http').createServer((req,res)=>res.end('Hello k3s!')).listen(3000)"]
          ports:
            - containerPort: 3000
          resources:
            requests:
              memory: "64Mi"
              cpu: "50m"
            limits:
              memory: "128Mi"
              cpu: "200m"
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
spec:
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 3000

# Zastosuj manifesty
kubectl apply -f myapp-deployment.yml

# Sprawdz status
kubectl get deployments
kubectl get pods
kubectl get svc
kubectl describe pod myapp-xxxx

Ingress z Traefik i Let's Encrypt

k3s instaluje Traefik automatycznie. Żeby wystawić aplikację na zewnątrz z HTTPS, utwórz zasób Ingress i skonfiguruj Let's Encrypt przez HelmChartConfig:

# /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    certificatesResolvers:
      letsencrypt:
        acme:
          email: [email protected]
          storage: /data/acme.json
          httpChallenge:
            entryPoint: web
    ports:
      websecure:
        tls:
          certResolver: letsencrypt
# ingress.yml — Ingress dla myapp
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    traefik.ingress.kubernetes.io/router.tls.certresolver: letsencrypt
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp-svc
                port:
                  number: 80
  tls:
    - hosts:
        - app.example.com

kubectl apply -f ingress.yml
# Po chwili Traefik zamawia certyfikat Let's Encrypt
# https://app.example.com dziala

Przydatne komendy kubectl

# Logi z poda
kubectl logs -f myapp-xxxx

# Wejdz do kontenera
kubectl exec -it myapp-xxxx -- sh

# Skalowanie
kubectl scale deployment myapp --replicas=3

# Rolling update (nowy image)
kubectl set image deployment/myapp myapp=node:22-alpine

# Status rollout
kubectl rollout status deployment/myapp

# Historia i rollback
kubectl rollout history deployment/myapp
kubectl rollout undo deployment/myapp

# Zasoby (CPU/RAM) uzywane przez pody
kubectl top pods
kubectl top nodes

# Opisz node (dostepna pojemnosc)
kubectl describe node vps-01

Klaster multi-node — dodawanie worker nodes

# Na masterze — pobierz token
cat /var/lib/rancher/k3s/server/node-token

# Na workerze — dolacz do klastra
curl -sfL https://get.k3s.io | K3S_URL=https://<master-ip>:6443 K3S_TOKEN=<token> sh -

# Na masterze sprawdz nowe nody
kubectl get nodes
# NAME       STATUS   ROLES                  AGE
# master     Ready    control-plane,master   10m
# worker01   Ready    <none>                 30s

Helm — manager pakietów dla k3s

# Instalacja Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Dodaj repo i zainstaluj aplikacje
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# Instalacja PostgreSQL
helm install my-postgres bitnami/postgresql \
  --set auth.postgresPassword=mocne-haslo \
  --set primary.persistence.size=10Gi

# Instalacja WordPress
helm install my-wordpress bitnami/wordpress \
  --set wordpressUsername=admin \
  --set wordpressPassword=haslo-wp

# Lista zainstalowanych chartow
helm list
helm status my-postgres

Najczęstsze pytania

Czym k3s różni się od pełnego Kubernetes? +
k3s to lekka dystrybucja Kubernetes od Rancher (SUSE), skompilowana do pojedynczego binarnego pliku (~70 MB). Usuwa rzadko używane komponenty (cloud provider integrations, alpha features) i zastępuje etcd domyślnie SQLite (lub PostgreSQL/MySQL dla HA). Pełne K8s wymaga minimum 2 GB RAM per node, k3s startuje w 512 MB. Instalacja k3s to jedno polecenie vs konfiguracja kubeadm przez kilkanaście kroków. API jest w 100% kompatybilne — wszystkie kubectl komendy i manifesty działają identycznie.
Ile zasobów potrzebuje k3s na VPS? +
k3s server (control plane) potrzebuje minimum 512 MB RAM i 1 vCPU, ale komfortowo działa od 1 GB RAM. k3s agent (worker node) potrzebuje minimum 256 MB RAM. Dla klastra single-node (serwer + agent na jednej maszynie) z kilkoma podami realistyczne minimum to 2 GB RAM. Dla środowisk produkcyjnych z wieloma aplikacjami rekomendowane jest 4 GB RAM na master i 2 GB na każdy worker. VPS z 4 GB RAM i 2 vCPU jak Contabo jest dobrym punktem startowym.
Jak działa Traefik jako Ingress w k3s? +
k3s domyślnie instaluje Traefik jako Ingress Controller. Traefik automatycznie wykrywa IngressRoute i Ingress resources w Kubernetes i konfiguruje routing HTTP/HTTPS. Aby dodać nową aplikację wystarczy stworzyć zasób Ingress z rules określającymi host i path, a Traefik przekieruje ruch do odpowiedniego Service. Let's Encrypt jest wbudowany — wystarczy adnotacja "kubernetes.io/tls-acme: true" i Traefik sam zamawia i odnawia certyfikaty. Alternatywnie możesz zastąpić Traefik Nginx Ingress Controller przy instalacji.
Czy k3s nadaje się do produkcji? +
Tak, k3s jest gotowy do produkcji — używają go m.in. firmy na edge computing, IoT, małe klastry SaaS. Dla wysokiej dostępności (HA) uruchamia się k3s z zewnętrznym datastore (PostgreSQL lub MySQL) i minimum 3 nodami server. Ograniczenia: bez chmurowych load balancerów (trzeba MetalLB dla on-premise), mniejsza społeczność niż vanilla Kubernetes, niektóre helm charty mogą wymagać dostosowania. Dla małych i średnich aplikacji k3s jest prostszy i tańszy niż zarządzany K8s (EKS/GKE/AKS) lub full kubeadm.

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.