
Am 29. Januar hat das technische Komitee der CNCF (Cloud Native Computing Foundation), das fĂŒr Kubernetes, Prometheus und andere Open-Source-Produkte aus der Welt der Container und cloud-native Technologien verantwortlich ist, das Projekt Rook in seine Reihe aufgenommen. Ein hervorragender Anlass, um diesen âOrchestrierer von verteilten Datenspeichersystemen in Kubernetesâ nĂ€her kennenzulernen.
Was ist Rook?
â ist eine in Go geschriebene Software ( unter der offenen Lizenz Apache License 2.0), die dazu dient, Datenspeichern automatisierte Funktionen zu geben, die sie selbstverwaltend, selbstskalierend und sich selbstheilendmachen. Zu diesem Zweck automatisiert Rook (fĂŒr Datenspeicher, die in Kubernetes-Umgebungen eingesetzt werden): Bereitstellung, Bootstrapping, Konfiguration, Provisionierung, Skalierung, Aktualisierungen, Migrationen, Wiederherstellung nach AusfĂ€llen, Monitoring und Ressourcenmanagement.
Das Projekt befindet sich in der Alpha-Phase und spezialisiert sich auf die Orchestrierung des verteilten Speichersystems Ceph in Kubernetes-Clustern. Die Autoren geben auch PlĂ€ne zur UnterstĂŒtzung anderer Speichersysteme bekannt, jedoch wird dies nicht in den kommenden Versionen geschehen.
Komponenten und technische Struktur
Im Kern der Funktionsweise von Rook innerhalb von Kubernetes steht ein spezieller Operator (mehr zu Kubernetes Operators haben wir in )beschrieben), der die Konfiguration des Speichers automatisiert und sein Monitoring durchfĂŒhrt.
Also, Der Rook-Operator prĂ€sentiert sich als Container, der alles Notwendige fĂŒr die Bereitstellung und anschlieĂende Wartung des Speichers enthĂ€lt. Zu den Aufgaben des Operators gehören:
- Erstellung eines DaemonSets fĂŒr die Ceph-SpeicherdĂ€monen () mit einem einfachen RADOS-Cluster;
- Erstellung von Pods fĂŒr das Ceph-Monitoring (mit , die den Zustand des Clusters ĂŒberwachen; fĂŒr die Mehrheitsentscheidung werden in der Regel drei Instanzen bereitgestellt, und bei Ausfall einer davon wird eine neue hochgefahren);
- Verwaltung von CRDs () fĂŒr den , , (Sets von Ressourcen und Diensten zur Bearbeitung von HTTP-Anfragen, die PUT/GET fĂŒr Objekte ausfĂŒhren â sie sind mit dem S3- und Swift-API kompatibel), sowie ;
- Initialisierung von Pods zum Start aller benötigten Dienste;
- Erstellung von Rook-Agenten.
Rook-Agenten werden als eigenstĂ€ndige Pods dargestellt, die auf jedem Kubernetes-Knoten bereitgestellt werden. Die Aufgabe des Agents ist die Konfiguration des Plugins , das die UnterstĂŒtzung von Speichervolumen in Kubernetes gewĂ€hrleistet. Der Agent fĂŒhrt den Betrieb des Speichers durch: Er verbindet netzwerkbasierte SpeichergerĂ€te, mountet Volumen, formatiert Dateisysteme usw.

Die Position und Rolle der Rook-Komponenten im Gesamtschema des Kubernetes-Clusters
Rook bietet drei Arten von Speicher an:
- (Block,
StorageClass) â verbindet den Speicher mit einem einzelnen Pod; - (Object,
ObjectStore) â innerhalb und auĂerhalb des Kubernetes-Clusters verfĂŒgbar (ĂŒber S3 API); - (Shared File System,
Dateisystem) â ein Dateisystem, das aus mehreren Pods lesend und schreibend gemountet werden kann.
Die interne Struktur von Rook umfasst:
- Mons â Pods zur Ăberwachung von Ceph (mit bereits erwĂ€hnten ceph-mon);
- OSDs â Pods mit ceph-osd-Demonen (Object Storage Daemons);
- MGR â Pods mit dem Demon (Ceph Manager), der zusĂ€tzliche Ăberwachungsfunktionen und Schnittstellen fĂŒr externe Systeme (Ăberwachung/Management) bereitstellt;
- RGW (optional) â Pods mit Objektspeicher;
- MDS (optional) â Pods mit gemeinsamem FS.

Alle Rook-Daemons (Mons, OSDs, MGR, RGW, MDS) sind in einem einzigen Binary kompiliert (rook), das in einem Container ausgefĂŒhrt wird.
FĂŒr eine kurze Vorstellung des Rook-Projekts kann auch dieses kleine (12 Folien) Material von Bassam Tabbara (CTO bei Quantum Corp) hilfreich sein.
Betrieb von Rook
Der Rook-Operator unterstĂŒtzt vollstĂ€ndig Kubernetes-Versionen 1.6 und höher (und teilweise die Ă€ltere K8s-Version 1.5.2). Seine Installation in sieht so aus:
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlDarĂŒber hinaus wurde fĂŒr den Rook-Operator , was die Installation auch folgendermaĂen ermöglichen kann:
helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook Es gibt eine kleine Anzahl von (z.B. kann die UnterstĂŒtzung von , wenn diese Funktion in Ihrem Cluster nicht verwendet wird, deaktiviert werden), die ĂŒber helm install mit dem Parameter --set key=value[,key=value] (oder in einer separaten YAML-Datei speichern und ĂŒber -f values.yaml).
Nach der Installation des Rook-Operators und dem Start der Pods mit seinen Agenten bleibt es, den Rook-Cluster selbst zu erstellen, dessen einfachste Konfiguration wie folgt aussieht (rook-cluster.yaml):
apiVersion: v1
kind: Namespace
metadata:
name: rook
---
apiVersion: rook.io/v1alpha1
kind: Cluster
metadata:
name: rook
namespace: rook
spec:
dataDirHostPath: /var/lib/rook
storage:
useAllNodes: true
useAllDevices: false
storeConfig:
storeType: bluestore
databaseSizeMB: 1024
journalSizeMB: 1024Hinweis: Besonders zu beachten ist das Attribut dataDirHostPath, dessen korrektes Wert fĂŒr die Erhaltung des Clusters nach Neustarts notwendig ist. In FĂ€llen, in denen es als permanenter Speicherort fĂŒr Daten in Rook auf Kubernetes-Hosts verwendet wird, empfehlen die Autoren, in diesem Verzeichnis mindestens 5 GB freien Speicherplatz zu haben.
Es bleibt lediglich, ein Cluster aus der Konfiguration zu erstellen und sicherzustellen, dass die Pods im Cluster erstellt wurden (im Namensraum rook):
kubectl create -f rook-cluster.yaml
kubectl -n rook get pod
NAME READY STATUS RESTARTS AGE
rook-api-1511082791-7qs0m 1/1 Running 0 5m
rook-ceph-mgr0-1279756402-wc4vt 1/1 Running 0 5m
rook-ceph-mon0-jflt5 1/1 Running 0 6m
rook-ceph-mon1-wkc8p 1/1 Running 0 6m
rook-ceph-mon2-p31dj 1/1 Running 0 6m
rook-ceph-osd-0h6nb 1/1 Running 0 5mUpgrade des Rook-Clusters (auf die neue Version) â dies ist ein Verfahren, das in diesem Stadium die schrittweise Aktualisierung aller Komponenten in einer bestimmten Reihenfolge erfordert, und es kann erst begonnen werden, wenn Sie sich vergewissert haben, dass die aktuelle Installation von Rook vollstĂ€ndig âgesundâ ist. Eine ausfĂŒhrliche Schritt-fĂŒr-Schritt-Anleitung am Beispiel der Aktualisierung von Rook Version 0.5.0 auf 0.5.1 finden Sie in .
Im November letzten Jahres wurde im Rook-Blog der Vergleich der Leistung mit EBS. Die Ergebnisse sind bemerkenswert und, um es kurz zu machen, sind sie wie folgt:


Aussichten
Der aktuelle Status von Rook ist Alpha, und die letzte groĂe Version, die bisher veröffentlicht wurde, ist , die im November 2017 veröffentlicht wurde (das aktuelle Update â â wurde am 14. Dezember veröffentlicht). Bereits in der ersten HĂ€lfte des Jahres 2018 werden die Releases reiferer Versionen erwartet: Betas und eine stabile (offiziell bereit fĂŒr den Einsatz in der Produktion).
Laut des Projekts haben die Entwickler eine detaillierte Vision zur Weiterentwicklung von Rook, mindestens in zwei kommenden Releases: 0.7 (seine Fertigstellung wird im GitHub-Tracker Die Aufnahme von Rook in die
CNCF-Projekte linkerd und ) ist eine Art Garantie fĂŒr das wachsende Interesse an dem Produkt. Wie stabil es sich in der Welt der Cloud-Anwendungen etablieren wird, wird nach der Veröffentlichung stabiler Versionen besser klar werden, die Rook ohne Zweifel neue âTesterâ und Benutzer bringen werden.
P.S.
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «»;
- «»;
- «».
Quelle: habr.com
