Rook — „samoobslužné“ úložisko dát pre Kubernetes

Rook — „samoobslužné“ úložisko dát pre Kubernetes

29. januára technický výbor organizácie CNCF (Cloud Native Computing Foundation), ktorá stojí za Kubernetes, Prometheus a ďalšími open source produktmi v oblasti kontajnerov a cloud native, vyhlásil schválil projekt Rook do svojich radov. Skvelá príležitosť na hlbšie spoznanie tohto „orchestrátora systémov distribuovaného ukladania dát v Kubernetes“.

Čo je to Rook?

Rook je to softvér napísaný v Go (distribuovaný pod lícenciou Apache License 2.0), určený na vybavenie úložísk dát automatizovanými funkciami, ktoré ich robia samostatne riaditeľnými, samoškálovateľnými a samovzRecoverovateľnými.Na to Rook automatizuje (pre úložiská dát používané v prostredí Kubernetes): nasadzovanie, bootstrapping, konfiguráciu, provisioning, škálovanie, aktualizácie, migrácie, obnovu po výpadkoch, monitorovanie a správu zdrojov.

Projekt sa nachádza v alfa štádiu a špecializuje sa na orchestráciu distribuovaného systému ukladania dát Ceph v klastroch Kubernetes. Autori taktiež vyhlasujú plány na podporu iných systémov ukladania, ale to sa nestane v najbližších vydaniach.

Komponenty a technické zariadenie

V základe fungovania Rook v Kubernetes je špeciálny operátor (o Kubernetes operátoroch sme písali v tomto článku), automatizujúci konfiguráciu úložiska a realizujúci jeho monitorovanie.

Takže, operátor Rook sa predstavuje ako kontajner, ktorý obsahuje všetko potrebné na nasadenie a následnú údržbu úložiska. Medzi povinnosti operátora patrí:

  • vytvorenie DaemonSet pre démony ukladania Ceph (ceph-osd) so jednoduchým klastrom RADOS;
  • vytvorenie podov pre monitorovanie Ceph (s ceph-mon,ktoré kontrolujú stav klastru; pre kvórum sa vo väčšine prípadov nasadzujú tri inštancie, a pri výpadku akejkoľvek z nich sa spustí nová);
  • správa CRDs (Custom Resource Definitions,) pre samotný klaster, úložných bazénov, objektových úložísk (súbory zdrojov a služieb na obsluhu HTTP požiadaviek, ktoré vykonávajú PUT/GET pre objekty, — sú kompatibilné s S3 a Swift API), ako aj súborových systémov;
  • inicializácia podov na spustenie všetkých potrebných služieb;
  • vytvorenie agentov Rook.

Agenti Rook sú reprezentovaní samostatnými podmi, ktoré sa nasadzujú na každom uzle Kubernetes. Účelom agenta je konfigurácia pluginu FlexVolume., zabezpečujúce podporu úložných objemov v Kubernetes. Agent realizuje správu úložiska: prepája sieťové úložné zariadenia, montuje objemy, formátuje súborový systém a pod.

Rook — „samoobslužné“ úložisko dát pre Kubernetes
Miesto a úloha komponentov Rook v celkovej schéme klastera Kubernetes

Rook ponúka tri druhy úložiska:

  1. blokové (Block, StorageClass) — pripojuje úložisko k jednému podu;
  2. objektové (Object, ObjectStore) — dostupné vo vnútri aj mimo klastera Kubernetes (cez S3 API);
  3. zdieľaná FS (Shared File System, Súborový systém) — súborový systém, ktorý môže byť montovaný na čítanie a zápis z viacerých podov.

Interné zariadenie Rook zahŕňa:

  • Mons — pody pre monitoring Ceph (s už spomenutými ceph-mon);
  • OSDs — pody s démonmi ceph-osd (Object Storage Daemons);
  • MGR — pody s démonom ceph-mgr (Ceph Manager), poskytujúcim ďalšie možnosti monitorovania a rozhrania pre externé systémy (monitorovania/riadenia);
  • RGW (voliteľne) — pody s objektovým úložiskom;
  • MDS (voliteľne) — pody so zdieľanou FS.

Rook — „samoobslužné“ úložisko dát pre Kubernetes

Všetky démoni Rook (Mons, OSDs, MGR, RGW, MDS) sú skompilované v jednom binárnom súbore (rook), spúšťaný v kontejnere.

Pre stručné predstavenie projektu Rook môže byť užitočná aj táto malá (12 snímkov) prezentácia od Bassama Tabbary (CTO v Quantum Corp).

Prevádzka Rook

Operátor Rook plne podporuje Kubernetes verzie 1.6 a vyššie (a čiastočne, staršiu verziu K8s — 1.5.2). Jeho inštalácia v najjednoduchšom scenári vyzerá takto:

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

Okrem toho, pre operátora Rook je pripravený Helm chart, vďaka čomu môže byť inštalácia vykonaná aj takto:

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

Existuje obmedzené množstvo možností nastavenia (napríklad, môžete vypnúť podporu RBAC, ak táto možnosť nie je vo vašom klasteri používaná), ktoré sa odovzdávajú v helm install cez parameter --set key=value[,key=value] (alebo uchovávať v samostatnom YAML súbore a odovzdávať — cez -f values.yaml).

Po inštalácii operátora Rook a spustení podov s jeho agentmi zostáva vytvoriť samotný klaster Rook, najjednoduchšia konfigurácia, ktorá vyzerá takto (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

Poznámka: osobitnú pozornosť si zasluhuje atribút dataDirHostPath, ktorého správna hodnota je potrebná na udržanie klastra po reštartoch. Pre prípady jeho využitia ako trvalého úložiska dát Rook na hostoch Kubernetes autori odporúčajú mať v tomto adresári aspoň 5 GB voľného diskového priestoru.

Zostáva vlastne vytvoriť klaster z konfigurácie a uistiť sa, že pody sa vytvorili v klastri (v priestore názvov 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

Upgrade aktualizácia klastra Rook (do novej verzie) je proces, ktorý v súčasnosti vyžaduje postupné aktualizovanie všetkých jeho komponentov v určitej sekvencii, a začať ju možno až po tom, čo ste sa presvedčili o úplne „zdravom“ stave aktuálnej inštalácie Rook. Podrobný krok-za-krokom návod pomocou aktualizácie Rook verzie 0.5.0 na 0.5.1 nájdete v dokumentácii projektu.

V novembri minulého roka na blogu Rook bola zverejnená porovnanie výkonu s EBS. Jeho výsledky stoja za to, a ak to zhrnieme, tak sú takéto:

Rook — „samoobslužné“ úložisko dát pre Kubernetes
Rook — „samoobslužné“ úložisko dát pre Kubernetes

Vyhliadky

Aktuálny stav Rook je alpha a posledným veľkým vydaním k dnešnému dňu je verzia 0.6, vydaná v novembri 2017 (aktuálne opravenie — v0.6.2 — vyšlo 14. decembra). Už v prvej polovici roku 2018 sa očakávajú vydania zrelších verzií: beta a stabilná (oficiálne pripravená na použitie v produkcii).

Podľa roadmap projektu, majú vývojári podrobnú víziu rozvoja Rook aspoň v dvoch najbližších vydaniach: 0.7 (jeho pripravenosť v trackeri GitHub sa hodnotí ako 60 %) a 0.8. Medzi očakávané zmeny patrí prechod podpory Ceph Block a Ceph Object do statusu beta, dynamické provisionovanie objemov pre CephFS, pokročilý systém logovania, automatizované aktualizácie klastra, podpora snapshotov pre objemy.

Zaradenie Rook medzi projekty CNCF (prezatím na najskoršej úrovni — „inception-level“, — spolu s linkerd a CoreDNS) je akýmsi zárukou rastúceho záujmu o produkt. Ako sa usadí vo svete cloudových aplikácií, stane sa jasnejším po objavení stabilných verzií, ktoré bezpochyby prinesú Rook nových „testovateľov“ a používateľov.

P.S.

Prečítajte si tiež na našom blogu:

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster