À l'iniziu di stu mese, u 3 di maghju, hè stata annunziata una liberazione maiò di un "sistema di gestione per u almacenamentu di dati distribuitu in Kubernetes" - Rook 1.0.0. Più di un annu fà avemu digià publicatu Panoramica generale di Rook. Allora ci hè statu dumandatu di parlà di a so sperienza aduprà in pratica - è avà, ghjustu à tempu per una tappa cusì significativa in a storia di u prugettu, simu felici di sparte e nostre impressioni accumulate.
In corta, Rook hè un set uperatori per Kubernetes, chì piglianu u cuntrollu tutale di l'implementazione, a gestione, a ricuperazione automatica di e soluzioni di almacenamiento di dati cum'è Ceph, EdgeFS, Minio, Cassandra, CockroachDB.
Vita: Trà i cambiamenti significativi in a versione Rook 1.0.0 in relazione à Ceph, pudemu nutà u supportu per Ceph Nautilus è a capacità di utilizà NFS per CephFS o RGW buckets. Ciò chì si distingue trà l'altri hè a maturazione di u supportu EdgeFS à u livellu beta.
Dunque, in questu articulu avemu:
Rispondemu à a quistione di quali vantaghji vedemu in l'usu di Rook per implementà Ceph in un cluster Kubernetes;
Avemu da sparte a nostra sperienza è impressioni di l'usu di Rook in a produzzione;
Dicemu perchè dicemu "Sì!" à Rook, è di i nostri piani per ellu.
Accuminciamu cù cuncetti generali è teoria.
"Aghju un vantaghju di una Rook!" (jocatore scunnisciutu)
Unu di i vantaghji principali di Rook hè chì l'interazzione cù i magazzini di dati hè realizatu attraversu i meccanismi Kubernetes. Questu significa chì ùn avete più bisognu di copià i cumandamenti per cunfigurà Ceph da u fogliu in a cunsola.
- Vulete implementà CephFS in un cluster? Basta à scrive un schedariu YAML!
- Chì ? Vulete ancu implementà un magazinu d'ogetti cù l'API S3? Basta à scrive un secondu schedariu YAML!
Rook hè creatu secondu tutte e regule di un operatore tipicu. L'interazzione cun ellu si faci cù l'usu CRD (definizioni di risorse persunalizate), in quale avemu descrizzione di e caratteristiche di l'entità Ceph chì avemu bisognu (Siccomu questu hè l'unica implementazione stabile, per difettu questu articulu parlerà di Ceph, salvu s'ellu ùn hè esplicitamente dichjaratu altrimenti). Sicondu i paràmetri specificati, l'operatore eseguirà automaticamente i cumandamenti necessarii per a cunfigurazione.
Fighjemu i specifichi cù l'esempiu di creà un Object Store, o piuttostu - CephObjectStoreUser.
I paràmetri indicati in u listinu sò abbastanza standard è pocu bisognu di cumenti, ma vale a pena prestu una attenzione particulari à quelli attribuiti à e variàbili di mudelli.
U schema generale di u travagliu vene à u fattu chì avemu "ordine" risorse attraversu un schedariu YAML, per quale l'operatore eseguisce i cumandamenti necessarii è ci rende un sicretu "micca vera" cù quale pudemu travaglià più. (vede sottu). E da e variàbili elencate sopra, u cumandamentu è u nome secretu seranu compilati.
Chì tippu di squadra hè questu? Quandu crea un utilizatore per u almacenamentu di l'ughjettu, l'operatore Rook in u pod farà u seguente:
radosgw-admin user create --uid="rook-user" --display-name="{{ .Values.s3.username }}"
U risultatu di eseguisce stu cumandamentu serà una struttura JSON:
Keys - quali applicazioni future anu bisognu à accede à u almacenamentu di l'ughjettu via l'API S3. L'operatore Rook gentilmente li selezziunà è li mette in u so namespace in a forma di un sicretu cù u nome rook-ceph-object-user-{{ $.Values.s3.crdName }}-{{ $.Values.s3.username }}.
Per utilizà e dati da questu sicretu, aghjunghje solu à u cuntinuu cum'è variabili di l'ambiente. Per esempiu, daraghju un mudellu per Job, in quale creamu automaticamente buckets per ogni ambiente d'utilizatore:
Tutte l'azzioni listate in questu Job sò state realizate in u quadru di Kubernetes. E strutture descritte in i schedari YAML sò almacenati in un repository Git è riutilizati parechje volte. Videmu questu cum'è un grande plus per l'ingegneri DevOps è u prucessu CI / CD in generale.
Felice cù Rook è Rados
Utilizà a combinazione Ceph + RBD impone certe restrizioni à i volumi di muntagna à pods.
In particulare, u spaziu di nomi deve cuntene un sicretu per accede à Ceph in modu chì l'applicazioni stateful funzionanu. Hè bè s'è vo avete 2-3 ambienti in i so namespaces: pudete andà è cupià u sicretu manualmente. Ma chì se per ogni funzione un ambiente separatu cù u so propiu namespace hè creatu per i sviluppatori?
Avemu risoltu stu prublema noi stessi usendu shell-operatore, chì hà copiatu automaticamente sicreti à novi spazii di nomi (un esempiu di un tali ganciu hè descrittu in stu articulu).
Tuttavia, quandu si usa Rook, stu prublema ùn esiste micca. U prucessu di muntatura si faci utilizendu i so propii drivers basatu nantu Flexvolume o CSI (ancora in fase beta) è per quessa ùn hà micca bisognu di secreti.
Rook risolve automaticamente parechji prublemi, chì ci incita à aduprà in novi prughjetti.
Assediu di Rook
Cumpitemu a parte pratica implementendu Rook è Ceph in modu chì pudemu fà i nostri esperimenti. Per fà più faciule per assaltà sta torre impregnable, i sviluppatori anu preparatu un pacchettu Helm. Scaricamu:
In u schedariu rook-ceph/values.yaml pudete truvà parechje paràmetri diffirenti. A più impurtante hè di specificà e tolerazioni per l'agenti è a ricerca. Avemu descrittu in dettagliu ciò chì u mecanismu di taints / tollerazioni pò esse usatu per stu articulu.
In corta, ùn vulemu chì i pods di l'applicazioni di u cliente si trovanu nantu à i stessi nodi cum'è i dischi di almacenamiento di dati. U mutivu hè simplice: questu modu u travagliu di l'agenti Rook ùn affetterà micca l'applicazione stessa.
Allora, apre u schedariu rook-ceph/values.yaml cù u vostru editore preferitu è aghjunghje u seguente bloccu à a fine:
Verificate u statutu di Ceph - aspettate di vede HEALTH_OK:
$ kubectl -n ${ROOK_NAMESPACE} exec $(kubectl -n ${ROOK_NAMESPACE} get pod -l app=rook-ceph-operator -o name -o jsonpath='{.items[0].metadata.name}') -- ceph -s
À u listessu tempu, verificate chì i pods cù l'applicazione cliente ùn finiscinu micca in i nodi riservati à Ceph:
$ kubectl -n ${APPLICATION_NAMESPACE} get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName
Inoltre, cumpunenti supplementari ponu esse cunfigurati cum'è desiderate. Più dettagli nantu à elli sò indicati in ducumentazione. Per l'amministrazione, ricumandemu fermamente di installà u dashboard è u toolbox.
Rook and hooks: Rook hè abbastanza per tuttu?
Comu pudete vede, u sviluppu di Rook hè in piena. Ma ci sò sempre prublemi chì ùn ci permettenu micca di abbandunà completamente a cunfigurazione manuale di Ceph:
No Rook Driver ùn pò micca metrica d'esportazione nantu à l'usu di blocchi muntati, chì ci priva di surviglianza.
Flexvolume è CSI nun sacciu comu cambià a dimensione di volumi (in uppusizione à u stessu RBD), cusì Rook hè privatu di un strumentu utile (è qualchì volta criticamente necessariu!).
Rook ùn hè ancu flexible cum'è Ceph regular. Se vulemu cunfigurà a piscina per i metadati CephFS per esse almacenati in SSD, è i dati stessi per esse guardati in HDD, avemu bisognu di registrà gruppi separati di dispusitivi in carte CRUSH manualmente.
Malgradu u fattu chì rook-ceph-operator hè cunsideratu stabile, ci sò attualmente alcuni prublemi quandu aghjurnà Ceph da a versione 13 à 14.
scuperti
"In questu momentu, Rook hè chjusu da u mondu esternu da i peoni, ma credemu chì un ghjornu hà da ghjucà un rolu decisivu in u ghjocu!" (citazione inventata apposta per questu articulu)
U prughjettu Rook hà senza dubbitu guadagnatu i nostri cori - cridemu chì [cù tutti i so pro è i contra] meriteghja sicuramente a vostra attenzione.
I nostri piani futuri si riducenu à fà rook-ceph un modulu per addun-operatore, chì farà u so usu in i nostri numerosi clusters Kubernetes ancu più simplice è cunvene.