Rook — „samosprávné“ úložiště dat pro Kubernetes

Rook — „samosprávné“ úložiště dat pro Kubernetes

29. ledna technický výbor organizace CNCF (Cloud Native Computing Foundation), stojící za Kubernetes, Prometheus a dalšími Open Source produkty z oblasti kontejnerů a cloud native, oznámil přijal projekt Rook do svých řad. Skvělá příležitost blíže se seznámit s tímto „orchestrátorem systémů rozděleného úložiště dat v Kubernetes“.

Co je Rook?

Rook — je to software napsaný v Go (distribuováno podlicencí Apache License 2.0), určený k vybavení úložišť dat automatizovanými funkcemi, které je činí samořídícími, samoškálovacími a samoobnovujícími se. K tomu Rook automatizuje (pro úložiště dat používaná v prostředí Kubernetes): nasazení, bootstrapping, konfiguraci, provisioning, škálování, aktualizace, migrace, zotavení po selhání, monitoring a správu zdrojů.

Projekt se nachází v alfa fázi a specializuje se na orchestraci rozvedeného systému úložiště dat Ceph v clusterech Kubernetes. Autoři rovněž uvádějí plány na podporu dalších systémů úložiště, ale to se nestane v nejbližších verzích.

Komponenty a technické zařízení

Základem fungování Rook uvnitř Kubernetes je speciální operátor (více o Kubernetes Operators jsme psali v tomto článku), automatizující konfiguraci úložiště a realizující jeho monitoring.

Takže, Operátor Rook se prezentuje jako kontejner, který obsahuje vše potřebné pro nasazení a následnou údržbu úložiště. Mezi povinnosti operátora patří:

  • vytvoření DaemonSet pro demony úložiště Ceph (ceph-osd) s jednoduchým klastrem RADOS;
  • vytvoření podů pro monitoring Ceph (s ceph-mon, ověřujícími stav clustera; pro kvórum se většinou nasazují tři instance, a při selhání jakékoliv z nich se zvedne nová);
  • správa CRDs (Custom Resource Definitions) pro samotný klaster, úložišť, object stores (sady prostředků a služeb pro obsluhu HTTP dotazů, vykonávající PUT/GET pro objekty, — jsou kompatibilní s S3 a Swift API), a také systémů souborů;
  • inicializace podů pro spuštění všech potřebných služeb;
  • vytvoření agentů Rook.

Agenti Rook jsou představeni jednotlivými podmi, které se nasazují na každém uzlu Kubernetes. Účel agenta — konfigurace pluginu FlexVolume, která poskytuje podporu pro úložné svazky v Kubernetes. Agent zajišťuje správu úložiště: připojuje síťová úložiště, montuje svazky, formátuje souborový systém atd.

Rook — „samosprávné“ úložiště dat pro Kubernetes
Místo a role komponent Rook v celkovém schématu clusteru Kubernetes

Rook nabízí tři typy úložišť:

  1. blokové (Block, StorageClass) — montuje úložiště k jedinému podu;
  2. objektové (Object, ObjectStore) — dostupné uvnitř i vně clusteru Kubernetes (přes S3 API);
  3. sdílený FS (Shared File System, Filesystem) — souborový systém, který lze připojit pro čtení i zápis z více podů.

Vnitřní zařízení Rook zahrnuje:

  • Mons — pody pro monitorování Ceph (s již zmíněnými ceph-mon);
  • OSDs — pody s démony ceph-osd (Object Storage Daemons);
  • MGR — pody s démonem ceph-mgr (Ceph Manager), poskytující další možnosti monitorování a rozhraní pro externí systémy (monitorování / správa);
  • RGW (volitelně) — pody s objektovým úložištěm;
  • MDS (volitelně) — pody se sdíleným FS.

Rook — „samosprávné“ úložiště dat pro Kubernetes

Všechny démony Rook (Mons, OSDs, MGR, RGW, MDS) jsou zkompilovány do jednoho binárního souboru (rook), spuštěného v kontejneru.

Pro stručné představení projektu Rook se hodí také tato malá (12 slidů) prezentace od Bassama Tabbary (CTO ve Quantum Corp).

Provoz Rook

Operátor Rook plně podporuje Kubernetes verze 1.6 a vyšší (a částečně starší verzi K8s — 1.5.2). Jeho instalace v nejjednodušším scénáři vypadá takto:

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

Kromě toho byl pro operátora Rook připraven Helm chart, takže instalace může probíhat i takto:

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

Existuje malé množství možností nastavení (například lze zakázat podporu RBAC, pokud tato možnost není ve vašem clusteru používána), které se předávají v helm install pomocí parametru --set key=value[,key=value] (nebo je uchovat v samostatném YAML souboru a předávat — přes -f values.yaml).

Po instalaci operátora Rook a spuštění podů s jeho agenty zbývá vytvořit samotný cluster Rook, jehož nejjednodušší konfigurace vypadá 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: zvláštní pozornost je třeba věnovat atributu dataDirHostPath, jehož správná hodnota je nutná k udržení clusteru po restartu. Pro případy jeho použití jako trvalého místa pro ukládání dat doporučují autoři Rook mít v tomto adresáři alespoň 5 GB volného místa na disku.

Zůstává vlastně vytvořit cluster z konfigurace a ujistit se, že podů byly vytvořeny v clusteru (v prostoru názvů rook):

kubectl create -f rook-cluster.yaml
kubectl -n rook get pod
NAZEV                              READY     STATUS    RESTARTY   VĚK
rook-api-1511082791-7qs0m         1/1       Běžící   0          5m
rook-ceph-mgr0-1279756402-wc4vt   1/1       Běžící   0          5m
rook-ceph-mon0-jflt5              1/1       Běžící   0          6m
rook-ceph-mon1-wkc8p              1/1       Běžící   0          6m
rook-ceph-mon2-p31dj              1/1       Běžící   0          6m
rook-ceph-osd-0h6nb               1/1       Běžící   0          5m

Upgrade klastry Rook (na novou verzi) je postup, který v současné době vyžaduje postupnou aktualizaci všech jeho komponent ve stanoveném pořadí, a začít ji lze pouze poté, co se ujistíte, že aktuální instalace Rook je zcela „zdravá“. Podrobný návod krok za krokem na příkladu aktualizace verze Rook z 0.5.0 na 0.5.1 naleznete v dokumentaci projektu.

V listopadu loňského roku byl na blogu Rook publikován porovnání výkonu s EBS. Jeho výsledky stojí za pozornost, a pokud to shrneme velmi stručně, jsou následující:

Rook — „samosprávné“ úložiště dat pro Kubernetes
Rook — „samosprávné“ úložiště dat pro Kubernetes

Vyhlídky

Aktuální stav Rook je alpha a posledním významným vydáním v současnosti je verze 0.6, vydaná v listopadu 2017 (aktuální oprava — v0.6.2 — byla vydána 14. prosince). Již v první polovině roku 2018 se očekávají vydání zralějších verzí: beta a stabilní (oficiálně připravené k použití v produkci).

Podle plán projektu, mají vývojáři podrobné vidění vývoje Rook alespoň ve dvou nejbližších vydáních: 0.7 (její připravenost v GitHub trackeru je hodnocena na 60 %) a 0.8. Mezi očekávané změny patří převedení podpory Ceph Block a Ceph Object do beta verze, dynamické provisioning objemů pro CephFS, vyvinutý systém logování, automatizované aktualizace clusteru, podpora snapshotů pro objemy.

Zařazení Rook mezi projekty CNCF (zatím na samém počátku – „inception-level“, – spolu s linkerd a CoreDNS) je zvláštní zárukou rostoucího zájmu o produkt. Jak dlouho se v oblasti cloudových aplikací usadí, bude jasnější po vydání stabilních verzí, které určitě přivedou Rook nové „testery“ a uživatele.

P.S.

Přečtěte si také náš blog:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster