Rook: un archivio dati self-service per Kubernetes

Rook: un archivio dati self-service per Kubernetes

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, annunciato sull'accettazione del progetto Rook nei loro ranghi. Un'eccellente opportunità per conoscere questo "orchestratore di storage distribuito in Kubernetes".

Che tipo di Torre?

Rook è un software scritto in Go (distribuito da 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 questo articolo), 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 (cefalo-osd) con un semplice cluster RADOS;
  • creazione di pod per il monitoraggio Ceph cefalo-mon, 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 (Definizioni di risorse personalizzate) per se stesso classe, pool di stoccaggio, negozi di oggetti (set di risorse e servizi per servire richieste HTTP che eseguono PUT/GET su oggetti - sono compatibili con S3 e Swift API)e file system;
  • 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 Volume flessibile, 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.

Rook: un archivio dati self-service per Kubernetes
Posizione e ruolo dei componenti Rook nello schema generale del cluster Kubernetes

Rook offre tre tipi di archiviazione:

  1. bloccare (Bloccare, StorageClass) — monta l'accumulo su un unico focolare;
  2. oggetto (Oggetto, ObjectStore) - disponibile all'interno e all'esterno del cluster Kubernetes (tramite API S3);
  3. file system condiviso (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 cef-mons (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.

Rook: un archivio dati self-service per Kubernetes

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). presentazione 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 в scenario più semplice Ecco come si presenta:

cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yaml

Inoltre, l'operatore Rook è preparato Grafico del timone, 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 opzioni di configurazione (ad esempio, puoi disabilitare il supporto RBAC, 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: 1024

Nota: 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          5m

Aggiornamento 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 documentazione del progetto.

Lo scorso novembre sul blog di Rook è stato pubblicato сравнение produttività con EBS. I suoi risultati sono degni di attenzione e, in sintesi, sono i seguenti:

Rook: un archivio dati self-service per Kubernetes
Rook: un archivio dati self-service per Kubernetes

prospettive

Lo stato attuale di Rook è alpha e l'ultima versione principale fino ad oggi lo è versione di 0.6, pubblicato nel novembre 2017 (correzione attuale - v0.6.2 – è 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 tabella di marcia 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 stimata 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 Progetti CNCF (finora nella fase iniziale - "livello iniziale" - alla pari con collegato и CoreDNS) è 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

Acquista hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting web affidabile con protezione DDoS, server VPS e VDS | ProHoster