Zum Hauptinhalt springen
Zurück zur Kategorie

K3s Kubernetes-Installation: Leichte Container-Orchestrierung

Einzel- und Multi-Node Kubernetes-Cluster-Setup mit K3s, kubectl-Nutzung, Deployments und Services erstellen, Anwendungsverwaltung mit Helm. Kubernetes-Leitfaden für VPS-Umgebungen.

Lesezeit: 20 dk Container & Orchestrierung
k3skubernetescontainerorchestrierungclusterkubectlhelmvps
Autor
REXE Teknoloji Network & Security Team
Redaktion
REXE Teknoloji Technical Editorial
Erstveröffentlichung
Letzte Aktualisierung

K3s Kubernetes-Installation: Leichte Container-Orchestrierung

Kubernetes ist der Industriestandard für Container-Orchestrierung. Eine vollständige Kubernetes-Installation kann jedoch ressourcenintensiv und komplex sein. K3s ist eine leichtgewichtige Kubernetes-Distribution von Rancher — sie bietet alle Kubernetes-Funktionen in einer einzigen Binary und funktioniert hervorragend in ressourcenbeschränkten Umgebungen wie VPS.

Warum K3s wählen?

MerkmalVollständiges KubernetesK3s
Binary-Größe~500MB+~100MB
Mindest-RAM2GB+512MB
Installationszeit30-60 Min5 Min
AbhängigkeitenVieleMinimal
Kubernetes-KompatibilitätVollständigVollständig
ProduktionseinsatzJaJa

K3s ist vollständig mit der Kubernetes-API kompatibel. kubectl, Helm und andere Kubernetes-Tools funktionieren nahtlos mit K3s. Ideal für kleine bis mittlere Produktionsumgebungen.

Systemanforderungen

hljs bash
# Mindestanforderungen
# CPU: 1 Kern
# RAM: 512MB (empfohlen: 1GB+)
# Disk: 5GB
# OS: Ubuntu 20.04+, Debian 11+, CentOS 8+

# System aktualisieren
apt update && apt upgrade -y

# Benötigte Tools installieren
apt install -y curl wget

Einzelknoten K3s-Installation (Server)

hljs bash
# K3s installieren (Server-Modus)
curl -sfL https://get.k3s.io | sh -

# Service-Status nach Installation prüfen
systemctl status k3s

# Cluster-Status prüfen
kubectl get nodes

# Alle Pods auflisten
kubectl get pods -A

Kubeconfig-Einrichtung

hljs bash
# Kubeconfig für kubectl kopieren
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chmod 600 ~/.kube/config

# KUBECONFIG-Umgebungsvariable setzen
export KUBECONFIG=~/.kube/config
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc

# Cluster-Informationen anzeigen
kubectl cluster-info

Multi-Node Cluster-Setup

Master-Node (Server)

hljs bash
# Master-Node installieren und Token speichern
curl -sfL https://get.k3s.io | sh -

# Node-Token abrufen (für Worker-Nodes benötigt)
cat /var/lib/rancher/k3s/server/node-token

Worker-Node (Agent)

hljs bash
# Worker-Node mit Master verbinden
curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_IP:6443 K3S_TOKEN=NODE_TOKEN sh -

# Auf Master prüfen, ob Worker beigetreten ist
kubectl get nodes

Grundlegende kubectl-Befehle

hljs bash
# Nodes auflisten
kubectl get nodes
kubectl get nodes -o wide

# Pods auflisten
kubectl get pods
kubectl get pods -n kube-system
kubectl get pods -A

# Deployments auflisten
kubectl get deployments

# Services auflisten
kubectl get services

# Ressourcendetails anzeigen
kubectl describe pod POD_NAME
kubectl describe node NODE_NAME

# Pod-Logs anzeigen
kubectl logs POD_NAME
kubectl logs -f POD_NAME

# Befehl in Pod ausführen
kubectl exec -it POD_NAME -- /bin/bash

Erstes Deployment erstellen

NGINX Deployment

hljs yaml
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
hljs bash
# Deployment anwenden
kubectl apply -f nginx-deployment.yaml

# Deployment-Status prüfen
kubectl get deployments
kubectl rollout status deployment/nginx-deployment

Service erstellen

hljs yaml
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080
  type: NodePort
hljs bash
kubectl apply -f nginx-service.yaml
kubectl get services
# Zugriff: http://SERVER_IP:30080

Anwendungsverwaltung mit Helm

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

# Bitnami-Repository hinzufügen
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# WordPress installieren
helm install my-wordpress bitnami/wordpress \
  --set wordpressUsername=admin \
  --set wordpressPassword=StarkesPasswort123! \
  --set service.type=NodePort

# Installierte Charts auflisten
helm list

# Chart entfernen
helm uninstall my-wordpress

K3s-Verwaltung

hljs bash
# K3s aktualisieren
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.0+k3s1 sh -

# K3s-Service verwalten
systemctl stop k3s
systemctl start k3s
systemctl restart k3s

# K3s-Logs anzeigen
journalctl -u k3s -f

# K3s deinstallieren
/usr/local/bin/k3s-uninstall.sh

Fazit

K3s bietet die volle Leistung von Kubernetes mit minimalem Ressourcenverbrauch. Es ist eine ideale Lösung für produktionsreife Container-Orchestrierung in VPS-Umgebungen. Mit K3s auf REXE-Servern können Sie Ihre Anwendungen einfach skalieren, hohe Verfügbarkeit gewährleisten und moderne DevOps-Praktiken implementieren.

Häufig gestellte Fragen

Was ist der Hauptunterschied zwischen K3s und vollständigem Kubernetes?

K3s ist eine leichtgewichtige Distribution, die vollständig mit der Kubernetes-API kompatibel ist. Unterschiede: K3s ist eine einzelne Binary (~100MB), während vollständiges Kubernetes mehrere Komponenten benötigt. K3s kann SQLite verwenden (statt etcd), verbraucht weniger RAM (512MB vs 2GB+) und installiert sich viel schneller. Beide eignen sich für den Produktionseinsatz.

Pods starten in K3s nicht, was soll ich tun?

Prüfen Sie zuerst die Ereignisse mit kubectl describe pod POD_NAME. Häufige Probleme: 1) Unzureichende Ressourcen (mit kubectl describe node prüfen), 2) Image-Pull-Fehler (mit docker pull testen), 3) PVC kann nicht gebunden werden (mit kubectl get pvc prüfen), 4) Fehlende ConfigMap/Secret. Prüfen Sie auch Anwendungslogs mit kubectl logs POD_NAME.

Wie greife ich von außen auf meine Anwendung zu?

Drei Methoden: 1) NodePort Service: öffnet einen Port zwischen 30000-32767, Zugriff über IP:PORT. 2) LoadBalancer Service: funktioniert mit Klipper LB in K3s. 3) Ingress Controller: ermöglicht domainbasierten Zugriff auf mehrere Apps über eine einzelne IP (empfohlen). Traefik ist standardmäßig in K3s enthalten.

Wie passe ich ein Helm-Chart an?

Zeigen Sie Standardwerte mit helm show values CHART_NAME an. Erstellen Sie eine values.yaml-Datei zur Anpassung und verwenden Sie sie mit helm install -f values.yaml. Alternativ können Sie einzelne Werte mit --set key=value übergeben. Verwenden Sie helm upgrade, um eine bestehende Installation zu aktualisieren.

Ich kann keinen Worker-Node zum K3s-Cluster hinzufügen, warum?

Prüfen Sie: 1) Port 6443 auf Master ist vom Worker erreichbar (telnet MASTER_IP 6443), 2) NODE_TOKEN ist korrekt (cat /var/lib/rancher/k3s/server/node-token), 3) Port 6443 ist in der Firewall geöffnet, 4) k3s-agent Service-Logs auf Worker prüfen (journalctl -u k3s-agent -f).

Verwandte Artikel

Docker-Sicherheit: Container-Umgebung absichern

Docker-Sicherheits-Best-Practices: Nicht-Root-Benutzer, Read-Only-Dateisystem, Seccomp-Profile, Image-Scanning, Docker-Socket-Sicherheit, Netzwerkisolierung und Secrets-Verwaltung.

17 dk
dockersicherheitcontainer
NetzwerkverkehrEingehend GbpsAusgehend Gbps