
Le 29 janvier, le comité technique de l'organisation CNCF (Cloud Native Computing Foundation), qui soutient Kubernetes, Prometheus et d'autres produits open source dans le monde des conteneurs et du cloud native, a approuvé le projet Rook dans ses rangs. Une excellente occasion de se familiariser davantage avec ce « chef d'orchestre des systÚmes de stockage distribué dans Kubernetes ».
Qu'est-ce que Rook ?
â c'est un logiciel Ă©crit en Go ( sous licence libre Apache License 2.0) conçu pour confĂ©rer aux systĂšmes de stockage des fonctionnalitĂ©s automatisĂ©es qui les rendent autonomes, capables de s'adapter et auto-rĂ©parateurs.Pour cela, Rook automatise (pour les systĂšmes de stockage utilisĂ©s dans un environnement Kubernetes) : le dĂ©ploiement, le bootstrapping, la configuration, le provisioning, la mise Ă l'Ă©chelle, les mises Ă jour, les migrations, la rĂ©cupĂ©ration aprĂšs sinistre, la surveillance et la gestion des ressources.
Le projet est en phase alpha et se spécialise dans l'orchestration d'un systÚme de stockage distribué Ceph dans des clusters Kubernetes. Les auteurs déclarent également leur intention de soutenir d'autres systÚmes de stockage, mais cela ne se produira pas dans les prochaines versions.
Composants et dispositif technique
Au cĆur du fonctionnement de Rook dans Kubernetes se trouve un opĂ©rateur spĂ©cial (nous avons parlĂ© des Kubernetes Operators dans ), automatisant la configuration du stockage et implĂ©mentant sa surveillance.
Alors, L'opérateur Rook se présente sous la forme d'un conteneur qui contient tout le nécessaire pour le déploiement et la maintenance ultérieure du stockage. Parmi les responsabilités de l'opérateur :
- la création d'un DaemonSet pour les démons de stockage Ceph () avec un simple cluster RADOS ;
- la création de pods pour la surveillance Ceph (avec , vérifiant l'état du cluster ; pour le quorum, dans la plupart des cas, trois instances sont déployées, et lorsqu'une d'entre elles tombe, une nouvelle est lancée);
- la gestion des CRDs () pour le , , (ensembles de ressources et de services pour traiter les demandes HTTP, exécutant des PUT/GET pour des objets, compatibles avec les API S3 et Swift), ainsi que ;
- l'initialisation des pods pour démarrer tous les services nécessaires ;
- la création d'agents Rook.
Les agents Rook sont reprĂ©sentĂ©s par des pods distincts qui sont dĂ©ployĂ©s sur chaque nĆud Kubernetes. Le but de l'agent est de configurer le plugin , permettant de prendre en charge des volumes de stockage dans Kubernetes. L'agent rĂ©alise l'exploitation du stockage : connecte des dispositifs de stockage en rĂ©seau, monte des volumes, formate le systĂšme de fichiers, etc.

Place et rÎle des composants Rook dans le schéma global du cluster Kubernetes
Rook propose trois types de stockage :
- (Block,
StorageClass) â monte le stockage Ă un seul pod ; - (Object,
ObjectStore) â accessible Ă l'intĂ©rieur et Ă l'extĂ©rieur du cluster Kubernetes (via l'API S3) ; - (Shared File System,
SystĂšme de fichiers) â systĂšme de fichiers pouvant ĂȘtre montĂ© en lecture et Ă©criture depuis plusieurs pods.
Le dispositif interne de Rook comprend :
- Mons â pods pour la surveillance de Ceph (avec les ceph-mon mentionnĂ©s prĂ©cĂ©demment) ;
- OSDs â pods avec des dĂ©mons ceph-osd (DĂ©mons de stockage par objet) ;
- MGR â pods avec le dĂ©mon (Ceph Manager), fournissant des capacitĂ©s de surveillance supplĂ©mentaires et des interfaces pour des systĂšmes externes (surveillance/gestion) ;
- RGW (en option) â pods avec stockage d'objet ;
- MDS (en option) â pods avec systĂšme de fichiers partagĂ©.

Tous les démons Rook (Mons, OSDs, MGR, RGW, MDS) sont compilés dans un seul binaire (rook), exécuté dans un conteneur.
Pour une prĂ©sentation succincte du projet Rook, cette petite (12 diapositives) de Bassam Tabbara (CTO de Quantum Corp) peut Ă©galement ĂȘtre utile.
Exploitation de Rook
L'opĂ©rateur Rook prend en charge Kubernetes version 1.6 et supĂ©rieure (et, partiellement, une version antĂ©rieure de K8s â 1.5.2). Son installation dans semble ĂȘtre le suivant :
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlDe plus, un a été préparé pour l'opérateur Rook, ce qui permet de réaliser l'installation de cette maniÚre :
helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook Il y a un petit nombre (par exemple, il est possible de désactiver le support , si cette fonctionnalité n'est pas utilisée dans votre cluster), qui sont passées au helm install via le paramÚtre --set key=value[,key=value] (ou de les conserver dans un fichier YAML séparé, et de les transmettre via -f values.yaml).
AprĂšs l'installation de l'opĂ©rateur Rook et le dĂ©marrage des pods avec ses agents, il reste Ă crĂ©er le cluster Rook lui-mĂȘme, dont la configuration la plus simple ressemble Ă ceci (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: 1024Remarque: une attention particuliĂšre doit ĂȘtre portĂ©e Ă l'attribut dataDirHostPath, dont un espace disque d'au moins 5 Go doit ĂȘtre disponible dans ce rĂ©pertoire pour une utilisation comme espace de stockage persistant pour Rook sur des hĂŽtes Kubernetes.
Il ne reste plus qu'à créer un cluster à partir de la configuration et à s'assurer que les pods ont été créés dans le cluster (dans l'espace 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 5mUpgrade la mise Ă jour du cluster Rook (avant la nouvelle version) est une procĂ©dure qui nĂ©cessite Ă ce stade une mise Ă jour progressive de tous ses composants dans un ordre spĂ©cifique, et elle ne peut ĂȘtre commencĂ©e qu'une fois que vous vous ĂȘtes assurĂ© que l'installation actuelle de Rook est entiĂšrement « saine ». Un guide dĂ©taillĂ© Ă©tape par Ă©tape sur la mise Ă jour de Rook de la version 0.5.0 Ă 0.5.1 peut ĂȘtre trouvĂ© dans .
En novembre de l'annĂ©e derniĂšre, sur le blog de Rook comparaison performance avec EBS. Ses rĂ©sultats mĂ©ritent d'ĂȘtre pris en compte, et en rĂ©sumĂ©, ils sont les suivants :


Perspectives
Le statut actuel de Rook est alpha, et le dernier grand lancement Ă ce jour est , publiĂ©e en novembre 2017 (la version de correction actuelle est â sortie le 14 dĂ©cembre). Dans la premiĂšre moitiĂ© de 2018, des versions plus matures sont attendues : bĂȘta et stable (officiellement prĂȘtes pour une utilisation en production).
Selon du projet, les dĂ©veloppeurs ont une vision dĂ©taillĂ©e du dĂ©veloppement de Rook pour au moins les deux prochaines versions : 0.7 (sa prĂ©paration dans le tracker GitHub Ă 60 %) et 0.8. Parmi les changements attendus figurent le passage du support de Ceph Block et Ceph Object au statut bĂȘta, le provisionnement dynamique des volumes pour CephFS, un systĂšme de journalisation avancĂ©, des mises Ă jour automatisĂ©es de cluster, et le support des snapshots pour les volumes.
L'adoption de Rook parmi (pour l'instant au tout dĂ©but â au niveau `inception`, â au mĂȘme titre que et ) est une sorte de garantie d'un intĂ©rĂȘt croissant pour le produit. Dans quelle mesure il s'implantera dans le monde des applications cloud, cela deviendra plus clair aprĂšs la sortie de versions stables, qui apporteront sans aucun doute de nouveaux « testeurs » et utilisateurs Ă Rook.
P.S.
Lisez aussi dans notre blog :
- «»;
- «»;
- «»;
- «»;
- «».
Source : habr.com
