Produktübersicht Managed Kubernetes
Produktübersicht
Das teuto.net Managed Kubernetes Produkt basiert auf der eigens entwickelten “t8s-engine” auf Basis der Kubernetes Cluster API.
Verantwortungen
teuto.net
Die t8s-engine/teuto.net ist für folgende Komponenten verantwortlich und garantiert die Funktionalität/Verfügbarkeit:
- Control Plane
- Wir stellen die Control Plane der Workload Cluster (kube-apiserver, etcd, kube-scheduler, kube-controller-manager) und sind für die Verfügbarkeit dieser Komponenten verantwortlich.
- Worker/Compute Plane
- Wir betreiben eine Anzahl von OpenStack Servern, die als Worker/Compute Plane fungieren.
- Wir behalten uns vor diese Server, z.b. bei Updates, auszutauschen. Dabei werden wir PodDisruptionBudgets beachten und nicht die konfigurierte Anzahl an Servern unterschreiten.
- Networking
- Die Cluster werden mit funktionierendem Networking (CNI) ausgestattet. Wir sind dafür verantwortlich, dass dieses funktioniert.
- Der Cluster wird mit funktionierendem DNS per CoreDNS ausgestattet. Wir sind dafür verantwortlich, dass dieses verfügbar ist.
- OpenStack / Cloud Integration
- Loadbalancer
- Wir installieren den
openstack-cloud-controller-manager
der auf Wunsch Services mittype: Loadbalancer
mit einem Octavia Loadbalancer austattet. Wir sind dafür verantwortlich, dass die Loadbalancer funktionieren und der Service die Requests empfängt. - Siehe Abschnitt Ingress für mehr Infos.
- Wir installieren den
- Volumes
- Wir installieren das
cinder-csi-plugin
und erstellen passendeStorageClasses
. Damit ist es möglich Persistent Volumes anzulegen. Wir sind für die Verfügbarkeit dieser Persistent Volumes und descinder-csi-plugin
verantwortlich.
- Wir installieren das
- Loadbalancer
- Ingress
- Wenn nicht anders gewünscht, wird in den Cluster ein
nginx-ingress
undcert-manager
installiert, um das Onboarding zu erleichtern. Wir sind dabei für die Verfügbarkeit dieser beiden Komponenten verantwortlich. Wir sind explizit nicht für die Verfügbarkeit descert-manager
Issuers (Let’s Encrypt) verantwortlich.
- Wenn nicht anders gewünscht, wird in den Cluster ein
- Updates
- Wir sind dafür verantwortlich neue Kubernetes Versionen und gepatchte OS Images bereitzustellen. Wir werden uns an die offizielle Support Period von Kubernetes halten.
- Monitoring
- Um unsere Verantwortungen umsetzen zu können, werden wir die Workload Cluster überwachen. Dieses Monitoring gilt explizit nur für unsere Verantwortungen.
Kunden
- Worker/Compute Plane
- Aufgrund der Flüchtigkeit einzelner Nodes ist es wichtig, dass Ihre Anwendungen resilient gegenüber diesem Verhalten sind. Sie sind dafür verantwortlich diese Resilienz sicherzustellen. teuto.net empfiehlt dafür, die Best Practices zu befolgen.
Wenn Sie überprüfen möchten, ob Ihre Anwendungen den Anforderungen an die Resilienz entspricht, können Sie mit teuto.net einen Test vereinbaren, bei dem wir einzelne oder alle Nodes gemäß unseres Update Prozesses austauschen.
- Aufgrund der Flüchtigkeit einzelner Nodes ist es wichtig, dass Ihre Anwendungen resilient gegenüber diesem Verhalten sind. Sie sind dafür verantwortlich diese Resilienz sicherzustellen. teuto.net empfiehlt dafür, die Best Practices zu befolgen.
- Updates
- Patch Releases (z.b. Kubernetes 1.23.3 -> 1.23.4)
- Für Kubernetes Patch Releases und andere kleinere Updates, wie zum Beispiel neue Kernel Versionen, wird teuto.net Sie über geplante Wartungstermine informieren. Sie haben an der Stelle eine Mitwirkungspflicht, können aber den Zeitpunkt in Abstimmung mit teuto.net verschieben.
- Feature Releases (z.b. Kubernetes 1.22.x -> 1.23.y)
- Feature Releases enthalten oft Breaking Changes in der Kubernetes API, zum Beispiel werden bestimmte API Resourcen nicht mehr angeboten. teuto.net wird Ihnen diese Updates anbieten und Sie müssen dem Update explizit zustimmen, bevor es durchgeführt wird.
- Falls Sie dem Update nicht zustimmen, bevor die von Ihnen verwendete Kubernetes Version nicht mehr von teuto.net unterstützt wird (siehe “Updates” im Abschnitt “Verantwortungen > teuto.net”), enden die oben aufgezählten Verantwortungen von teuto.net und Unterstützung kann nur noch auf einer Best-Effort Basis gewährt werden.
- Patch Releases (z.b. Kubernetes 1.23.3 -> 1.23.4)
- Monitoring
- Sie sind für die Überwachung Ihrer eigenen Anwendungen verantwortlich.
Limitierung
Flüchtigkeit einzelner Nodes
Einzelne Nodes (Control- und Computeplane) können jederzeit durch uns ausgetauscht werden. Dies passiert zum Beispiel um Updates des Betriebssystems oder der verwendeten Kubernetes Software einzuspielen, oder damit wir Wartungsarbeiten an der unterliegenden Cloud-Infrastruktur (Hypervisor) durchführen können.
Wir verwenden dabei den normalen Node drain Prozess, welcher darauf achtet, dass die Pods wie konfiguriert gestoppt werden, und alle PodDisruptionBudgets
weiterhin beachtet werden.
Reservierte Resourcen
Für den stabilen Betrieb des Kubernetes Clusters ist es nötig, dass teuto.net auf jedem Node weitere Software laufen lässt, zum Beispiel um Monitoring Daten zu erheben. Für diese Zwecke steht nur ein Teil der Resourcen der Nodes zur freien Verfügung.
Best Practices
Um übliche Probleme zu verhindern, die die Verfügbarkeit Ihrer Anwendung beinträchtigen, haben wir hier eine Liste an “Best Practices” erstellt, die Sie für Ihre Anwendungen umsetzen sollten.
Replicas anstatt einfacher Pods benutzen
Um sicherzustellen, dass Pods an anderer Stelle neugestartet werden, sollten keine Pod
Resourcen direkt erstellt werden. Stattdessen sollten Deployments
, StatefulSets
oder andere Workload Resourcen verwendet werden.
Resourcen Requests und Limits
Damit der Kubernetes Scheduler abschätzen kann, ob ein Pod auf einen Node passt, vergleicht er die Resourcen Requests und Limits mit den anderen Pods auf dem Node, sowie mit den verfügbaren Resourcen des Nodes.
Um sicherzustellen, dass alle Anwendungen wie erwartet laufen, sollten die Requests und Limits für jede Workload Resource konfiguriert sein. Mehr Details gibt es in der Kubernetes Dokumentation “Managing Resources for Containers”.
PodDisruptionBudget
Mit Hilfe von PodDisruptionBudgets
kann für eine Anwendung konfiguriert werden, wie viele Replicas zu jedem Zeitpunkt mindestens verfügbar sein müssen. Damit wird sichergestellt, dass z.B. während eines Kubernetes Upgrades, wenn alle Nodes einmal ausgetauscht werden, dauerhaft genügend Instanzen der Anwendung laufen.
Falls es nicht möglich ist, ein PodDisruptionBudget
sinnvoll zu erfüllen, zum Beispiel wenn im PodDisruptionBudget
maxUnavailable: 0
angegeben ist, kann es sein, dass teuto.net dieses PodDisruptionBudget
bei einem Rollout nicht beachtet.
Sonstiges
Proxy-Cache
Um das Netzwerk-Volumen zu viel verwendeten Container-Registries zu reduzieren, setzt teuto.net einen Proxy-Cache ein. Dies hilft auch, um ein Rate-Limiting durch die einzelnen Registries zu vermeiden. Dieser Proxy-Cache wird automatisch konfiguriert und funktioniert völlig transparent. Es brauchen keine Image-URLs angepasst werden.
Es wird ein Proxy-Cache für Container-Images der folgenden (öffentlichen) Image-Repositories eingerichtet:
docker.io
gcr.io
ghcr.io
hub.docker.com
index.docker.io
k8s.gcr.io
quay.io
registry.gitlab.com
registry.opensource.zalan.do
registry.teuto.io
registry.k8s.io