[{"data":1,"prerenderedAt":889},["ShallowReactive",2],{"navigation":3,"\u002Fde\u002Fblog\u002Fkubernetes-migration-guide":354,"\u002Fde\u002Fblog\u002Fkubernetes-migration-guide-surround":884},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,263,275,306,347],{"title":5,"path":6,"stem":7},"Moderne Website in 5 Minuten erstellen und deployen","\u002Fde\u002Fblog\u002Fbuild-with-loveable","de\u002F3.blog\u002F1.build-with-loveable",{"title":9,"path":10,"stem":11},"Die souveräne Vercel-Alternative für den Mittelstand: Souveränes Hosting auf Hetzner mit lowcloud","\u002Fde\u002Fblog\u002Fdigital-sovereignty-lowcloud-vs-vercel-b2b","de\u002F3.blog\u002F10.digital-sovereignty-lowcloud-vs-vercel-b2b",{"title":13,"path":14,"stem":15},"Cloud Exit Strategie: Warum Unabhängigkeit kein Notfallplan ist","\u002Fde\u002Fblog\u002Fcloud-exit-strategie","de\u002F3.blog\u002F11.cloud-exit-strategie",{"title":17,"path":18,"stem":19},"Cloud Sovereignty Framework: Wie die EU Cloud-Souveränität endlich messbar macht","\u002Fde\u002Fblog\u002Fcloud-sovereignty-framework","de\u002F3.blog\u002F12.cloud-sovereignty-framework",{"title":21,"path":22,"stem":23},"Cloud Vendor Lock-in vermeiden: Was echte Souveränität technisch bedeutet","\u002Fde\u002Fblog\u002Fcloud-vendor-lock-in","de\u002F3.blog\u002F13.cloud-vendor-lock-in",{"title":25,"path":26,"stem":27},"Digitale Souveränität mit Kubernetes: Wann ist Open Source wirklich souverän?","\u002Fde\u002Fblog\u002Fkubernetes-digital-sovereignty","de\u002F3.blog\u002F14.kubernetes-digital-sovereignty",{"title":29,"path":30,"stem":31},"Was ist DevOps as a Service und wann macht es wirklich Sinn?","\u002Fde\u002Fblog\u002Fdevops-as-a-service","de\u002F3.blog\u002F15.devops-as-a-service",{"title":33,"path":34,"stem":35},"Cloud-Souveränität Governance: Warum das Thema aus der IT-Abteilung ins Führungsteam gehört","\u002Fde\u002Fblog\u002Fcloud-souveraenitaet-governance","de\u002F3.blog\u002F16.cloud-souveraenitaet-governance",{"title":37,"path":38,"stem":39},"PaaS vs. DaaS: Was ist der Unterschied und welches Modell passt zu dir?","\u002Fde\u002Fblog\u002Fpaas-vs-daas","de\u002F3.blog\u002F17.paas-vs-daas",{"title":41,"path":42,"stem":43},"Souveräne Cloud: Kann SaaS wirklich die Kontrolle über eure Daten wahren?","\u002Fde\u002Fblog\u002Fsovereign-cloud-saas-data-control","de\u002F3.blog\u002F18.sovereign-cloud-saas-data-control",{"title":45,"path":46,"stem":47},"DevOps vs. DevOps as a Service – Was passt zu deinem Team?","\u002Fde\u002Fblog\u002Fdevops-vs-devops-as-a-service","de\u002F3.blog\u002F19.devops-vs-devops-as-a-service",{"title":49,"path":50,"stem":51},"Docker Grundlagen: Wie Container-Virtualisierung funktioniert","\u002Fde\u002Fblog\u002Fhow-docker-works","de\u002F3.blog\u002F2.how-docker-works",{"title":53,"path":54,"stem":55},"Die 7 größten DevOps-Probleme in KMU – und wie du sie löst","\u002Fde\u002Fblog\u002Fdevops-problems-smb","de\u002F3.blog\u002F20.devops-problems-smb",{"title":57,"path":58,"stem":59},"PostgreSQL Helm Chart: So deployst du Postgres auf Kubernetes","\u002Fde\u002Fblog\u002Fpostgresql-helm-chart-kubernetes","de\u002F3.blog\u002F21.postgresql-helm-chart-kubernetes",{"title":61,"path":62,"stem":63},"Platform Engineering vs. DevOps – Wo liegt der Unterschied?","\u002Fde\u002Fblog\u002Fplatform-engineering-vs-devops","de\u002F3.blog\u002F22.platform-engineering-vs-devops",{"title":65,"path":66,"stem":67},"Cloud Act vs. DSGVO: Das Risiko für EU-Unternehmen","\u002Fde\u002Fblog\u002Fcloud-act-vs-gdpr","de\u002F3.blog\u002F23.cloud-act-vs-gdpr",{"title":69,"path":70,"stem":71},"IT-Kosten senken durch Automatisierung: Der größte Hebel","\u002Fde\u002Fblog\u002Freduce-it-costs-automation","de\u002F3.blog\u002F24.reduce-it-costs-automation",{"title":73,"path":74,"stem":75},"NIS2 Compliance für DevOps-Teams: Was jetzt zu tun ist","\u002Fde\u002Fblog\u002Fnis2-compliance-devops","de\u002F3.blog\u002F25.nis2-compliance-devops",{"title":77,"path":78,"stem":79},"Self-Hosted EU Alternativen: LibreOffice & Co. hosten","\u002Fde\u002Fblog\u002Fself-hosted-eu-alternatives","de\u002F3.blog\u002F26.self-hosted-eu-alternatives",{"title":81,"path":82,"stem":83},"DORA Compliance für DevOps: Was der EU-Resilienz-Act bedeutet","\u002Fde\u002Fblog\u002Fdora-compliance-devops","de\u002F3.blog\u002F27.dora-compliance-devops",{"title":85,"path":86,"stem":87},"Cloud TCO: Versteckte Kosten, die AWS, Azure & GCP nicht zeigen","\u002Fde\u002Fblog\u002Fcloud-tco-hidden-costs","de\u002F3.blog\u002F28.cloud-tco-hidden-costs",{"title":89,"path":90,"stem":91},"Datenresidenz vs. Datensouveränität: Wo der Unterschied liegt","\u002Fde\u002Fblog\u002Fdata-residency-vs-data-sovereignty","de\u002F3.blog\u002F29.data-residency-vs-data-sovereignty",{"title":93,"path":94,"stem":95},"n8n selbst hosten auf Hetzner: Komplette Docker-Anleitung","\u002Fde\u002Fblog\u002Fself-hosted-n8n-on-hetzner","de\u002F3.blog\u002F3.self-hosted-n8n-on-hetzner",{"title":97,"path":98,"stem":99},"Manuelle Deployments: Unterschätztes Risiko im Mittelstand","\u002Fde\u002Fblog\u002Fmanual-deployment-risks","de\u002F3.blog\u002F30.manual-deployment-risks",{"title":101,"path":102,"stem":103},"DevOps Tool-Chaos: So entsteht und stoppst du Tool-Sprawl","\u002Fde\u002Fblog\u002Fdevops-tool-sprawl","de\u002F3.blog\u002F31.devops-tool-sprawl",{"title":105,"path":106,"stem":107},"Kubernetes Monitoring: Logs und Metriken richtig einsetzen","\u002Fde\u002Fblog\u002Fkubernetes-monitoring-logs-metrics","de\u002F3.blog\u002F32.kubernetes-monitoring-logs-metrics",{"title":109,"path":110,"stem":111},"OB7 Case Study: Website-Deployment ohne Infrastruktur-Aufwand","\u002Fde\u002Fblog\u002Fob7-case-study-lowcloud-deployment","de\u002F3.blog\u002F33.ob7-case-study-lowcloud-deployment",{"title":113,"path":114,"stem":115},"DevOps in KMU: Warum fehlende Rollen zum echten Risiko werden","\u002Fde\u002Fblog\u002Fmissing-devops-roles-smb","de\u002F3.blog\u002F34.missing-devops-roles-smb",{"title":117,"path":118,"stem":119},"Kubernetes Konfiguration vereinfachen: Human-Readable Cloud","\u002Fde\u002Fblog\u002Fsimplify-kubernetes-configuration","de\u002F3.blog\u002F35.simplify-kubernetes-configuration",{"title":121,"path":122,"stem":123},"Collaborative DevOps: Cloud-Apps gemeinsam bauen","\u002Fde\u002Fblog\u002Fcollaborative-devops-teams","de\u002F3.blog\u002F36.collaborative-devops-teams",{"title":125,"path":126,"stem":127},"Wissensdokumentation in DevOps-Teams: Bus-Faktor senken","\u002Fde\u002Fblog\u002Fdevops-knowledge-documentation-bus-factor","de\u002F3.blog\u002F37.devops-knowledge-documentation-bus-factor",{"title":129,"path":130,"stem":131},"Was ist PaaS? Platform as a Service einfach erklärt","\u002Fde\u002Fblog\u002Fwhat-is-paas","de\u002F3.blog\u002F38.what-is-paas",{"title":133,"path":134,"stem":135},"EU AI Act Hosting: Was sich für KI-Workloads ändert","\u002Fde\u002Fblog\u002Feu-ai-act-hosting","de\u002F3.blog\u002F39.eu-ai-act-hosting",{"title":137,"path":138,"stem":139},"Docker Compose Tutorial: Multi-Container-Apps einfach verwalten","\u002Fde\u002Fblog\u002Fdocker-compose-for-beginners","de\u002F3.blog\u002F4.docker-compose-for-beginners",{"title":141,"path":142,"stem":143},"Full-Stack Developer: Was der Begriff wirklich bedeutet","\u002Fde\u002Fblog\u002Ffull-stack-developer-reality","de\u002F3.blog\u002F40.full-stack-developer-reality",{"title":145,"path":146,"stem":147},"Cloud Egress Fees im Vergleich: AWS vs. Azure vs. GCP Preise","\u002Fde\u002Fblog\u002Fcloud-egress-fees","de\u002F3.blog\u002F41.cloud-egress-fees",{"title":149,"path":150,"stem":151},"Bring Your Own Cloud: Was das Modell bedeutet und warum es Fahrt aufnimmt","\u002Fde\u002Fblog\u002Fbring-your-own-cloud","de\u002F3.blog\u002F42.bring-your-own-cloud",{"title":153,"path":154,"stem":155},"Zero-Config Kubernetes: Warum Einfachheit gewinnt","\u002Fde\u002Fblog\u002Fzero-config-kubernetes","de\u002F3.blog\u002F43.zero-config-kubernetes",{"title":157,"path":158,"stem":159},"Minimalistische Cloud-Architektur: Weniger ist stabiler","\u002Fde\u002Fblog\u002Fminimalist-cloud-architecture","de\u002F3.blog\u002F44.minimalist-cloud-architecture",{"title":161,"path":162,"stem":163},"Software Deployment KMU: Schneller und sicherer ausrollen","\u002Fde\u002Fblog\u002Fsmb-software-deployment","de\u002F3.blog\u002F45.smb-software-deployment",{"title":165,"path":166,"stem":167},"EU Data Act: Was Unternehmen und DevOps-Teams wissen müssen","\u002Fde\u002Fblog\u002Feu-data-act-business-devops","de\u002F3.blog\u002F46.eu-data-act-business-devops",{"title":169,"path":170,"stem":171},"Data Governance Act: Was KMU und DevOps-Teams wissen müssen","\u002Fde\u002Fblog\u002Fdata-governance-act-devops-guide","de\u002F3.blog\u002F47.data-governance-act-devops-guide",{"title":173,"path":174,"stem":175},"Cloud agnostisch: Bedeutung und praktische Umsetzung","\u002Fde\u002Fblog\u002Fcloud-agnostic-architecture","de\u002F3.blog\u002F48.cloud-agnostic-architecture",{"title":177,"path":178,"stem":179},"Kubernetes Migration: Was du wissen musst, bevor du anfängst","\u002Fde\u002Fblog\u002Fkubernetes-migration-guide","de\u002F3.blog\u002F49.kubernetes-migration-guide",{"title":181,"path":182,"stem":183},"Docmost selbst hosten mit Docker Compose und Traefik: Komplette Anleitung","\u002Fde\u002Fblog\u002Fself-host-docmost-with-docker-and-traefik","de\u002F3.blog\u002F5.self-host-docmost-with-docker-and-traefik",{"title":185,"path":186,"stem":187},"AI Agenten Infrastruktur: Was du für Produktion brauchst","\u002Fde\u002Fblog\u002Fai-agent-infrastructure","de\u002F3.blog\u002F50.ai-agent-infrastructure",{"title":189,"path":190,"stem":191},"ROI von Managed Services: Warum Eigenbetrieb oft teurer ist","\u002Fde\u002Fblog\u002Fmanaged-services-roi","de\u002F3.blog\u002F51.managed-services-roi",{"title":193,"path":194,"stem":195},"lowcloud vs. DevOps-as-a-Service-Anbieter im Vergleich","\u002Fde\u002Fblog\u002Flowcloud-vs-devops-service-providers","de\u002F3.blog\u002F52.lowcloud-vs-devops-service-providers",{"title":197,"path":198,"stem":199},"Kubernetes vs. Docker Swarm: Unterschiede und warum K8s gewonnen hat","\u002Fde\u002Fblog\u002Fkubernetes-vs-docker-swarm","de\u002F3.blog\u002F53.kubernetes-vs-docker-swarm",{"title":201,"path":202,"stem":203},"Hetzner Kubernetes Hosting mit lowcloud","\u002Fde\u002Fblog\u002Fhetzner-kubernetes-hosting","de\u002F3.blog\u002F54.hetzner-kubernetes-hosting",{"title":205,"path":206,"stem":207},"MinIO Alternativen im Vergleich: RustFS, SeaweedFS und Garage","\u002Fde\u002Fblog\u002Fminio-alternatives","de\u002F3.blog\u002F55.minio-alternatives",{"title":209,"path":210,"stem":211},"Was ist Docker Swarm? Container-Orchestrierung mit Bordmitteln","\u002Fde\u002Fblog\u002Fwhat-is-docker-swarm","de\u002F3.blog\u002F56.what-is-docker-swarm",{"title":213,"path":214,"stem":215},"Was ist ein Helm Chart? Der Paketmanager für Kubernetes","\u002Fde\u002Fblog\u002Fwhat-is-a-helm-chart","de\u002F3.blog\u002F57.what-is-a-helm-chart",{"title":217,"path":218,"stem":219},"Docker vs Kubernetes: Compose, Swarm und K8s im Vergleich","\u002Fde\u002Fblog\u002Fdocker-vs-kubernetes","de\u002F3.blog\u002F58.docker-vs-kubernetes",{"title":221,"path":222,"stem":223},"Was ist Kustomize? Kubernetes-Configs sauber verwalten","\u002Fde\u002Fblog\u002Fwhat-is-kustomize","de\u002F3.blog\u002F59.what-is-kustomize",{"title":225,"path":226,"stem":227},"Was ist Kubernetes? Container-Orchestrierung verständlich erklärt","\u002Fde\u002Fblog\u002Fwhat-is-kubernetes","de\u002F3.blog\u002F6.what-is-kubernetes",{"title":229,"path":230,"stem":231},"Die besten Heroku-Alternativen 2026","\u002Fde\u002Fblog\u002Fheroku-alternatives","de\u002F3.blog\u002F60.heroku-alternatives",{"title":233,"path":234,"stem":235},"Die Cloud-Illusion: Warum ein Serverstandort in Deutschland noch keine digitale Souveränität macht","\u002Fde\u002Fblog\u002Fcloud-illusion-digitale-souveraenitaet","de\u002F3.blog\u002F7.cloud-illusion-digitale-souveraenitaet",{"title":237,"path":238,"stem":239},"S3-kompatibler Objektspeicher: Die besten Anbieter im Vergleich (2026)","\u002Fde\u002Fblog\u002Fs3-compatible-object-storage","de\u002F3.blog\u002F8.s3-compatible-object-storage",{"title":241,"path":242,"stem":243},"Deployment als Bottleneck: Wenn KI schneller coden kann als du deployen kannst","\u002Fde\u002Fblog\u002Fdeployment-bottleneck","de\u002F3.blog\u002F9.deployment-bottleneck",{"title":245,"path":246,"stem":247,"children":248,"icon":262},"Getting Started","\u002Fde\u002Fdocs\u002Fgetting-started","de\u002F1.docs\u002F1.getting-started\u002F1.index",[249,252,257],{"title":250,"path":246,"stem":247,"icon":251},"Einführung","i-lucide-house",{"title":253,"path":254,"stem":255,"icon":256},"Erste Schritte","\u002Fde\u002Fdocs\u002Fgetting-started\u002Fget-started","de\u002F1.docs\u002F1.getting-started\u002F2.get-started","i-lucide-rocket",{"title":258,"path":259,"stem":260,"icon":261},"Funktionsweise","\u002Fde\u002Fdocs\u002Fgetting-started\u002Fhow-it-works","de\u002F1.docs\u002F1.getting-started\u002F3.how-it-works","i-lucide-lightbulb",false,{"title":264,"path":265,"stem":266,"children":267,"icon":262},"Guides","\u002Fde\u002Fdocs\u002Fguides","de\u002F1.docs\u002F2.guides\u002F1.index",[268,270],{"title":264,"path":265,"stem":266,"icon":269},"i-lucide-book-open",{"title":271,"path":272,"stem":273,"icon":274},"Container Registry verbinden","\u002Fde\u002Fdocs\u002Fguides\u002Fcontainer-registries","de\u002F1.docs\u002F2.guides\u002F2.container-registries","i-lucide-container",{"title":276,"path":277,"stem":278,"children":279,"icon":262},"App Services","\u002Fde\u002Fdocs\u002Fapp-services","de\u002F1.docs\u002F3.app-services\u002F1.index",[280,281,286,291,296,301],{"title":276,"path":277,"stem":278,"icon":256},{"title":282,"path":283,"stem":284,"icon":285},"Build Settings","\u002Fde\u002Fdocs\u002Fapp-services\u002Fbuild-settings","de\u002F1.docs\u002F3.app-services\u002F2.build-settings","i-lucide-settings",{"title":287,"path":288,"stem":289,"icon":290},"Env Variables","\u002Fde\u002Fdocs\u002Fapp-services\u002Fenvironment-variables","de\u002F1.docs\u002F3.app-services\u002F3.environment-variables","i-lucide-key",{"title":292,"path":293,"stem":294,"icon":295},"Custom Domains","\u002Fde\u002Fdocs\u002Fapp-services\u002Fcustom-domains","de\u002F1.docs\u002F3.app-services\u002F4.custom-domains","i-lucide-globe",{"title":297,"path":298,"stem":299,"icon":300},"Health Checks","\u002Fde\u002Fdocs\u002Fapp-services\u002Fhealth-checks","de\u002F1.docs\u002F3.app-services\u002F5.health-checks","i-lucide-heart-pulse",{"title":302,"path":303,"stem":304,"icon":305},"Autoscaling","\u002Fde\u002Fdocs\u002Fapp-services\u002Fautoscaling","de\u002F1.docs\u002F3.app-services\u002F6.autoscaling","i-lucide-scaling",{"title":307,"path":308,"stem":309,"children":310,"icon":262},"Helm Releases","\u002Fde\u002Fdocs\u002Fhelm-releases","de\u002F1.docs\u002F4.helm-releases\u002F1.index",[311,313,318,323,327,332,337,342],{"title":307,"path":308,"stem":309,"icon":312},"i-lucide-package",{"title":314,"path":315,"stem":316,"icon":317},"PostgreSQL deployen","\u002Fde\u002Fdocs\u002Fhelm-releases\u002Fdeploy-postgresql","de\u002F1.docs\u002F4.helm-releases\u002F2.deploy-postgresql","i-lucide-database",{"title":319,"path":320,"stem":321,"icon":322},"Redis deployen","\u002Fde\u002Fdocs\u002Fhelm-releases\u002Fdeploy-redis","de\u002F1.docs\u002F4.helm-releases\u002F3.deploy-redis","i-lucide-zap",{"title":324,"path":325,"stem":326,"icon":322},"Valkey deployen","\u002Fde\u002Fdocs\u002Fhelm-releases\u002Fdeploy-valkey","de\u002F1.docs\u002F4.helm-releases\u002F3.deploy-valkey",{"title":328,"path":329,"stem":330,"icon":331},"n8n deployen","\u002Fde\u002Fdocs\u002Fhelm-releases\u002Fdeploy-n8n","de\u002F1.docs\u002F4.helm-releases\u002F4.deploy-n8n","i-lucide-workflow",{"title":333,"path":334,"stem":335,"icon":336},"RustFS deployen","\u002Fde\u002Fdocs\u002Fhelm-releases\u002Fdeploy-rustfs","de\u002F1.docs\u002F4.helm-releases\u002F5.deploy-rustfs","i-lucide-hard-drive",{"title":338,"path":339,"stem":340,"icon":341},"OpenSearch deployen","\u002Fde\u002Fdocs\u002Fhelm-releases\u002Fdeploy-opensearch","de\u002F1.docs\u002F4.helm-releases\u002F6.deploy-opensearch","i-lucide-search",{"title":343,"path":344,"stem":345,"icon":346},"Keycloak deployen","\u002Fde\u002Fdocs\u002Fhelm-releases\u002Fdeploy-keycloak","de\u002F1.docs\u002F4.helm-releases\u002F7.deploy-keycloak","i-lucide-shield-check",{"title":348,"path":349,"stem":350,"children":351,"icon":262},"Glossar","\u002Fde\u002Fdocs\u002Fglossary","de\u002F1.docs\u002F5.glossary\u002F1.index",[352],{"title":348,"path":349,"stem":350,"icon":353},"i-lucide-book-a",{"id":355,"title":177,"authors":356,"badge":362,"body":363,"date":874,"description":875,"extension":876,"image":877,"lastUpdated":879,"meta":880,"navigation":881,"path":178,"published":881,"seo":882,"stem":179,"tags":362,"__hash__":883},"posts_de\u002Fde\u002F3.blog\u002F49.kubernetes-migration-guide.md",[357],{"name":358,"to":359,"avatar":360},"Fabian Sander","\u002Fabout\u002Ffabiansander",{"src":361},"\u002Fimages\u002Fblog\u002Fauthors\u002Ffabian.png",null,{"type":364,"value":365,"toc":856},"minimark",[366,375,380,387,395,398,402,405,408,427,432,435,438,453,457,468,479,488,492,495,499,502,602,605,609,612,615,626,629,633,636,643,659,663,666,669,680,683,712,716,723,737,740,744,747,750,753,757,760,770,817,823,826,830,833,843,846,849,852],[367,368,369,370,374],"p",{},"Kubernetes zu migrieren klingt nach einer klaren Infrastrukturaufgabe — besonders wenn man von einer einfacheren Orchestrierung wie ",[371,372,373],"a",{"href":198},"Docker Swarm zu Kubernetes wechselt",". Du nimmst deine bestehenden Anwendungen, packst sie in Container, schreibst ein paar YAML-Dateien und rollst aus. In der Praxis sieht es selten so aus. Wer ohne Vorbereitung migriert, landet schnell in einem Cluster, der technisch läuft, aber operativ niemanden glücklich macht: instabile Pods, unklare Verantwortlichkeiten und nachts klingelnde Alerts. Dieser Artikel zeigt, wo die echten Probleme entstehen und wie man sie vermeidet.",[376,377,379],"h2",{"id":378},"kubernetes-ist-kein-ziel-sondern-ein-werkzeug","Kubernetes ist kein Ziel, sondern ein Werkzeug",[367,381,382,383,386],{},"Ein häufiger Denkfehler: Kubernetes Migration wird als Infrastrukturprojekt behandelt, obwohl es eigentlich ein Architekturprojekt ist. Die Plattform stellt Mechanismen bereit (",[371,384,385],{"href":226},"Scheduling, Self-Healing, Skalierung, Service Discovery","), die aber nur dann funktionieren, wenn die Anwendungen darauf ausgelegt sind.",[367,388,389,390,394],{},"Eine klassische VM-Anwendung, die Konfiguration lokal auf Disk schreibt, Logfiles unter ",[391,392,393],"code",{},"\u002Fvar\u002Flog"," ablegt und erwartet, dass der Prozess nie neu startet, wird auf Kubernetes zwar starten. Aber sie wird sich falsch verhalten. Pods werden neu gestartet, Logs gehen verloren, Konfiguration ist weg.",[367,396,397],{},"Kubernetes lohnt sich nur, wenn Anwendungen ephemeral, zustandslos und beobachtbar sind. Das ist keine Kritik an der Plattform, sondern die Voraussetzung, unter der sie sinnvoll eingesetzt werden kann. Wer das beim Start der Migration versteht, spart sich viel Frust.",[376,399,401],{"id":400},"vor-der-kubernetes-migration-was-du-analysieren-musst","Vor der Kubernetes Migration: Was du analysieren musst",[367,403,404],{},"Bevor der erste Pod deployed wird, lohnt sich eine ehrliche Bestandsaufnahme. Nicht jede Anwendung ist gleich bereit für Kubernetes, und unterschiedliche Bereitschaftslevel erfordern unterschiedliche Migrationspfade.",[367,406,407],{},"Folgende Fragen helfen dabei:",[409,410,411,415,418,421,424],"ul",{},[412,413,414],"li",{},"Welche Services sind stateless, welche haben persistenten Zustand?",[412,416,417],{},"Welche Services haben externe Abhängigkeiten (Datenbanken, Message Queues, Legacy-APIs)?",[412,419,420],{},"Was sind die Ressourcenprofile der Anwendungen: CPU-intensiv, speicherhungrig, IO-bound?",[412,422,423],{},"Wie sehen die aktuellen Deployment-Prozesse aus: Wie wird deployed, wie wird zurückgerollt?",[412,425,426],{},"Gibt es Hardcoded-Konfiguration oder werden Umgebungsvariablen und externe Config-Stores genutzt?",[428,429,431],"h3",{"id":430},"stateful-services-separat-behandeln","Stateful Services separat behandeln",[367,433,434],{},"Datenbanken, Message Queues und ähnliche Systeme brauchen eine eigene Migrationsstrategie. Sie einfach als StatefulSet in den Cluster zu ziehen, ist zumindest am Anfang selten die beste Idee.",[367,436,437],{},"Viele Teams fahren gut damit, Datenbanken zunächst außerhalb des Clusters zu lassen, beispielsweise managed auf AWS RDS, Cloud SQL oder ähnlichen Diensten, und nur die Anwendungsschicht zu migrieren. Das reduziert die Angriffsfläche erheblich und ermöglicht es, zuerst Erfahrungen mit Kubernetes zu sammeln, ohne gleichzeitig Datenpersistenz im Cluster managen zu müssen.",[367,439,440,441,444,445,448,449,452],{},"Wenn Datenbanken dennoch in den Cluster sollen: ",[371,442,443],{"href":58},"StatefulSets mit persistenten Volumes"," sind der richtige Ansatz, aber ",[391,446,447],{},"PodDisruptionBudgets",", ",[391,450,451],{},"StorageClasses",", Backup-Strategien und Upgrade-Prozesse müssen verstanden und getestet sein, bevor das produktiv geht.",[428,454,456],{"id":455},"ressourcen-anforderungen-erheben","Ressourcen-Anforderungen erheben",[367,458,459,460,463,464,467],{},"Einer der häufigsten Fehler bei der Kubernetes Migration ist das Deployen ohne ",[391,461,462],{},"resources.requests"," und ",[391,465,466],{},"resources.limits",". Das fühlt sich zunächst einfacher an, weil weder Konfiguration noch tieferes Nachdenken nötig scheinen. Der Preis kommt aber später.",[367,469,470,471,474,475,478],{},"Ohne ",[391,472,473],{},"requests"," weiß der Kubernetes Scheduler nicht, wie er Pods auf Nodes verteilen soll. Ohne ",[391,476,477],{},"limits"," kann ein einzelner fehlerhafter Pod die Node destabilisieren. Beides führt in Produktionssystemen zu schwer reproduzierbaren Problemen.",[367,480,481,482,484,485,487],{},"Bevor du migrierst: Mess den aktuellen Memory- und CPU-Verbrauch deiner Services unter Last. Diese Werte sind die Grundlage für sinnvolle ",[391,483,473],{},". ",[391,486,477],{}," setzt du dann konservativ darüber, mit etwas Puffer, aber nicht so großzügig, dass ein Bug unbemerkt bleibt.",[376,489,491],{"id":490},"die-häufigsten-fehler-bei-der-kubernetes-migration","Die häufigsten Fehler bei der Kubernetes Migration",[367,493,494],{},"Manche Probleme tauchen so regelmäßig auf, dass sie fast schon vorhersehbar sind. Hier sind die wichtigsten:",[428,496,498],{"id":497},"ressourcen-limits-nicht-vergessen","Ressourcen-Limits nicht vergessen",[367,500,501],{},"OOMKills sind unangenehm. Der Pod wird stillschweigend beendet, Kubernetes startet ihn neu, und wenn niemand auf die Events achtet, merkt das Team es erst, wenn Nutzer sich beschweren. Die Lösung ist nicht kompliziert, aber sie erfordert, dass man sich einmal hinsetzen und die Werte durchdenken.",[503,504,509],"pre",{"className":505,"code":506,"language":507,"meta":508,"style":508},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","resources:\n  requests:\n    memory: \"256Mi\"\n    cpu: \"250m\"\n  limits:\n    memory: \"512Mi\"\n    cpu: \"500m\"\n","yaml","",[391,510,511,524,532,551,566,574,588],{"__ignoreMap":508},[512,513,516,520],"span",{"class":514,"line":515},"line",1,[512,517,519],{"class":518},"swJcz","resources",[512,521,523],{"class":522},"sMK4o",":\n",[512,525,527,530],{"class":514,"line":526},2,[512,528,529],{"class":518},"  requests",[512,531,523],{"class":522},[512,533,535,538,541,544,548],{"class":514,"line":534},3,[512,536,537],{"class":518},"    memory",[512,539,540],{"class":522},":",[512,542,543],{"class":522}," \"",[512,545,547],{"class":546},"sfazB","256Mi",[512,549,550],{"class":522},"\"\n",[512,552,554,557,559,561,564],{"class":514,"line":553},4,[512,555,556],{"class":518},"    cpu",[512,558,540],{"class":522},[512,560,543],{"class":522},[512,562,563],{"class":546},"250m",[512,565,550],{"class":522},[512,567,569,572],{"class":514,"line":568},5,[512,570,571],{"class":518},"  limits",[512,573,523],{"class":522},[512,575,577,579,581,583,586],{"class":514,"line":576},6,[512,578,537],{"class":518},[512,580,540],{"class":522},[512,582,543],{"class":522},[512,584,585],{"class":546},"512Mi",[512,587,550],{"class":522},[512,589,591,593,595,597,600],{"class":514,"line":590},7,[512,592,556],{"class":518},[512,594,540],{"class":522},[512,596,543],{"class":522},[512,598,599],{"class":546},"500m",[512,601,550],{"class":522},[367,603,604],{},"Das sind Beispielwerte, denn die richtigen Zahlen hängen von deiner Anwendung ab. Wichtig ist, dass du sie setzt und sie auf realen Messwerten basieren, nicht auf Schätzungen.",[428,606,608],{"id":607},"secrets-sicher-verwalten","Secrets sicher verwalten",[367,610,611],{},"Kubernetes Secrets sind standardmäßig nur Base64-kodiert, nicht verschlüsselt. Wer sensible Daten wie Datenbankpasswörter, API-Keys und TLS-Zertifikate direkt als Kubernetes Secrets ablegt und dabei auf Cluster-seitige Encryption at Rest verzichtet, hat ein Sicherheitsproblem, das er vielleicht noch nicht sieht.",[367,613,614],{},"Die empfohlenen Ansätze:",[409,616,617,620,623],{},[412,618,619],{},"External Secrets Operator mit einem externen Secret Store (AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager)",[412,621,622],{},"Sealed Secrets für GitOps-Workflows, bei denen Secrets als verschlüsselte CRDs im Repository liegen",[412,624,625],{},"Vault Agent Injector für direkte Integration mit HashiCorp Vault",[367,627,628],{},"Welchen Weg du wählst, hängt von deiner Infrastruktur ab. Aber irgendeinen dieser Wege solltest du gehen, bevor Produktionsdaten im Cluster landen.",[428,630,632],{"id":631},"observability-einrichten-bevor-es-brennt","Observability einrichten, bevor es brennt",[367,634,635],{},"Ohne Metriken, Logs und Traces ist ein Kubernetes-Cluster eine Blackbox. Probleme entstehen, aber es gibt keine Grundlage, um sie schnell zu isolieren.",[367,637,638,639,642],{},"Das bedeutet nicht, sofort den vollständigen Observability-Stack aufzubauen. Aber mindestens ",[371,640,641],{"href":106},"Prometheus für Metriken und ein zentrales Log-Aggregationssystem"," (Loki, Elasticsearch oder ein Managed Service) sollten laufen, bevor die ersten Services migriert werden. Dashboards in Grafana für die wichtigsten Service-Metriken helfen dabei, Probleme früh zu erkennen.",[367,644,645,646,463,649,652,653,655,656,658],{},"Die Health Checks ",[391,647,648],{},"livenessProbe",[391,650,651],{},"readinessProbe"," sind dabei kein Nice-to-have. Ohne ",[391,654,651],{}," schickt Kubernetes Traffic an Pods, die noch nicht bereit sind. Ohne ",[391,657,648],{}," bleiben hängende Prozesse unentdeckt.",[376,660,662],{"id":661},"kubernetes-migration-schritt-für-schritt","Kubernetes Migration Schritt für Schritt",[367,664,665],{},"Der sicherste Weg zur Kubernetes Migration ist ein inkrementelles Vorgehen, bei dem ein Service nach dem anderen migriert wird.",[367,667,668],{},"Das hat mehrere Vorteile:",[409,670,671,674,677],{},[412,672,673],{},"Fehler bleiben isoliert und betreffen nur einen Service",[412,675,676],{},"Das Team sammelt mit jedem Service mehr Erfahrung",[412,678,679],{},"Rollbacks sind überschaubar, weil nur ein Teil des Systems betroffen ist",[367,681,682],{},"Ein typischer Ablauf sieht so aus:",[684,685,686,689,692,700,703,706,709],"ol",{},[412,687,688],{},"Beginne mit einem nicht-kritischen, zustandslosen Service, idealerweise einem, der gut dokumentiert ist und wenige externe Abhängigkeiten hat.",[412,690,691],{},"Containerisiere und teste den Service, sofern noch nicht geschehen.",[412,693,694,695,463,697,699],{},"Erstelle Kubernetes-Manifeste (oder Helm Chart \u002F Kustomize-Overlay), setze ",[391,696,473],{},[391,698,477],{}," und konfiguriere Health Checks.",[412,701,702],{},"Deploye in einem Staging-Cluster und teste unter realistischer Last.",[412,704,705],{},"Lege die Rollout-Strategie fest: Rolling Update reicht für die meisten Services, für kritische Pfade bietet sich Canary-Deployment oder Blue-Green an.",[412,707,708],{},"Validiere die Observability: Kommen Logs an? Zeigen Metriken das erwartete Bild? Schlagen Health Checks korrekt an?",[412,710,711],{},"Schalte produktiv und deaktiviere die alten Deployments.",[428,713,715],{"id":714},"namespace-strategie-und-rbac-von-anfang-an","Namespace-Strategie und RBAC von Anfang an",[367,717,718,719,722],{},"Namespaces sind das primäre Mittel zur Isolierung in Kubernetes. Wer alle Services in den ",[391,720,721],{},"default","-Namespace deployt, vermischt Verantwortlichkeiten und erschwert RBAC-Konfiguration, Netzwerkpolicies und spätere Governance.",[367,724,725,726,448,729,732,733,736],{},"Eine sinnvolle Grundstruktur trennt nach Teams oder Domänen, etwa ",[391,727,728],{},"team-backend",[391,730,731],{},"team-platform"," oder ",[391,734,735],{},"monitoring",", und definiert pro Namespace klare Zugriffsrechte über RBAC. Das Prinzip lautet Least Privilege: Jeder Service Account bekommt genau die Rechte, die er braucht, und nicht mehr.",[367,738,739],{},"NetworkPolicies ergänzen das: Ohne explizite Richtlinien kommunizieren alle Pods im Cluster miteinander. Das ist selten gewünscht. Einfache Default-Deny-Policies pro Namespace, ergänzt durch explizite Allow-Regeln, reduzieren die Angriffsfläche erheblich.",[428,741,743],{"id":742},"observability-als-voraussetzung-nicht-als-nachgedanke","Observability als Voraussetzung, nicht als Nachgedanke",[367,745,746],{},"Der Unterschied zwischen einem gut betreibbaren Kubernetes-Cluster und einem schwer wartbaren liegt oft nicht in der Konfiguration der Workloads, sondern in der Qualität der Observability.",[367,748,749],{},"Metriken (Prometheus + Grafana), strukturiertes Logging (JSON-Logs, zentrales Aggregationssystem) und für komplexere Systeme Distributed Tracing (OpenTelemetry + Jaeger oder Tempo) sollten zum Grundgerüst gehören.",[367,751,752],{},"Besonders hilfreich sind Alert-Regeln für Pods im CrashLoopBackOff, hohe Restart-Raten und ungewöhnliche Ressourcenauslastung. Diese drei Alerts decken einen Großteil der häufigsten Produktionsprobleme in Kubernetes-Clustern ab.",[376,754,756],{"id":755},"cicd-pipelines-auf-kubernetes-ausrichten","CI\u002FCD-Pipelines auf Kubernetes ausrichten",[367,758,759],{},"Bestehende CI\u002FCD-Pipelines, die für klassische Deployments gebaut wurden, wie direktes SSH, Ansible-Playbooks oder einfache Docker-Deployments, lassen sich meist nicht direkt auf Kubernetes übertragen.",[367,761,762,765,766,769],{},[371,763,764],{"href":214},"Helm"," ist für die meisten Teams der pragmatischste Einstieg. Charts erlauben es, ",[371,767,768],{"href":118},"Kubernetes-Manifeste zu parametrisieren"," und wiederverwendbar zu machen. Für mehrere Umgebungen (Dev, Staging, Prod) lassen sich Werte-Dateien pro Umgebung definieren.",[503,771,775],{"className":772,"code":773,"language":774,"meta":508,"style":508},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","helm upgrade --install my-service .\u002Fcharts\u002Fmy-service \\\n  -f values.production.yaml \\\n  --namespace team-backend\n","bash",[391,776,777,799,809],{"__ignoreMap":508},[512,778,779,783,786,789,792,795],{"class":514,"line":515},[512,780,782],{"class":781},"sBMFI","helm",[512,784,785],{"class":546}," upgrade",[512,787,788],{"class":546}," --install",[512,790,791],{"class":546}," my-service",[512,793,794],{"class":546}," .\u002Fcharts\u002Fmy-service",[512,796,798],{"class":797},"sTEyZ"," \\\n",[512,800,801,804,807],{"class":514,"line":526},[512,802,803],{"class":546},"  -f",[512,805,806],{"class":546}," values.production.yaml",[512,808,798],{"class":797},[512,810,811,814],{"class":514,"line":534},[512,812,813],{"class":546},"  --namespace",[512,815,816],{"class":546}," team-backend\n",[367,818,819,822],{},[371,820,821],{"href":222},"Kustomize"," ist eine Alternative ohne eigene Templating-Sprache, besonders nützlich wenn du näher an nativen Kubernetes-Manifesten bleiben willst.",[367,824,825],{},"GitOps mit Argo CD oder Flux sorgt dafür, dass der Cluster-Zustand immer mit dem Git-Repository übereinstimmt. Änderungen werden nicht manuell angewendet, sondern durch Commits getriggert. Das verbessert Nachvollziehbarkeit und reduziert menschliche Fehler bei Deployments erheblich.",[376,827,829],{"id":828},"wann-eine-paas-die-bessere-wahl-ist","Wann eine PaaS die bessere Wahl ist",[367,831,832],{},"Kubernetes ist mächtig, bringt aber operativen Aufwand mit sich. Cluster-Management, Upgrades, Sicherheitspatches, Netzwerkkonfiguration sowie der Aufbau und Betrieb des Observability-Stacks sind ein nicht triviales Paket an Aufgaben, das in vielen Teams neben der eigentlichen Produktentwicklung laufen muss.",[367,834,835,836,839,840],{},"Wenn Kubernetes-Infrastruktur nicht zum Kerngeschäft gehört, lohnt sich die Frage, ob eine PaaS-Plattform die bessere Wahl ist. Plattformen wie lowcloud abstrahieren genau diese Schicht: Teams bekommen eine deploybare Kubernetes-Umgebung über eine ",[371,837,838],{"href":30},"DevOps-as-a-Service-Plattform",", ohne selbst Cluster-Administratoren zu werden. ",[371,841,842],{"href":130},"Was ist eine PaaS",[367,844,845],{},"Das bedeutet nicht, dass jede Anwendung auf eine PaaS gehört. Wer spezifische Anforderungen an die Cluster-Konfiguration hat oder Kubernetes-Expertise bereits im Team vorhanden ist, fährt oft gut damit, den Cluster selbst zu betreiben. Aber für Teams, die schnell produktiv sein wollen, ohne sich in Kubernetes-Infrastruktur zu verlieren, ist eine PaaS eine legitime und oft unterschätzte Option.",[847,848],"hr",{},[367,850,851],{},"lowcloud ist eine Kubernetes-basierte PaaS-Plattform für Teams, die ihre Anwendungen zuverlässig und mit wenig Overhead betreiben wollen. Wenn du Kubernetes-Komplexität reduzieren möchtest, ohne auf die Kontrolle über deine Deployments zu verzichten, ist lowcloud einen Blick wert.",[853,854,855],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":508,"searchDepth":526,"depth":526,"links":857},[858,859,863,868,872,873],{"id":378,"depth":526,"text":379},{"id":400,"depth":526,"text":401,"children":860},[861,862],{"id":430,"depth":534,"text":431},{"id":455,"depth":534,"text":456},{"id":490,"depth":526,"text":491,"children":864},[865,866,867],{"id":497,"depth":534,"text":498},{"id":607,"depth":534,"text":608},{"id":631,"depth":534,"text":632},{"id":661,"depth":526,"text":662,"children":869},[870,871],{"id":714,"depth":534,"text":715},{"id":742,"depth":534,"text":743},{"id":755,"depth":526,"text":756},{"id":828,"depth":526,"text":829},"2026-04-06","Kubernetes-Migration gelingt nur mit der richtigen Vorbereitung. Wir zeigen die häufigsten Fehler, eine schrittweise Vorgehensweise und wann eine PaaS die bessere Wahl ist.","md",{"src":878},"\u002Fimages\u002Fblog\u002Fkubernetes-migration.jpg","2026-04-13",{},true,{"title":177,"description":875},"icojYDk0DxuvhOPA6PdDFg0M9h6PqIKDorn9JeduH30",[885,887],{"title":173,"path":174,"stem":175,"description":886,"children":-1},"Was cloud-agnostische Architektur wirklich bedeutet, wo Vendor Lock-in entsteht und welche Rolle Kubernetes und Datensouveränität spielen.",{"title":181,"path":182,"stem":183,"description":888,"children":-1},"Erfahre, wie du Docmost auf deinem eigenen Server mit Docker Compose und Traefik als Reverse Proxy selbst hostest. Eine Schritt-für-Schritt-Anleitung für DSGVO-konforme Dokumentation.",1776079527813]