Nach einem Jahr des Experimentierens mit Docker Swarm und Mesos haben wir uns für Kubernetes entschieden. Version 1.5 führte StatefulSets (Beta) und PodDisruptionBudgets ein – genau das, was wir für unsere Enterprise-Deployments brauchten.
Warum Kubernetes und nicht Docker Swarm¶
Docker Swarm ist einfach. Zu einfach. Für ein paar Container in einem einzelnen Projekt ist es großartig, aber sobald Sie RBAC, Namespace-Isolation, einen benutzerdefinierten Scheduler oder Federation über mehrere Cluster benötigen, reicht Swarm nicht aus. Und genau da befanden wir uns.
Kubernetes hat eine steilere Lernkurve – das ist eine Tatsache. Aber die Community dahinter ist riesig – Google, Red Hat, CoreOS und Dutzende anderer Unternehmen investieren darin. Für uns ist das ein wichtiges Signal der Stabilität. Wir wollen keine Infrastruktur auf einem Projekt aufbauen, das in zwei Jahren niemand mehr pflegt.
Was Version 1.5 gebracht hat¶
StatefulSets (Beta). Früher PetSets – endlich eine Möglichkeit, Stateful Workloads zu betreiben. Datenbanken, Message Broker, Elasticsearch-Cluster. Jeder Pod bekommt einen stabilen Hostnamen und Persistent Volume. Für uns entscheidend – wir haben Kunden, die PostgreSQL im Cluster brauchen.
PodDisruptionBudgets. Sie sagen Kubernetes: “Es müssen immer mindestens 2 Replicas meines Services laufen.” Der Cluster respektiert diese Einschränkung dann bei Rolling Updates oder Node Drains. Endlich Wartung ohne Downtime.
Cluster Federation. Alpha, aber vielversprechend. Stellen Sie sich vor: ein einziger kubectl-Befehl, der eine Anwendung in Clustern in Prag und Frankfurt deployt. Für Disaster Recovery und latenzbasiertes Routing wird das ein Game-Changer.
Unsere Test-Topologie¶
Wir haben einen Drei-Knoten-Cluster auf Bare-Metal-Servern in unserem Rechenzentrum aufgesetzt. Drei Master mit etcd im HA-Modus, drei Worker-Knoten. Networking über Calico – wir brauchen Network Policies zur Isolation von Mandantenumgebungen.
$ kubectl get nodes
NAME STATUS AGE
master1 Ready 45d
master2 Ready 45d
master3 Ready 45d
worker1 Ready 44d
worker2 Ready 44d
worker3 Ready 44d
Installation über kubeadm – überraschend schmerzfrei. Zuvor hatten wir die manuelle Einrichtung nach Kelsey Hightowers “Kubernetes The Hard Way” versucht, was lehrreich war, aber für die Produktion wollen wir Automatisierung.
Erster Produktions-Workload¶
Als Pilotprojekt wählten wir den internen Monitoring-Stack – Prometheus + Grafana. Ein idealer Kandidat: stateless (Grafana), semi-stateful (Prometheus mit 30-Tage-Retention), und wenn er ausfällt, verliert niemand Geld.
Das Deployment verlief reibungslos. Das Helm Chart für den Prometheus-Stack funktionierte nahezu out of the box; wir mussten nur die Storage Class für unsere Ceph Volumes anpassen. Grafana-Dashboards wurden als ConfigMaps definiert – Infrastructure as Code, wie es sein sollte.
Wo uns Kubernetes negativ überrascht hat¶
Debugging. Wenn etwas nicht funktioniert, müssen Sie sich durch kubelet-, kube-proxy-, kube-controller-manager- und kube-scheduler-Logs arbeiten… Das Troubleshooting-Tooling ist noch schwach. kubectl describe pod ist Ihr bester Freund, aber manchmal reicht es nicht.
Ressourcenmanagement. Requests und Limits richtig zu setzen, ist eine Kunst. Limits zu niedrig – OOM Kill. Limits zu hoch – verschwendete Ressourcen.
Upgrades. Das Upgrade von 1.4 auf 1.5 war nicht völlig trivial. etcd-Upgrade, API-Server-Flags haben sich geändert. Zero-Downtime-Upgrade des Clusters selbst ist immer noch eine Herausforderung.
Plan für 2017¶
Bis Ende Q2 wollen wir mindestens 5 interne Services auf Kubernetes haben. Bis Jahresende planen wir, das erste Kundenprojekt auf einer Container-Plattform zu deployen. Wir verfolgen Kubernetes 1.6 (RBAC als Beta!) und das kommende EKS von Amazon.
Kubernetes ist die Zukunft unserer Infrastruktur¶
Es ist kein einfaches Tool und erfordert eine Investition in Know-how. Aber für ein Unternehmen unserer Größe, das Dutzende von Services für verschiedene Kunden verwaltet, ist Container-Orchestrierung eine Notwendigkeit. Kubernetes ist die beste Wahl auf dem Markt.
Brauchen Sie Hilfe bei der Implementierung?
Unsere Experten helfen Ihnen bei Design, Implementierung und Betrieb. Von der Architektur bis zur Produktion.
Kontaktieren Sie uns