Rook — un stockage de donnĂ©es « auto-service » pour Kubernetes

Rook — un stockage de donnĂ©es « auto-service » pour Kubernetes

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 annoncé 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 ?

Rook — c'est un logiciel Ă©crit en Go (est distribuĂ© 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 cet article), 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 (ceph-osd) avec un simple cluster RADOS ;
  • la crĂ©ation de pods pour la surveillance Ceph (avec ceph-mon, 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 (Custom Resource Definitions) pour le cluster, des pools de stockage, object stores (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 systĂšmes de fichiers;
  • 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 FlexVolume, 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.

Rook — un stockage de donnĂ©es « auto-service » pour Kubernetes
Place et rÎle des composants Rook dans le schéma global du cluster Kubernetes

Rook propose trois types de stockage :

  1. stockage en bloc (Block, StorageClass) — monte le stockage à un seul pod ;
  2. stockage par objet (Object, ObjectStore) — accessible Ă  l'intĂ©rieur et Ă  l'extĂ©rieur du cluster Kubernetes (via l'API S3) ;
  3. systĂšme de fichiers partagĂ© (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-mgr (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Ă©.

Rook — un stockage de donnĂ©es « auto-service » pour Kubernetes

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) prĂ©sentation 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 scĂ©nario le plus simple semble ĂȘtre le suivant :

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

De plus, un Helm charta é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 d'options de configuration (par exemple, il est possible de désactiver le support RBAC, 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: 1024

Remarque: 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          5m

Upgrade 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 documentation du projet.

En novembre de l'annĂ©e derniĂšre, sur le blog de Rook a Ă©tĂ© publiĂ© comparaison performance avec EBS. Ses rĂ©sultats mĂ©ritent d'ĂȘtre pris en compte, et en rĂ©sumĂ©, ils sont les suivants :

Rook — un stockage de donnĂ©es « auto-service » pour Kubernetes
Rook — un stockage de donnĂ©es « auto-service » pour Kubernetes

Perspectives

Le statut actuel de Rook est alpha, et le dernier grand lancement Ă  ce jour est la version 0.6, publiĂ©e en novembre 2017 (la version de correction actuelle est v0.6.2 — 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 roadmap 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 est Ă©valuĂ© Ă  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 les projets de la CNCF (pour l'instant au tout dĂ©but — au niveau `inception`, — au mĂȘme titre que linkerd et CoreDNS) 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

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster