Rook: un magatzem de dades d'autoservei per a Kubernetes

Rook: un magatzem de dades d'autoservei per a Kubernetes

El passat 29 de gener, el comitè tècnic de la CNCF (Cloud Native Computing Foundation), l'organització que hi ha darrere de Kubernetes, Prometheus i altres productes de codi obert del món dels contenidors i cloud native, va anunciar sobre l'acceptació del projecte torre a les seves files. Una excel·lent oportunitat per conèixer aquest "orquestrador d'emmagatzematge distribuït a Kubernetes".

Quina mena de torre?

torre és un programari escrit en Go (Distribuït per sota la llicència gratuïta d'Apache 2.0), dissenyada per proporcionar als magatzems de dades funcions automatitzades que els autogestió, autoescalada i autocuració. Per fer-ho, Rook automatitza (per a magatzems de dades utilitzats en un entorn Kubernetes): desplegament, arrencada, configuració, subministrament, escalat, actualitzacions, migracions, recuperació de desastres, monitorització i gestió de recursos.

El projecte es troba en l'etapa alfa i està especialitzat en l'orquestració del sistema d'emmagatzematge distribuït Ceph en clústers Kubernetes. Els autors també anuncien plans per donar suport a altres sistemes d'emmagatzematge, però això no passarà en els propers llançaments.

Components i dispositiu tècnic

El treball de Rook dins de Kubernetes es basa en un operador especial (hem escrit més informació sobre els operadors de Kubernetes a aquest article), que automatitza la configuració de l'emmagatzematge i implementa el seu seguiment.

Per tant, Operador de torre sembla ser un contenidor que conté tot el necessari per al desplegament i el posterior manteniment del dipòsit. Les responsabilitats de l'operador inclouen:

  • creant un DaemonSet per als dimonis d'emmagatzematge Ceph (ceph-osd) amb un simple clúster RADOS;
  • creant pods per al monitoratge de Ceph (a partir de ceph-mon, comprovant l'estat del clúster; per a quòrum, en la majoria dels casos es despleguen tres còpies, i si alguna d'elles cau, n'aixeca una de nova);
  • gestió de CRD (Definicions de recursos personalitzades) per ell mateix clúster, piscines d'emmagatzematge, magatzems d'objectes (conjunts de recursos i serveis per atendre sol·licituds HTTP que realitzen PUT/GET en objectes; són compatibles amb S3 i Swift API)I sistemes de fitxers;
  • inicialitzar pods per llançar tots els serveis necessaris;
  • creació d'agents Rook.

Agents de Rook es representen per pods separats que es despleguen a cada node de Kubernetes. El propòsit de l'agent és la configuració del connector FlexVolum, que proporciona suport per als volums d'emmagatzematge a Kubernetes. L'agent implementa el funcionament de l'emmagatzematge: connecta dispositius d'emmagatzematge en xarxa, munta volums, formata el sistema de fitxers, etc.

Rook: un magatzem de dades d'autoservei per a Kubernetes
Lloc i funció dels components de Rook a l'esquema general de clúster de Kubernetes

Rook ofereix tres tipus d'emmagatzematge:

  1. bloc (Bloquejar, StorageClass) — munta l'emmagatzematge en una sola llar;
  2. objecte (Objecte, ObjectStore) - disponible dins i fora del clúster Kubernetes (mitjançant l'API S3);
  3. sistema de fitxers compartit (Sistema de fitxers compartit, Filesystem) és un sistema de fitxers que es pot muntar per llegir i escriure des de múltiples pods.

Les parts internes de la torre inclouen:

  • Mons — beines per al seguiment de Ceph (amb el ja esmentat ceph-mon);
  • OSD - beines amb dimonis ceph-osd (dimonis d'emmagatzematge d'objectes);
  • M.G.R. - beines amb un dimoni ceph-mgr (Ceph Manager), que proporciona capacitats de monitorització i interfícies addicionals per a sistemes externs (monitorització/control);
  • RGW (opcional) - beines amb emmagatzematge d'objectes;
  • MDS (opcional) - pods amb sistema de fitxers compartit.

Rook: un magatzem de dades d'autoservei per a Kubernetes

Tots els dimonis Rook (Mons, OSD, MGR, RGW, MDS) es compilen en un únic binari (rook) corrent en un contenidor.

Per a una breu introducció al projecte Rook, aquest curt (12 diapositives) també pot ser útil. presentació de Bassam Tabbara (CTO de Quantum Corp).

Funcionament de la torre

L'operador Rook és totalment compatible amb Kubernetes versió 1.6 i superior (i, parcialment, la versió anterior de K8s - 1.5.2). El seu instal·lació в escenari més senzill es veu així:

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

A més, l'operador Rook està preparat Quadre de timó, gràcies al qual la instal·lació es pot dur a terme així:

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

Petita quantitat disponible opcions de configuració (per exemple, podeu desactivar el suport RBAC, si aquesta característica no s'utilitza al vostre clúster), que es transmeten helm install mitjançant paràmetre --set key=value[,key=value] (o emmagatzemar en un fitxer YAML independent i transmetre mitjançant -f values.yaml).

Després d'instal·lar l'operador Rook i llançar pods amb els seus agents, només queda crear el propi clúster Rook, la configuració més senzilla del qual sembla aquesta (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: cal prestar especial atenció a l'atribut dataDirHostPath, el valor correcte del qual és necessari per desar el clúster després dels reinicis. Per als casos en què s'utilitza com a ubicació d'emmagatzematge permanent per a dades de Rook als amfitrions de Kubernetes, els autors recomanen tenir almenys 5 GB d'espai lliure en aquest directori.

Tot el que queda és crear realment el clúster des de la configuració i assegurar-se que els pods s'han creat al clúster (a l'espai de noms 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

Actualització El clúster de Rook (fins a una nova versió) és un procediment que en aquesta fase requereix l'actualització seqüencial de tots els seus components en una seqüència determinada, i només podeu iniciar-lo després d'haver-vos assegurat que la instal·lació actual de Rook està completament "saluda". estat. Es poden trobar instruccions detallades pas a pas amb l'exemple d'actualització de la versió 0.5.0 a la 0.5.1 de Rook a documentació del projecte.

El mes de novembre passat al blog de la Torre es va publicar comparació rendiment amb EBS. Els seus resultats mereixen atenció i, en resum, són els següents:

Rook: un magatzem de dades d'autoservei per a Kubernetes
Rook: un magatzem de dades d'autoservei per a Kubernetes

Perspectives

L'estat actual de Rook és alfa, i el darrer llançament important fins ara és versió de 0.6, publicat el novembre de 2017 (correcció actual - v0.6.2 — va sortir el 14 de desembre). Ja durant el primer semestre de 2018 s'esperen llançaments de versions més madures: beta i estable (oficialment llestes per utilitzar-les en producció).

Segons full de ruta projecte, els desenvolupadors tenen una visió detallada del desenvolupament de Rook almenys en els dos propers llançaments: 0.7 (la seva preparació es troba al rastrejador de GitHub estimat com el 60%) i el 0.8. Entre els canvis esperats hi ha la transferència de suport per a Ceph Block i Ceph Object a l'estat de versió beta, subministrament dinàmic de volums per a CephFS, un sistema de registre avançat, actualitzacions de clúster automatitzades, suport per a instantànies de volums.

Portant Rook al nombre Projectes CNCF (fins ara en l'etapa molt primerenca - "nivell d'inici" - a la par linkerd и CoreDNS) és una mena de garantia d'interès creixent pel producte. Com s'assentarà al món de les aplicacions al núvol es farà més clar un cop es publiquin versions estables, cosa que sens dubte portarà nous provadors i usuaris a Rook.

PS

Llegeix també al nostre blog:

Font: www.habr.com

Afegeix comentari