
Il 29 gennaio il comitato tecnico della CNCF (Cloud Native Computing Foundation), l'organizzazione dietro Kubernetes, Prometheus e altri prodotti Open Source del mondo dei container e del cloud nativo, sull'accettazione del progetto Rook nei loro ranghi. Un'eccellente opportunità per conoscere questo "orchestratore di storage distribuito in Kubernetes".
Che tipo di Torre?
è un software scritto in Go ( sotto la licenza gratuita Apache 2.0), progettato per fornire data warehouse con funzioni automatizzate che li rendono autogestione, auto-dimensionamento e auto-guarigione. Per fare ciò, Rook automatizza (per gli archivi dati utilizzati in un ambiente Kubernetes): distribuzione, bootstrap, configurazione, provisioning, ridimensionamento, aggiornamenti, migrazioni, ripristino di emergenza, monitoraggio e gestione delle risorse.
Il progetto è in fase alpha ed è specializzato nell'orchestrazione del sistema di storage distribuito Ceph nei cluster Kubernetes. Gli autori annunciano anche piani per supportare altri sistemi di storage, ma ciò non accadrà nelle prossime versioni.
Componenti e dispositivo tecnico
Il lavoro di Rook all'interno di Kubernetes si basa su un operatore speciale (abbiamo scritto di più sugli operatori Kubernetes in ), che automatizza la configurazione dello storage e ne implementa il monitoraggio.
Così, Operatore torre sembra essere un contenitore che contiene tutto il necessario per la distribuzione e la successiva manutenzione del repository. Le responsabilità dell'operatore includono:
- creazione di un DaemonSet per i daemon di archiviazione Ceph () con un semplice cluster RADOS;
- creazione di pod per il monitoraggio Ceph (с , controllando lo stato del cluster; per il quorum, nella maggior parte dei casi vengono distribuite tre copie e, se qualcuna di esse cade, ne sorge una nuova);
- gestione dei CRD () per se stesso , , (set di risorse e servizi per servire richieste HTTP che eseguono PUT/GET su oggetti - sono compatibili con S3 e Swift API)e ;
- inizializzare i pod per avviare tutti i servizi necessari;
- creazione di agenti Rook.
Agenti di Rook sono rappresentati da pod separati distribuiti su ciascun nodo Kubernetes. Lo scopo dell'agente è la configurazione del plugin , che fornisce supporto per i volumi di archiviazione in Kubernetes. L'agente implementa il funzionamento dello storage: connette i dispositivi di storage di rete, monta i volumi, formatta il file system, ecc.

Posizione e ruolo dei componenti Rook nello schema generale del cluster Kubernetes
Rook offre tre tipi di archiviazione:
- (Bloccare,
StorageClass) — monta l'accumulo su un unico focolare; - (Oggetto,
ObjectStore) - disponibile all'interno e all'esterno del cluster Kubernetes (tramite API S3); - (File system condiviso,
Filesystem) è un file system che può essere montato per leggere e scrivere da più pod.
Gli interni della Torre includono:
- Mons — pod per il monitoraggio di Ceph (con il già citato ceph-mon);
- OSD - pod con daemon ceph-osd (Object Storage Daemons);
- MGR - baccelli con un demone (Ceph Manager), che fornisce ulteriori funzionalità di monitoraggio e interfacce per sistemi esterni (monitoraggio/controllo);
- RGV (Opzionale) - pod con archiviazione oggetti;
- MDS (Opzionale) - Pod con file system condiviso.

Tutti i demoni Rook (Mons, OSDs, MGR, RGW, MDS) sono compilati in un singolo binario (rook) in esecuzione in un contenitore.
Per una breve introduzione al progetto Rook può essere utile anche questo breve (12 slide). da Bassam Tabbara (CTO presso Quantum Corp).
Azionare la Torre
L'operatore Rook supporta completamente Kubernetes versione 1.6 e successive (e, in parte, la versione precedente di K8 - 1.5.2). suo installazione в Ecco come si presenta:
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlInoltre, l'operatore Rook è preparato , grazie al quale l'installazione può essere effettuata in questo modo:
helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook Piccola quantità disponibile (ad esempio, puoi disabilitare il supporto , se questa funzionalità non viene utilizzata nel cluster), a cui vengono passati helm install tramite parametro --set key=value[,key=value] (o archiviare in un file YAML separato e trasmetterlo tramite -f values.yaml).
Dopo aver installato l'operatore Rook e avviato i pod con i suoi agenti, non resta che creare il cluster Rook stesso, la cui configurazione più semplice è simile a questa (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: particolare attenzione dovrebbe essere prestata all'attributo dataDirHostPath, il cui valore corretto è necessario per salvare il cluster dopo il riavvio. Per i casi in cui viene utilizzata come posizione di archiviazione permanente per i dati Rook sugli host Kubernetes, gli autori consigliano di avere almeno 5 GB di spazio libero su disco in questa directory.
Tutto ciò che resta è creare effettivamente il 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 Il cluster Rook (fino a una nuova versione) è una procedura che in questa fase richiede l'aggiornamento sequenziale di tutti i suoi componenti in una determinata sequenza, e puoi avviarla solo dopo esserti assicurato che l'attuale installazione di Rook sia completamente “sana” stato. Istruzioni dettagliate passo passo utilizzando l'esempio dell'aggiornamento della versione Rook da 0.5.0 a 0.5.1 possono essere trovate in .
Lo scorso novembre sul blog di Rook сравнение produttività con EBS. I suoi risultati sono degni di attenzione e, in sintesi, sono i seguenti:


prospettive
Lo stato attuale di Rook è alpha e l'ultima versione principale fino ad oggi lo è , pubblicato nel novembre 2017 (correzione attuale - – è uscito il 14 dicembre). Già nella prima metà del 2018 sono attesi i rilasci delle versioni più mature: beta e stabile (ufficialmente pronte per l'uso in produzione).
Secondo progetto, gli sviluppatori hanno una visione dettagliata per lo sviluppo di Rook almeno nelle prossime due versioni: 0.7 (la sua disponibilità è nel tracker GitHub come 60%) e 0.8. Tra le modifiche previste figurano il trasferimento del supporto per Ceph Block e Ceph Object allo stato della versione beta, il provisioning dinamico dei volumi per CephFS, un sistema di logging avanzato, aggiornamenti automatizzati dei cluster, supporto per snapshot per i volumi.
Portare la Torre nel Numero (finora nella fase iniziale - "livello iniziale" - alla pari con и ) è una sorta di garanzia di un crescente interesse per il prodotto. Come riuscirà ad affermarsi nel mondo delle applicazioni cloud diventerà più chiaro una volta rilasciate le versioni stabili, che porteranno sicuramente nuovi tester e utenti a Rook.
PS
Leggi anche sul nostro blog:
- «";
- «";
- «";
- «";
- «'.
Fonte: habr.com
