Kubernetes auf macOS: Einstieg
So richtest du Kubernetes lokal auf macOS mit Orbstack ein, erstellst dein erstes Deployment und verstehst Pods und Services.
Kubernetes ist extrem mächtig - und genauso einschüchternd am Anfang.
Als ich erstmals damit gearbeitet habe, fehlte mir ein einfacher, strukturierter Einstieg auf meinem Dev-Rechner.
Dieser Guide ist das, was ich damals gebraucht hätte.
Voraussetzung: Du solltest bereits mit Docker vertraut sein und die Grundlagen verstehen.
Kubernetes lokal installieren
Es gibt viele Tools fĂĽr lokales Kubernetes - minikube, k3s, k0s, k3d, etc.
FĂĽr macOS empfehle ich Orbstack, das native Kubernetes-UnterstĂĽtzung bietet.
Warum Orbstack?
Orbstack konfiguriert Service DNS automatisch (<service>.<namespace>.svc.cluster.local), du musst also nicht /etc/hosts anfassen. Das macht Testing, Debugging und Entwicklung deutlich einfacher.
Nach der Installation startest du Kubernetes so:
$ orb start k8sFalls
orbnicht gefunden wird, prĂĽfe deine Orbstack Installation.
Prüfe, ob Kubernetes läuft:
$ kubectl config get-contextsCURRENT NAME CLUSTER AUTHINFO NAMESPACE* orbstack orbstack orbstackDein erstes Deployment
Wenn du Podman genutzt hast, kennst du Pods bereits.
In Kubernetes liegen Pods meist hinter einer höheren Abstraktion: Deployments.
In Docker startest du einen Container so:
$ docker run nginxIn Kubernetes beschreibst du Container in YAML und wendest die Konfiguration mit kubectl an.
Erstelle eine Datei example.yaml:
apiVersion: apps/v1kind: Deploymentmetadata: name: example-deployment # deployment namespec: selector: matchLabels: app: example-pod # ----- template: # | metadata: # | labels: # | app: example-pod # <-- spec: containers: - name: example-container image: nginx imagePullPolicy: Always ports: - containerPort: 80---apiVersion: v1kind: Servicemetadata: name: example-servicespec: selector: app: example-pod # selector which pod ports: - protocol: TCP port: 8080 # exposed port targetPort: 80 # container portKonfiguration anwenden:
$ kubectl apply -f example.yamldeployment.apps/example createdservice/example-service createdDeployment-Status prĂĽfen:
$ kubectl get deployments --watchNAME READY UP-TO-DATE AVAILABLE AGEexample 1/1 1 1Warte bis READY 1/1 zeigt.
Pods prĂĽfen:
$ kubectl get pods --watchNAME READY STATUS RESTARTS AGEexample-54c9b4c747-v7mbj 1/1 Running 0 10sZugriff auf deine Anwendung
Dein Service ist jetzt erreichbar unter:
http://example-service.default.svc.cluster.local:8080/
Oder via Cluster IP:
$ kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEexample-service ClusterIP 192.168.194.207 <none> 8080/TCP 2sHinweis: Cluster IPs ändern sich nach Neustarts. DNS-Zugriff über Orbstack bleibt stabil.
Aufräumen
Ressourcen löschen:
$ kubectl delete -f example.yamlPrĂĽfen, ob Pods weg sind:
$ kubectl get podsNo resources found in default namespace.Kubernetes Ebenen verstehen
Level 1: Docker - direkter Container
docker run nginx → [ Container ]- Single Container, direkt gestartet.
Level 2: Podman - Pod-basierte Gruppierung
$ podman pod create --name mypod → [ Pod ]$ podman run --pod mypod -p 8080:80 nginx → ├─ [ Container ]$ podman run --pod mypod redis → └─ [ Container ]- Mehrere Container teilen sich einen Network Namespace.
Level 3: Kubernetes - deklaratives Deployment
YAML (Deployment) → kubectl apply → [ Deployment ] └─ [ Pod ] ├─ [ Container ] └─ [ Container ]- Deklarative Infrastruktur, automatisches Skalieren und Healing.
Was ist ein Deployment?
Ein Deployment verwaltet Pods und stellt sicher, dass die gewünschte Anzahl an Replicas immer läuft.
Du kannst skalieren, indem du replicas: 2 in deine example.yaml einträgst:
---spec: replicas: 2Änderungen anwenden:
$ kubectl apply -f example.yamlPods listen:
$ kubectl get podsNAME READY STATUS RESTARTS AGEexample-deployment-779f6bb7dc-nvvq7 1/1 Running 0 4sexample-deployment-779f6bb7dc-wlfzg 1/1 Running 0 4sKubernetes verteilt Traffic automatisch auf beide Instanzen.
Was ist ein Service?
Ein Service bietet einen stabilen Zugriff auf einen oder mehrere Pods.
Er vergibt eine Cluster IP (interne virtuelle IP) und einen DNS Namen (z.B. example-service.default.svc.cluster.local) im Cluster.
Wichtig ist der Unterschied zwischen k3d (oder ähnlichen Tools) und Orbstack:
k3d
- k3d läuft Kubernetes in einem Docker Container.
- Interne DNS Namen (
*.svc.cluster.local) sind nur im Cluster auflösbar (zwischen Pods). - Dein Host (macOS) ist nicht Teil des Cluster-Netzwerks.
- Daher kannst du
example-service.default.svc.cluster.localnicht direkt vom Mac aus erreichen, ohne extra DNS Routing oder Port-Forwarding. - Ăśbliche Workarounds:
kubectl port-forward- Services als
NodePort - Ingress Controller
Orbstack
- Orbstack integriert den Host eng in das Cluster-Netzwerk.
- Es konfiguriert DNS automatisch, sodass
.svc.cluster.localNamen vom Mac auflösbar sind. - Du kannst
http://example-service.default.svc.cluster.local:8080/direkt im Browser öffnen, ohne Zusatzkonfiguration. - Das macht Entwicklung und Debugging deutlich einfacher.
Orbstack bietet eine viel bessere lokale Dev Experience, weil es Cluster- und Host-DNS automatisch bridged. k3d braucht zusätzliches Setup, wenn du Services vom Mac aus erreichen willst.
Fazit
Kubernetes auf macOS muss nicht schmerzhaft sein.
Mit Orbstack, ein paar YAML Files und kubectl bist du schnell startklar - und kannst dich ohne Reibung aufs Lernen konzentrieren.
Was kommt als Nächstes?
Jetzt wo Kubernetes lokal läuft und deine erste App deployed ist, hier ein paar nächste Schritte:
-
kubectlCommands erkunden
Lerne Pods, Services und Deployments zu inspizieren und Fehler mitkubectl describe,kubectl logsundkubectl execzu debuggen. -
In Helm eintauchen
Helm ist der Package Manager fĂĽr Kubernetes. Startpunkt: Helm Quickstart Guide -
Ingress Controller verstehen
Gehe ĂĽber ClusterIP und NodePort hinaus und setze einen Ingress (z.B. Traefik oder NGINX) auf. -
StatefulSets, Jobs und CronJobs lernen
Deploye Workloads mit persistentem Storage oder Zeitplanung - nicht alles passt in stateless Deployments. -
Lokale CI/CD Pipelines bauen
Integriere Kubernetes mit lokalen GitOps Tools wie ArgoCD oder einfachen CI Pipelines, die automatisch deployen. -
Community beitreten
Tausche dich in Kubernetes Communities aus (Slack, Discord, CNCF Meetups).
Kubernetes hat eine steile Lernkurve - aber mit solidem lokalen Setup und kontinuierlicher Praxis kommst du schneller voran.
Happy clustering!