Rook - samouslužna pohrana podataka za Kubernetes

Rook - samouslužna pohrana podataka za Kubernetes

Dana 29. siječnja, tehnički odbor CNCF-a (Cloud Native Computing Foundation), organizacije koja stoji iza Kubernetesa, Prometheusa i drugih Open Source proizvoda iz svijeta kontejnera i native u oblaku, najavio o prihvaćanju projekta Vrana u svoje redove. Izvrsna prilika da upoznate ovog "distribuiranog skladišnog orkestratora u Kubernetesu."

Kakav Rook?

Vrana je softver napisan u Go (distribuira pod besplatnom licencom Apache 2.0), osmišljen kako bi skladištima podataka omogućio automatizirane funkcije koje ih čine samoupravljanje, samoskaliranje i samoiscjeljivanje. Kako bi to učinio, Rook automatizira (za pohrane podataka koji se koriste u Kubernetes okruženju): implementaciju, pokretanje, konfiguraciju, pružanje, skaliranje, ažuriranja, migracije, oporavak od katastrofe, nadzor i upravljanje resursima.

Projekt je u alfa fazi i specijaliziran je za orkestriranje Ceph distribuiranog sustava za pohranu u Kubernetes klasterima. Autori također najavljuju planove za podršku drugim sustavima za pohranu podataka, ali to se neće dogoditi u sljedećim izdanjima.

Sastavni dijelovi i tehnički uređaj

Rookov rad unutar Kubernetesa temelji se na posebnom operatoru (više smo pisali o Kubernetes operatorima u ovaj članak), koji automatizira konfiguraciju pohrane i implementira njezin nadzor.

Dakle, Top operater Čini se da je spremnik koji sadrži sve što je potrebno za implementaciju i naknadno održavanje spremišta. Odgovornosti operatera uključuju:

  • stvaranje DaemonSeta za Ceph demone za pohranu (ceph-osd) s jednostavnim RADOS klasterom;
  • stvaranje mahuna za praćenje Ceph (iz ceph-mon, provjera statusa klastera; za kvorum se u većini slučajeva raspoređuju tri kopije, a ako koja od njih padne, diže se nova);
  • upravljanje CRD-ovima (Prilagođene definicije resursa) za sebe Klastera, skladišni bazeni, skladišta objekata (skupovi resursa i usluga za posluživanje HTTP zahtjeva koji izvode PUT/GET na objektima - kompatibilni su sa S3 i Swift API-jem)I datotečnim sustavima;
  • inicijaliziranje mahuna za pokretanje svih potrebnih usluga;
  • stvaranje Rook agenata.

Agenti Rooka predstavljeni su zasebnim podovima koji su raspoređeni na svakom Kubernetes čvoru. Svrha agenta je konfiguracija dodataka FlexVolume, koji pruža podršku za volumene pohrane u Kubernetesu. Agent implementira rad pohrane: povezuje mrežne uređaje za pohranu, montira jedinice, formatira datotečni sustav itd.

Rook - samouslužna pohrana podataka za Kubernetes
Mjesto i uloga Rook komponenti u cjelokupnoj shemi Kubernetes klastera

Rook nudi tri vrste pohrane:

  1. blok (Blokirati, StorageClass) — montira spremište na jedno ognjište;
  2. objekt (Objekt, ObjectStore) - dostupno unutar i izvan Kubernetes klastera (putem S3 API-ja);
  3. zajednički datotečni sustav (Dijeljeni sustav datoteka, Filesystem) je datotečni sustav koji se može montirati za čitanje i pisanje iz više podova.

Unutrašnjost Topa uključuje:

  • Mons — mahune za praćenje Ceph (s već spomenutim ceph-monom);
  • OSD-ovi - mahune s ceph-osd demonima (Object Storage Daemons);
  • M.G.R. - mahune s demonom ceph-mgr (Ceph Manager), koji pruža dodatne mogućnosti nadzora i sučelja za vanjske sustave (monitoring/control);
  • RGW (izborno) - mahune sa spremištem predmeta;
  • MDS (izborno) - mahune sa zajedničkim datotečnim sustavom.

Rook - samouslužna pohrana podataka za Kubernetes

Svi Rook demoni (Mons, OSDs, MGR, RGW, MDS) kompilirani su u jednu binarnu datoteku (rook) radi u kontejneru.

Za kratki uvod u projekt Rook, ovaj kratki (12 slajdova) također može biti koristan. prezentacija od Bassam Tabbara (CTO u Quantum Corp).

Upravljanje Topom

Operator Rook u potpunosti podržava Kubernetes verziju 1.6 i novije (i, djelomično, starije izdanje K8s - 1.5.2), njegov instalacija в najjednostavniji scenarij izgleda ovako:

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

Osim toga, pripremljen je Rook operator Shema kormila, zahvaljujući čemu se instalacija može izvesti na sljedeći način:

helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook

Dostupna mala količina mogućnosti postavljanja (na primjer, možete onemogućiti podršku RBAC, ako se ova značajka ne koristi u vašem klasteru), koji se prosljeđuju helm install preko parametra --set key=value[,key=value] (ili pohranite u zasebnu YAML datoteku i prenesite putem -f values.yaml).

Nakon instaliranja Rook operatora i pokretanja podova s ​​njegovim agentima, preostaje samo kreirati sam Rook klaster čija najjednostavnija konfiguracija izgleda ovako (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

Primijetiti: posebnu pozornost treba posvetiti atributu dataDirHostPath, čija je ispravna vrijednost neophodna za spremanje klastera nakon ponovnog pokretanja. Za slučajeve kada se koristi kao trajna pohrana Rook podataka na Kubernetes hostovima, autori preporučuju najmanje 5 GB slobodnog prostora na disku u ovom direktoriju.

Sve što preostaje je stvoriti klaster iz konfiguracije i provjeriti jesu li mahune stvorene u klasteru (u prostoru imena 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

Nadogradite Rook klaster (do nove verzije) je postupak koji u ovoj fazi zahtijeva sekvencijalno ažuriranje svih svojih komponenti određenim redoslijedom, a možete ga pokrenuti tek nakon što ste se uvjerili da je trenutna Rookova instalacija u potpuno “zdravom” stanju. država. Detaljne upute korak po korak koristeći primjer ažuriranja Rook verzije 0.5.0 na 0.5.1 mogu se pronaći u projektna dokumentacija.

Prošlog studenog na blogu Rook objavljena je usporedba produktivnost s EBS-om. Njegovi rezultati su vrijedni pažnje, a ukratko su sljedeći:

Rook - samouslužna pohrana podataka za Kubernetes
Rook - samouslužna pohrana podataka za Kubernetes

Planovi

Rookov trenutni status je alfa, a najnovije veliko izdanje do danas je inačica 0.6, objavljen u studenom 2017. (trenutni ispravak - v0.6.2 — izašao 14. prosinca). Već u prvoj polovici 2018. očekuju se izdanja zrelijih verzija: beta i stabilna (službeno spremna za korištenje u produkciji).

Prema Putokaz projekta, programeri imaju detaljnu viziju razvoja Rooka u najmanje dva sljedeća izdanja: 0.7 (njegova spremnost je u GitHub trackeru procijenjeno kao 60%) i 0.8. Među očekivanim promjenama su prijenos podrške za Ceph Block i Ceph Object u status beta verzije, dinamičko pružanje volumena za CephFS, napredni sustav zapisivanja, automatizirana ažuriranja klastera, podrška za snimke volumena.

Uzimanje Rooka u broj CNCF projekti (do sada u vrlo ranoj fazi - "početna razina" - na razini s povezivač и CoreDNS) svojevrsna je garancija sve većeg interesa za proizvod. Kako će se učvrstiti u svijetu cloud aplikacija postat će jasnije nakon što budu objavljene stabilne verzije, koje će Rooku zasigurno dovesti nove testere i korisnike.

PS

Pročitajte i na našem blogu:

Izvor: www.habr.com

Dodajte komentar