Gemeinsam genutzter Kubernetes-Cluster

Gemeinsam genutzter Kubernetes-Cluster

Wir planen unsere neue Kubernetes-Cluster-Infrastruktur und ich habe einige Fragen. Derzeit haben wir einen größeren Cluster, an dem Umgebungen (Entwicklung, Staging, Produktion) und mehrere Teams arbeiten. Am Anfang war es nur ein „POC“, eine Demo – aber Leute, ihr wisst ja: Nichts hält länger als temporäre Lösungen. Bei diesem Setup haben wir einige allgemeine Probleme und bei unserer Zielarchitektur planen wir, einige dieser Probleme zu beheben.

Ich hoffe, dass einige von Ihnen Wissen/Erfahrungen weitergeben können.

Zunächst einmal: Ein Cluster pro Anwendung ist keine Lösung. Die Anwendungen sind wirklich klein und jedes Team hat etwa 3-5 Anwendungen und benötigt etwa 6-20 GB RAM über alle Knoten pro Umgebung. Ein einzelner Cluster ist also keine wirkliche Option.

Wir planen einen Cluster pro Umgebung: Entwicklung, Staging (QA), Produktion und vielleicht für den Betrieb einen Demo-Cluster. Alles ist und wird automatisiert und IaC mit Terraform + Ansible (Kubespray) sein. Jeder Team-/Anwendungsbereich erhält natürlich einen einzigen Namespace.

Unsere Fragen/Probleme:

Überwachung Normalerweise verwenden wir Prometheus und Grafana, um die Ressourcennutzung von Pods/Clustern zu überwachen. Neu sollte auch eine zentrale Protokollierung enthalten (wir testen gerade Lösungen). Für das Infra-Team ist das in Ordnung, aber die Infra möchte nicht auf Anwendungsebene überwachen.

Gibt es eine funktionierende Möglichkeit, den App-Teams eine Überwachung bereitzustellen? Zum Beispiel: Sie (das App-Team) können Warnmeldungen für Protokolle, CPU, RAM-Nutzung einrichten, was auch immer Sie benötigen. „Sie müssen nur dieses Helm-Diagramm ausrollen.“ In einer großartigen Welt würde ich jedem Team (also jedem Namespace) seinen eigenen Überwachungsstapel zur Verfügung stellen, sodass wir auch Speicher und RAM+CPU-Nutzung begrenzen können und jedes Team die „bestellten“ Ressourcen verwenden kann (wenn das Team also viele Protokolle/Überwachungsanforderungen hat, muss es mehr Ressourcen „bestellen“). Basierend auf diesem Ansatz können sie auch die Software auswählen, die am besten passt.

Eine andere Lösung könnte sein, dass das Infra-Team eine zentrale Überwachungs-/Protokolllösung einrichtet und den Zugriff beschränkt. App-Team A sollte nicht auf Protokolle/CPU-Auslastung/RAM-Auslastung/Festplattenauslastung von App-Team B zugreifen können. Aber ich sehe keine Möglichkeit, das wirklich gut umzusetzen.

Es kann eine Option sein, dass das Infrastrukturteam diesen Stack installiert – aber alles, was ich gesehen habe, ist: Wenn ich einen Überwachungs-Stack in einem bestimmten Namespace installiere, benötigt der Stack Administratorzugriff auf den Cluster. Das ist meiner Meinung nach nicht schön.

Liege ich falsch?

Lagerung Wir haben einen Gluster-Speicher und möchten ihn behalten. Wenn ein Team eine Festplatte benötigt, fügen wir ein „persistentes Glusterfs-Volume“ mit einer bestimmten Größe und einem StorageClassName wie „team1-disk5“ hinzu. Darauf basierend kann das Team ein PVC erstellen und den Speicher verwenden. Funktioniert in der Vergangenheit einwandfrei.

Ist das eine gute Lösung? Irgendwelche anderen Ideen?

Ich denke, das ist für den Moment alles. Nur diese beiden Fragen. Irgendeine Idee, die mich in die richtige Richtung bringt?

Danke!

verwandte Informationen