Er ist kein dRook.

Angesichts der wachsenden Beliebtheit von Rook möchte ich ĂŒber seine Fallstricke und die Probleme sprechen, die Sie auf Ihrem Weg erwarten.

Über mich: Erfahrung in der Verwaltung von Ceph seit Version Hammer, GrĂŒnder der Community t.me/ceph_de in Telegram.

Um nicht unbegrĂŒndet zu sein, werde ich auf die am Hub veröffentlichten (laut Ranking) BeitrĂ€ge ĂŒber Probleme mit Ceph verweisen. Mit den meisten dieser Probleme bin ich ebenfalls konfrontiert worden. Links zu den verwendeten Materialien am Ende des Beitrags.

Im Artikel ĂŒber Rook erwĂ€hnen wir Ceph nicht ohne Grund – Rook ist im Grunde Ceph, das in Kubernetes verpackt ist, was bedeutet, dass es alle seine Probleme erbt. Mit den Problemen von Ceph fangen wir an.

Vereinfachung des Cluster-Managements

Einer der Vorteile von Rook ist die bequeme Verwaltung von Ceph ĂŒber Kubernetes.

Allerdings enthĂ€lt Ceph ĂŒber 1000 Parameter zur Konfiguration, wĂ€hrend wir ĂŒber Rook nur einen kleineren Teil von ihnen anpassen können.

Beispiel fĂŒr Luminous
> ceph daemon mon.a config show | wc -l
1401

Rook wird als bequemer Weg positioniert, Ceph zu installieren und zu aktualisieren.
Mit der Installation von Ceph ohne Rook gibt es keine Probleme – ein Ansible-Playbook wird in 30 Minuten geschrieben, aber beim Aktualisieren gibt es massenhaft Probleme.

Zitat aus dem Krok-Beitrag

Beispiel: Fehlfunktion der Crush-Tunables nach dem Upgrade von Hammer auf Jewel

> ceph osd crush show-tunables
{


„straw_calc_version“: 1,
„allowed_bucket_algs“: 22,
„profile“: „unknown“,
„optimal_tunables“: 0,


}

Aber selbst innerhalb kleinerer Versionen gibt es Probleme.

Beispiel: Update 12.2.6, das den Cluster in den Zustand health err und bedingt beschÀdigte PG versetzt
ceph.com/releases/v12-2-8-released

Nicht aktualisieren, warten und testen? Aber wir nutzen doch Rook auch fĂŒr die Bequemlichkeit der Updates.

Schwierigkeit der Disaster-Recovery im Cluster mit Rook

Beispiel: OSD fĂ€llt mit Fehlern zusammen. Sie vermuten, dass das Problem in einem der Parameter in der Konfiguration liegt, möchten die Konfiguration fĂŒr einen bestimmten Daemon Ă€ndern, können es jedoch nicht, weil Sie Kubernetes und DaemonSet haben.

Es gibt keine Alternative. ceph tell osd.Num injectargs funktioniert nicht – das OSD ist schließlich ausgefallen.

Schwierigkeit beim Debuggen

FĂŒr einige Einstellungen und Leistungstests muss man direkt mit dem Socket des OSD-Daemons verbinden. Im Fall von Rook muss man zunĂ€chst den richtigen Container finden, dann in ihn eintreten, das fehlende Debugging-Tool entdecken und sehr enttĂ€uscht sein.

Schwierigkeit mit dem sequentiellen Hochfahren von OSDs

Beispiel: OSD fÀllt wegen OOM aus, es beginnt eine Re-Balancierung, danach fallen die nÀchsten aus.

Lösung: OSDs nacheinander hochfahren, auf das vollstÀndige Hochlaufen im Cluster warten und die nÀchsten hochfahren. (Mehr im Bericht Ceph. Anatomie einer Katastrophe).

Bei baremetal-Installationen geschieht dies einfach von Hand. Bei Rook und einem OSD pro Node gibt es keine besonderen Probleme. Probleme beim nacheinander Hochfahren treten auf, wenn > 1 OSD pro Node vorhanden ist.

NatĂŒrlich sind sie lösbar, aber wir bringen Rook ein, um es zu vereinfachen, und erhalten stattdessen Komplikationen.

Schwierigkeit bei der Festlegung der Limits fĂŒr Ceph-Demons.

FĂŒr baremetal-Installationen ist es relativ einfach, die benötigten Ressourcen fĂŒr den Cluster zu berechnen – es gibt Formeln und Studien. Bei schwachen CPUs mĂŒssen Sie dennoch eine Reihe von Leistungstests durchfĂŒhren und verstehen, was Numa ist, aber das ist immer noch einfacher als bei Rook.

Bei Rook mĂŒssen Sie neben den Speichergrenzen, die Sie berechnen können, auch eine CPU-Grenze festlegen.

Hier werden Sie gefordert, Leistungstests durchzufĂŒhren. Bei zu niedrigen Limits erhalten Sie einen langsamen Cluster, bei unlimitierten Limits wird die CPU wĂ€hrend der Rebalancierung stark beansprucht, was sich negativ auf Ihre Anwendungen in Kubernetes auswirkt.

Probleme mit der Netzwerkintegration v1.

FĂŒr Ceph wird empfohlen, ein 2x10 Gb-Netzwerk zu verwenden. Eins fĂŒr den Clientverkehr, eines fĂŒr die administrativen BedĂŒrfnisse von Ceph (Rebalancierung). Wenn Sie mit Ceph auf baremetal leben, ist diese Trennung einfach einzurichten. Wenn Sie mit Rook arbeiten, kann diese Netzwerktrennung problematisch sein, da nicht jede Cluster-Konfiguration es ermöglicht, einem Pod zwei verschiedene Netzwerke zuzuweisen.

Probleme mit der Netzwerkintegration v2.

Wenn Sie sich gegen die Trennung der Netzwerke entscheiden, wird der Ceph-Verkehr beim Rebalancieren die gesamte Bandbreite auslasten und Ihre Anwendungen in Kubernetes werden hĂ€ngen bleiben oder abstĂŒrzen. Sie können die Rebalancierungsrate von Ceph reduzieren, aber dann riskieren Sie durch die lĂ€ngere Rebalancierung, dass der zweite Node aufgrund von Disk-Fehlern oder OOM aus dem Cluster fĂ€llt, was zu einem garantierten Read-Only-Zustand fĂŒr den Cluster fĂŒhrt.

Lange Rebalancierung – lange Verzögerungen fĂŒr Anwendungen.

Zitat aus dem Beitrag Ceph. Anatomie einer Katastrophe.

Leistung des Testclusters:

Ein Schreibvorgang mit einer GrĂ¶ĂŸe von 4 KB benötigt 1 ms, Leistung 1000 Operationen/Sekunde in 1 Thread.

Ein Vorgang mit einer GrĂ¶ĂŸe von 4 MB (ObjektgrĂ¶ĂŸe) benötigt 22 ms, Leistung 45 Operationen/Sekunde.

Daher bleibt der Cluster, wenn eine der drei DomĂ€nen ausfĂ€llt, eine Zeit lang in einem degradierten Zustand, und die HĂ€lfte der heißen Objekte verteilt sich auf verschiedene Versionen, sodass die HĂ€lfte der SchreibvorgĂ€nge mit einer erzwungenen Wiederherstellung beginnt.

Die Zeit fĂŒr die erzwungene Wiederherstellung wird ungefĂ€hr berechnet – SchreibvorgĂ€nge auf das degradierte Objekt.

Zuerst lesen wir 4 MB in 22 ms, schreiben 22 ms, und anschließend schreiben wir in 1 ms 4 KB tatsĂ€chlicher Daten. Insgesamt also 45 ms fĂŒr einen Schreibvorgang auf ein degradierte Objekt auf SSD, wo die regulĂ€re Leistung bei 1 ms lag – ein Performance-RĂŒckgang um das 45-fache.

Je höher der Prozentsatz der degradierten Objekte, desto schlimmer wird es.

Die Geschwindigkeit des Rebalancings ist entscheidend fĂŒr das korrekte Funktionieren des Clusters.

Spezifische Servereinstellungen fĂŒr Ceph

Ceph benötigt möglicherweise spezifisches Host-Tuning.

Beispiel: sysctl-Einstellungen und JumboFrame, einige dieser Einstellungen können sich negativ auf Ihr Payload auswirken.

Die tatsÀchliche Notwendigkeit von Rook bleibt fraglich.

Wenn Sie in der Cloud sind, haben Sie Speicher von Ihrem Cloud-Anbieter, was viel bequemer ist.

Wenn Sie auf Ihren eigenen Servern sind, ist die Verwaltung von Ceph ohne Kubernetes einfacher.

Mieten Sie Server bei einem kostengĂŒnstigen Hosting-Anbieter? Dann wartet viel Spaß mit dem Netzwerk, den Verzögerungen und der Bandbreite auf Sie, was sich eindeutig negativ auf Ceph auswirkt.

Insgesamt: Die Implementierung von Kubernetes und die Implementierung von Speicher sind unterschiedliche Aufgaben mit unterschiedlichen Anforderungen und unterschiedlichen Lösungsmöglichkeiten – diese zu vermischen, bedeutet, einen potenziell gefĂ€hrlichen Trade-off zugunsten des einen oder anderen zu machen. Diese Lösungen im Planungsprozess zu verbinden, wird sehr schwierig sein, und es gibt auch die Betriebsphase.

Literaturliste:

Beitrag #1 Aber Sie sagen Ceph
 ist er wirklich so gut?
Beitrag #2 Ceph. Anatomie einer Katastrophe

Quelle: habr.com

60GB SSD 8Gb DDR4