
Op 29 januari heeft het technische comité van de CNCF (Cloud Native Computing Foundation), verantwoordelijk voor Kubernetes, Prometheus en andere open source producten uit de wereld van containers en cloud native, het project Rook aanvaard. Een uitstekende gelegenheid om dit ‘orkestrator van gedistribueerde gegevensopslag in Kubernetes’ beter te leren kennen.
Wat is Rook?
— dit is software geschreven in Go ( onder de vrije Apache License 2.0), bedoeld om gegevensopslag te voorzien van geautomatiseerde functies die deze zelfbeheerd, automatisch schaalbaar en zelfherstellend maken.Hiervoor automatiseert Rook (voor gegevensopslag die in een Kubernetes-omgeving wordt toegepast): de implementatie, bootstrapping, configuratie, provisioning, schaling, updates, migraties, herstel na storingen, monitoring en resource management.
Het project is in de alfa-fase en is gespecialiseerd in de orkestratie van het gedistribueerde opslag systeem Ceph in Kubernetes-clusters. De auteurs hebben ook plannen aangekondigd om andere opslagsystemen te ondersteunen, maar dit zal niet in de komende releases gebeuren.
Componenten en technische opzet
De werking van Rook binnen Kubernetes is gebaseerd op een speciale operator (meer over Kubernetes Operators schreven we in ), die de configuratie van de opslag automatiseert en zijn monitoring uitvoert.
So, De Rook-operator wordt gepresenteerd als een container die alles bevat wat nodig is voor de implementatie en het onderhoud van de opslag. Tot de taken van de operator behoren:
- het creëren van een DaemonSet voor de Ceph-opslag demon () met een eenvoudige RADOS-cluster;
- het creëren van pods voor de monitoring van Ceph (met , die de status van het cluster controleren; voor quorum worden doorgaans drie exemplaren geïmplementeerd, en bij uitval van een van hen wordt er een nieuwe opgestart);
- het beheren van CRDs () voor de , , (sets van bronnen en services voor het afhandelen van HTTP-verzoeken, die PUT/GET voor objecten uitvoeren — ze zijn compatibel met S3 en Swift API), evenals ;
- de initialisatie van pods voor het starten van alle benodigde services;
- het creëren van Rook-agenten.
Rook-agenten worden gepresenteerd als aparte pods die op elke Kubernetes-node worden geïmplementeerd. De functie van de agent is de configuratie van de , dat ondersteuning biedt voor opslagvolumes in Kubernetes. De agent beheert de opslag: verbindt opslagnetwerkapparaten, monteert volumes, formatteert bestandssystemen, enzovoort.

De plaats en rol van Rook-componenten in het algemene schema van het Kubernetes-cluster
Rook biedt drie soorten opslag:
- (Block,
StorageClass) - monteert opslag aan een enkele pod; - (Object,
ObjectStore) - toegankelijk binnen en buiten het Kubernetes-cluster (via de S3 API); - (Shared File System,
Filesystem) - bestandssysteem dat kan worden gemonteerd voor lezen en schrijven vanuit meerdere pods.
De interne structuur van Rook omvat:
- Mons - pods voor Ceph-monitoring (met de eerder genoemde ceph-mon);
- OSDs - pods met ceph-osd-daemons (Object Storage Daemons);
- MGR - pods met de daemon (Ceph Manager), die extra monitoringmogelijkheden en interfaces voor externe systemen biedt (monitoring/beheer);
- RGW (optioneel) - pods met objectopslag;
- MDS (optioneel) - pods met een gedeeld FS.

Alle Rook-daemons (Mons, OSDs, MGR, RGW, MDS) zijn samengevoegd in één binaire uitvoerbare bestand (rook), dat in een container wordt uitgevoerd.
Voor een kort overzicht van het Rook-project kan deze kleine (12 dia's) presentatie van Bassam Tabbara (CTO bij Quantum Corp) nuttig zijn.
De werking van Rook
De Rook-operator ondersteunt volledig Kubernetes versie 1.6 en hoger (en gedeeltelijk de oudere release K8s - 1.5.2). Zijn installatie in ziet er als volgt uit:
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlBovendien is er een , waardoor de installatie ook kan plaatsvinden op deze manier:
helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook Er zijn een aantal (bijvoorbeeld, ondersteuning kan worden uitgeschakeld , als deze functie niet in uw cluster wordt gebruikt), die worden doorgegeven in helm install via de parameter --set key=value[,key=value] (of opgeslagen in een apart YAML-bestand en doorgegeven — via -f values.yaml).
Nadat de Rook-operator is geïnstalleerd en de pods met zijn agents zijn gestart, moet de Rook-cluster zelf worden aangemaakt, waarvan de eenvoudigste configuratie eruit ziet als volgt (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: 1024Opmerking: bijzondere aandacht moet worden besteed aan het attribuut dataDirHostPath, waarvan de correcte waarde noodzakelijk is om de cluster na herstarts te behouden. Voor gevallen waarin het als permanente opslag voor gegevens wordt gebruikt, bevelen de auteurs van Rook aan om ten minste 5 GB vrije schijfruimte in deze directory te hebben.
Daarna blijft het om een cluster te creëren uit de configuratie en ervoor te zorgen dat de pods zijn aangemaakt in het cluster (in de namespace 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 De procedure voor het updaten van de Rook-cluster (tot de nieuwe versie) is op dit moment een proces dat vereist dat alle componenten in een bepaalde volgorde één voor één worden geüpdatet, en men kan hiermee alleen beginnen nadat men zich ervan heeft verzekerd dat de huidige installatie van Rook volledig 'gezond' is. Een gedetailleerde stapsgewijze instructie voor het bijwerken van Rook van versie 0.5.0 naar 0.5.1 is te vinden in .
In november vorig jaar heeft de Rook-blog vergelijking prestatie met EBS. De resultaten zijn opmerkelijk, en samengevat zijn ze als volgt:


Vooruitzichten
De huidige status van Rook is alpha, en de laatste grote release tot nu toe is , uitgebracht in november 2017 (de actuele correctie is — uitgebracht op 14 december). In de eerste helft van 2018 worden meer volwassen versies verwacht: bèta- en stabiele versies (officieel klaar voor gebruik in productie).
Volgens van het project, de ontwikkelaars hebben een gedetailleerde visie voor de ontwikkeling van Rook in ieder geval in twee komende releases: 0.7 (die klaarheid in de GitHub-tracker is als 60 %) en 0.8. Onder de verwachte veranderingen zijn de conversie van de ondersteuning voor Ceph Block en Ceph Object naar bèta-status, dynamische provisioning van volumes voor CephFS, een uitgebreid loggingsysteem, geautomatiseerde clusterupdates, en ondersteuning voor snapshots voor volumes.
De opname van Rook in het aantal (momenteel nog in de allervroegste fase — 'inception-level', — naast en is een soort garantie voor de groeiende belangstelling voor het product. Hoe goed het zich in de wereld van cloudapplicaties zal vestigen, wordt beter duidelijk na de lancering van stabiele versies, die ongetwijfeld nieuwe 'testers' en gebruikers voor Rook zullen aantrekken.
P.S.
Lees ook op onze blog:
- «»;
- «»;
- «»;
- «»;
- «».
Bron: habr.com
