
Il 29 gennaio, il comitato tecnico dell'organizzazione CNCF (Cloud Native Computing Foundation), che si occupa di Kubernetes, Prometheus e altri prodotti open source del mondo dei container e del cloud native, ha approvato il progetto Rook tra i suoi membri. È un'ottima occasione per approfondire questo "orchestratore di sistemi di storage distribuito in Kubernetes."
Cos'è Rook?
È un software scritto in Go ( con licenza open source Apache License 2.0) progettato per fornire ai sistemi di storage funzionalità automatizzate che li rendono autogestiti, autoscalabili e autoripristinabili.Per raggiungere questo obiettivo, Rook automatizza (per i sistemi di storage utilizzati in ambienti Kubernetes): distribuzione, bootstrapping, configurazione, provisioning, scaling, aggiornamenti, migrazioni, recupero da guasti, monitoraggio e gestione delle risorse.
Il progetto è attualmente in fase alfa e si specializza nell'orchestrazione di un sistema di storage distribuito Ceph all'interno di cluster Kubernetes. Gli autori dichiarano anche di avere piani per supportare altri sistemi di storage, ma questo non avverrà nei prossimi aggiornamenti.
Componenti e architettura tecnica
Alla base del funzionamento di Rook all'interno di Kubernetes c'è un operatore speciale (maggiori dettagli sugli Operator di Kubernetes sono disponibili in ), che automatizza la configurazione dello storage e ne implementa il monitoraggio.
Quindi, l'operatore Rook si presenta come un contenitore che include tutto il necessario per l'implementazione e la successiva gestione dello storage. Tra i compiti dell'operatore ci sono:
- la creazione di un DaemonSet per i demoni di storage Ceph () con un semplice cluster RADOS;
- la creazione di pod per il monitoraggio di Ceph (con , che verificano lo stato del cluster; di solito vengono implementati tre esemplari per garantire il quorum, e se uno di essi fallisce, viene avviato un nuovo esemplare);
- la gestione dei CRD () per il , , (insiemi di risorse e servizi per gestire richieste HTTP eseguendo PUT/GET per oggetti, compatibili con le API S3 e Swift), così come ;
- l'inizializzazione dei pod per avviare tutti i servizi necessari;
- la creazione di agenti Rook.
Gli agenti Rook sono rappresentati da pod separati che vengono implementati su ogni nodo di Kubernetes. Lo scopo dell'agente è la configurazione del plugin , che offre supporto per i volumi di storage in Kubernetes. L'agente gestisce l'operatività dello storage: collega i dispositivi di storage di rete, monta i volumi, formatta il file system, ecc.

Posizione e ruolo dei componenti Rook nel contesto generale del cluster Kubernetes
Rook offre tre tipi di storage:
- (Block,
StorageClass) — monta lo storage su un singolo pod; - (Object,
ObjectStore) — accessibile all'interno e all'esterno del cluster Kubernetes (tramite API S3); - (Shared File System,
Filesystem) — file system che può essere montato in lettura e scrittura da più pod.
I componenti interni di Rook comprendono:
- Mons — pod per il monitoraggio Ceph (con i già menzionati ceph-mon);
- OSDs — pod con demoni ceph-osd (Object Storage Daemons);
- MGR — pod con il demone (Ceph Manager), che fornisce funzionalità di monitoraggio e interfacce per sistemi esterni (monitoraggio/gestione);
- RGW (opzionale) — pod con storage oggetti;
- MDS (opzionale) — pod con file system condiviso.

Tutti i demoni Rook (Mons, OSDs, MGR, RGW, MDS) sono compilati in un unico binario (rook), eseguito in un contenitore.
Per una breve introduzione al progetto Rook può essere utile anche questa piccola (12 diapositive) di Bassam Tabbara (CTO di Quantum Corp).
Utilizzo di Rook
L'operatore Rook supporta completamente Kubernetes versione 1.6 e superiori (e, parzialmente, il rilascio più vecchio di K8s — 1.5.2). Il suo installazione in è così che appare:
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlIn aggiunta, per l'operatore Rook è disponibile , il che consente di eseguire l'installazione anche in questo modo:
helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook Ci sono alcune (ad esempio, è possibile disabilitare il supporto , se questa funzionalità non è utilizzata nel tuo cluster), che vengono passate a helm install attraverso il parametro --set key=value[,key=value] (o mantenerle in un file YAML separato e passarle tramite -f values.yaml).
Dopo aver installato l'operatore Rook e avviato i pod con i suoi agenti, rimane da creare il cluster Rook stesso, la cui configurazione più semplice appare come segue (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: 1024Nota: si deve prestare particolare attenzione all'attributo dataDirHostPath, il cui valore corretto è necessario per mantenere il cluster dopo i riavvii. In caso venga utilizzato come luogo di archiviazione permanente dei dati, gli autori raccomandano di avere almeno 5 GB di spazio libero su disco in questa directory per Rook sui nodi Kubernetes.
Rimane dunque da creare effettivamente un cluster dalla configurazione e assicurarsi che i pod siano stati creati nel cluster (nello spazio dei nomi 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 5mAggiornamento del cluster Rook (alla nuova versione) — questa procedura richiede l'aggiornamento sequenziale di tutti i suoi componenti in un ordine specifico, e può essere avviata solo dopo essersi assicurati che l'installazione corrente di Rook sia completamente "sana". Una guida dettagliata passo passo per l'aggiornamento dalla versione 0.5.0 a 0.5.1 di Rook è disponibile in .
Lo scorso novembre nel blog di Rook confronto prestazioni con EBS. I suoi risultati meritano attenzione, e per dirla brevemente, sono i seguenti:


Prospettive
Lo stato attuale di Rook è alpha, e l'ultima grande release fino ad oggi è , rilasciata a novembre 2017 (la correzione attuale è — uscita il 14 dicembre). Già nella prima metà del 2018 sono attesi i rilasci di versioni più mature: beta e stabile (ufficialmente pronte per l'uso in produzione).
Secondo del progetto, gli sviluppatori hanno una visione dettagliata dello sviluppo di Rook in almeno due prossime release: 0.7 (la sua prontezza nel tracker di GitHub al 60%) e 0.8. Tra i cambiamenti attesi ci sono il passaggio del supporto per Ceph Block e Ceph Object allo stato beta, la provisionazione dinamica dei volumi per CephFS, un sistema di logging avanzato, aggiornamenti automatizzati del cluster, supporto per snapshot dei volumi.
L'accettazione di Rook tra (per ora nella fase iniziale — "inception-level", — insieme a e ) è una sorta di garanzia del crescente interesse per il prodotto. Quanto si affermerà nel mondo delle applicazioni cloud sarà più chiaro dopo il rilascio delle versioni stabili, che sicuramente porteranno Rook a nuovi "tester" e utenti.
P.S.
Leggete anche nel nostro blog:
- «»;
- «»;
- «»;
- «»;
- «».
Fonte: habr.com
