Zum Hauptinhalt springen
Version: 3.0.0-alpha (Diátaxis)

🚀 Kubernetes in 5 Minuten bereitstellen

Diese Anleitung begleitet Sie bei der Erstellung Ihres ersten Kubernetes-Clusters auf Hikube, von der Basiskonfiguration bis zur Bereitstellung einer Testanwendung.


Voraussetzungen

Stellen Sie vor Beginn sicher, dass Sie Folgendes haben:

  • Zugriff auf einen Hikube-Tenant mit entsprechenden Berechtigungen
  • CLI kubectl konfiguriert, um mit der Hikube-API zu interagieren
  • Kubernetes-Grundkenntnisse (Pods, Services, Deployments)

Schritt 1: Cluster-Konfiguration

Einfacher Kubernetes-Cluster

Erstellen Sie eine Datei my-first-cluster.yaml mit folgender Konfiguration:

my-first-cluster.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kubernetes
metadata:
name: my-first-cluster
spec:
# Konfiguration der Steuerungsebene
controlPlane:
replicas: 2 # Hochverfügbarkeit

# Konfiguration der Worker-Knoten
nodeGroups:
general:
minReplicas: 1
maxReplicas: 5
instanceType: "s1.large" # 4 vCPU, 8 GB RAM
ephemeralStorage: 50Gi # Speicher für die Systempartition
resources: {} # Erforderlich — instanceType bestimmt die Werte
roles:
- ingress-nginx # Ingress-Unterstützung

# Aktiviert die Replikation des Speichers
storageClass: "replicated"

# Wesentliche Add-ons aktiviert
addons:
certManager:
enabled: true
ingressNginx:
enabled: true
hosts:
- my-app.example.com
Feld resources erforderlich

Das Feld resources ist in jeder Node Group erforderlich, auch wenn Sie instanceType verwenden. Mit resources: {} werden die CPU-/Speicherwerte durch instanceType bestimmt. Wenn Sie explizite Werte angeben (z.B. cpu: 4, memory: 8Gi), überschreiben diese instanceType.

Cluster bereitstellen

# Konfiguration anwenden
kubectl apply -f my-first-cluster.yaml

# Bereitstellungsstatus prüfen
kubectl get kubernetes my-first-cluster -w

Wartezeit: Der Cluster ist in 3-5 Minuten bereit


🔐 Schritt 2: Zugriff auf den Cluster

Kubeconfig abrufen

Sobald der Cluster bereitgestellt ist, rufen Sie die Zugangsinformationen ab:

# Kubeconfig des Clusters abrufen
kubectl get tenantsecret my-first-cluster-admin-kubeconfig \
-o go-template='{{ index .data "super-admin.conf" | base64decode }}' \
> my-cluster-kubeconfig.yaml

# kubectl für den neuen Cluster konfigurieren
export KUBECONFIG=my-cluster-kubeconfig.yaml

# Verbindung testen
kubectl get nodes

Erwartetes Ergebnis:

NAME                         STATUS   ROLES    AGE   VERSION
my-first-cluster-md0-xxxxx Ready <none> 2m v1.29.0

🚀 Schritt 3: Bereitstellung einer Anwendung

Demo-Anwendung

Stellen wir eine einfache Webanwendung bereit, um unseren Cluster zu testen:

demo-app.yaml
---
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-hikube
labels:
app: hello-hikube
spec:
replicas: 3
selector:
matchLabels:
app: hello-hikube
template:
metadata:
labels:
app: hello-hikube
spec:
containers:
- name: app
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "100m"
env:
- name: WELCOME_MESSAGE
value: "Hello from Hikube Kubernetes!"

---
# Service
apiVersion: v1
kind: Service
metadata:
name: hello-hikube-service
spec:
selector:
app: hello-hikube
ports:
- port: 80
targetPort: 80
type: ClusterIP

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

Anwendung bereitstellen

# Anwendung bereitstellen
kubectl apply -f demo-app.yaml

# Bereitstellung prüfen
kubectl get deployments
kubectl get pods
kubectl get services
kubectl get ingress

✅ Schritt 4: Überprüfung und Tests

Prüfen, ob alles funktioniert

# Pod-Status
kubectl get pods -l app=hello-hikube

Erwartetes Ergebnis:

NAME                           READY   STATUS    RESTARTS   AGE
hello-hikube-xxxxx-xxxx 1/1 Running 0 1m
hello-hikube-xxxxx-yyyy 1/1 Running 0 1m
hello-hikube-xxxxx-zzzz 1/1 Running 0 1m

Zugriff auf die Anwendung

# Externe IP des Ingress Controllers abrufen
kubectl get svc -n ingress-nginx ingress-nginx-controller

# Lokaler Test (bis die DNS-Konfiguration steht)
kubectl port-forward svc/hello-hikube-service 8080:80 &
curl http://localhost:8080

📊 Schritt 5: Monitoring und Observability

Integrierte Dashboards

Wenn Sie das Monitoring bei der Tenant-Konfiguration aktiviert haben:

# Monitoring-Services prüfen
kubectl get pods -n monitoring

# Zugriff auf Grafana (je nach Tenant-Konfiguration)
kubectl get ingress -n monitoring

Cluster-Metriken

# Knoten-Metriken
kubectl top nodes

# Pod-Metriken
kubectl top pods

# Cluster-Events
kubectl get events --sort-by=.metadata.creationTimestamp

🎛️ Schritt 6: Verwaltung und Skalierung

Cluster-Skalierung

Der Hikube-Cluster kann die Anzahl der Knoten automatisch je nach Bedarf anpassen:

# Aktuelle Knotenanzahl prüfen
kubectl get nodes

# NodeGroup-Konfiguration anzeigen
kubectl get kubernetes my-first-cluster -o yaml | grep -A 10 nodeGroups

# Die automatische Skalierung wird durch die angeforderten Ressourcen ausgelöst
# Beispiel: Mehr Pods bereitzustellen erfordert mehr Knoten
kubectl scale deployment hello-hikube --replicas=6

Skalierung beobachten

# Automatische Hinzufügung von Knoten beobachten
kubectl get nodes -w

# Skalierungsmetriken prüfen
kubectl describe hpa # Wenn HPA konfiguriert ist

🔧 Schritt 7: Nächste Schritte

Erweiterte Konfiguration

Nun da Ihr Cluster funktioniert, erkunden Sie die erweiterten Funktionen:

# Um Node Groups hinzuzufügen, bearbeiten Sie die YAML-Datei und wenden Sie sie erneut an
# Beispiel in my-first-cluster.yaml:
# nodeGroups:
# general:
# # ... bestehende Konfiguration
# compute:
# minReplicas: 0
# maxReplicas: 3
# instanceType: "s1.2xlarge"
# ephemeralStorage: 100Gi

# Dann die Änderungen anwenden
kubectl apply -f my-first-cluster.yaml

Persistenter Speicher

persistent-app.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-app-storage
spec:
accessModes:
- ReadWriteOnce
storageClassName: replicated # Hochverfügbarer Speicher
resources:
requests:
storage: 10Gi

🚨 Schnelle Fehlerbehebung

Häufige Probleme

# Cluster-Erstellung dauert zu lange
kubectl describe kubernetes my-first-cluster

# Knoten nicht Ready
kubectl describe nodes

# Pods im Fehlerzustand
kubectl logs -l app=hello-hikube
kubectl describe pod <pod-name>

# Ingress funktioniert nicht
kubectl describe ingress hello-hikube-ingress
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller

Bereinigung

# Testanwendung löschen
kubectl delete -f demo-app.yaml

# Cluster löschen (ACHTUNG: irreversible Aktion)
kubectl delete kubernetes my-first-cluster

📋 Zusammenfassung

Sie haben erstellt:

  • Einen Kubernetes-Cluster mit verwalteter Steuerungsebene
  • Worker-Knoten mit automatischer Skalierung (1-5 Knoten)
  • Eine Beispielanwendung mit Ingress
  • Ein automatisches SSL-Zertifikat über cert-manager

🚀 Nächste Schritte

  • API-Referenz → Vollständige Cluster-Konfiguration
  • GPU → GPUs mit Kubernetes verwenden

💡 Tipp: Bewahren Sie Ihre kubeconfig-Datei sicher auf und denken Sie daran, RBAC zu konfigurieren, um den Zugriff auf Ihren Cluster je nach Teams und Umgebungen zu steuern.