Kelsey Hightower (Staff Developer Advocate, Google Cloud Platform) hat im November 2017 folgenden Tweet veröffentlicht:

Tatsächlich ist es relativ einfach, ein Kubernetes-Cluster aufzusetzen. Aber reif für einen Produktionseinsatz ist ein solches Cluster noch lange nicht und funktional wird man ebenfalls schnell an Grenzen stoßen.

Natürlich gibt es inzwischen viele Möglichkeiten unkompliziert ein Kubernetes-Cluster für Entwicklungszwecke oder Experimente zu nutzen. In Docker Desktop lässt sich z.B. ein lokales Kubernetes-Cluster mit wenigen Klicks aktivieren.

Wenn es allerdings darum geht, Software, die integraler Bestandteil von wichtigen Geschäftsprozesse ist, zu betreiben, steigen die Anforderungen nicht-fachlicher Art schnell. In solchen Fällen genügt es nicht, auf irgendeine Art schnell ein Cluster zu erzeugen.

Aus diesem Grund setzen viele Unternehmen auf Managed Services der großen Cloud-Provider z.B. Azure Kubernetes Services (AKS) oder Google Kubernetes Engine (GKE).

Ich arbeite seit 2018 in einem Projekt, das ein großes Ökosystem unterschiedlichster Systeme, die vorher auf virtuellen Servern betrieben wurden, in Richtung solcher Managed Kubernetes Cluster eines der großen Cloud-Provider migriert.

Inzwischen sind mir zwei Dinge klar geworden:

  1. Kubernetes ist auch nur eine andere Betriebsplattform, um Software zu betreiben. Sie hat bestimmte Vor- und Nachteile, sie löst so manches Problem, insbesondere für große Systeme, erzeugt aber auch eine Menge an Herausforderungen.
  2. Kubernetes alleine genügt nicht. Es gibt wie auf anderen Betriebsplattformen, viele Aspekte zu berücksichtigen und Lösungen zu schaffen.

Insofern hat Kelsey Hightower recht. Kubernetes ist eine Plattform, um Plattformen zu bauen.

Die Cloudbetreiber bieten für viele der Aspekte, für die Kubernetes von Haus aus keine Lösung anbietet, eine Lösungen an. Fast immer werden Flexibilität, Elastizität und Geschwindigkeit aber mit höheren Kosten erkauft.

Während der Migration von der auf virtuellen Maschinen basierenden Infrastruktur hin zu Kubernetes stellte sich mir ziemlich bald die Frage, ob es möglich ist, Kubernetes auf Bare-Metal-Servern oder auf Basis eines IaaS-Providers professionell zu betreiben. Zunächst bestand die Frage nur darin, ob und bis zu welchem Level es überhaupt möglich ist, und später rückte dann mehr und mehr auch die Frage nach der Kosteneffizienz in den Vordergrund.

Ziemlich schnell war mir das reine Nachdenken nicht mehr genug und ich begann zu recherchieren, ob jemand ähnliche Fragen bereits bearbeitet und konkrete Ansätze dokumentiert hat. Tatsächlich gibt es eine Vielzahl von Artikeln, Blogposts, Scripten und Fragmenten. Einen umfassenden und zufriedenstellenden Ansatz habe ich allerdings nicht gefunden und begann, viele Ansätze zu kombinieren, Scripte zu schreiben und zu dokumentieren.

Inzwischen habe ich einiges an Erfahrung gesammelt, viele Ansätze ausprobiert und auch einige Scripte selbst geschrieben. Die Erkenntnisse und den Code werde ich in einer Reihe von Blogposts in den nächsten Monaten hier und auf Github veröffentlichen.

Ich werde immer wieder externe Quellen verlinken und versuchen auch die ein oder andere Grundlage zu vermitteln. Dennoch richten sich die Blogposts nicht an absolute Kubernetes-Einsteiger.

Geplant sind Blogposts zu folgenden Themen:

  1. Vorbemerkungen - Verschiedene Hinweise und Bemerkungen vorab
  2. Überblick - Ein Überblick und einige Worte zur Strukturierung
  3. Basisinfrastruktur - Erzeugung der Basisinfrastruktur
  4. Basisinfrastruktur - Konfiguration der Basisinfrastruktur
  5. Setup von Kubernetes - Konfiguration und Erzeugung eines Kubernetes-Clusters
  6. SSL-Zertifikate / Cert Manager - Installation und Konfiguration der Komponente Cert-Manager zur automatischen Erzeugung von SSL-Zertifikaten für Ingresses
  7. Persistenz im Kubernetes-Cluster - Mit Rook und Ceph zu Persistent Volume Claims (PVC)
  8. Datenbanken - Mit KubeDB zur Postgres Datenbank im Kubernetes-Cluster
  9. Backup und Recovery - Backups von Datenbanken und Persistent Volume Claims mit Stash
  10. Monitoring & Altering - mit Grafana und Prometheus
  11. Ein erstes Fazit