Rook — un almacenamiento de datos “autogestionado” para Kubernetes.

Rook — un almacenamiento de datos “autogestionado” para Kubernetes.

El 29 de enero, el comité técnico de la organización CNCF (Cloud Native Computing Foundation), responsable de Kubernetes, Prometheus y otros productos Open Source del mundo de los contenedores y cloud native, anunció aprobó el proyecto Rook para sus filas. Una gran oportunidad para conocer más de cerca a este «orquestador de sistemas de almacenamiento distribuido en Kubernetes».

¿Qué es Rook?

Rook — es un software escrito en Go (se distribuye bajo la licencia libre Apache License 2.0), destinado a dotar a los sistemas de almacenamiento de funciones automatizadas que los hacen autogestionados, escalables y auto-reparables.Para ello, Rook automatiza (para los sistemas de almacenamiento utilizados en el entorno de Kubernetes): implementación, bootstrap, configuración, aprovisionamiento, escalado, actualizaciones, migraciones, recuperación ante fallos, monitoreo y gestión de recursos.

El proyecto está en fase alfa y se especializa en la orquestación del sistema de almacenamiento distribuido Ceph en clústeres de Kubernetes. Los autores también han declarado su intención de soportar otros sistemas de almacenamiento, pero esto no sucederá en las próximas versiones.

Componentes y estructura técnica

En el núcleo del funcionamiento de Rook dentro de Kubernetes hay un operador especial (hemos escrito más sobre Kubernetes Operators en este artículo), que automatiza la configuración del almacenamiento y realiza su monitoreo.

Así que, El operador Rook se presenta como un contenedor que contiene todo lo necesario para implementar y posteriormente mantener el almacenamiento. Entre las responsabilidades del operador están:

  • la creación de DaemonSets para los demonios de almacenamiento Ceph (ceph-osd) con un clúster sencillo de RADOS;
  • la creación de pods para el monitoreo de Ceph (con ceph-mon, que verifican el estado del clúster; para establecer un quórum, en la mayoría de los casos se implementan tres instancias, y al fallar cualquiera de ellas, se levanta una nueva);
  • la gestión de CRDs (Custom Resource Definitions) para el propio clúster, de pools de almacenamiento, object stores (conjuntos de recursos y servicios para manejar solicitudes HTTP, ejecutando PUT/GET para objetos, que son compatibles con S3 y Swift API), así como sistemas de archivos;
  • la inicialización de pods para activar todos los servicios necesarios;
  • la creación de agentes Rook.

Los agentes Rook se presentan como pods independientes, que se implementan en cada nodo de Kubernetes. La finalidad del agente es la configuración del plugin FlexVolume, que proporciona soporte para volúmenes de almacenamiento en Kubernetes. El agente implementa la explotación del almacenamiento: conecta dispositivos de almacenamiento en red, monta volúmenes, formatea el sistema de archivos, etc.

Rook — un almacenamiento de datos “autogestionado” para Kubernetes.
Lugar y función de los componentes Rook en el esquema general del clúster de Kubernetes

Rook ofrece tres tipos de almacenamiento:

  1. bloque (Block, StorageClass) — monta el almacenamiento a un único pod;
  2. objeto (Object, ObjectStore) — accesible dentro y fuera del clúster de Kubernetes (a través de la API S3);
  3. sistema de archivos compartido (Shared File System, Sistema de archivos) — sistema de archivos que se puede montar para lectura y escritura desde múltiples pods.

El dispositivo interno de Rook incluye:

  • Mons — pods para monitoreo de Ceph (con los ya mencionados ceph-mon);
  • OSDs — pods con demonios ceph-osd (Object Storage Daemons);
  • MGR — pods con el demonio ceph-mgr (Ceph Manager), que proporciona capacidades adicionales de monitorización e interfaces para sistemas externos (de monitoreo/gestión);
  • RGW (opcional) — pods con almacenamiento de objetos;
  • MDS (opcional) — pods con sistema de archivos compartido.

Rook — un almacenamiento de datos “autogestionado” para Kubernetes.

Todos los demonios de Rook (Mons, OSDs, MGR, RGW, MDS) están compilados en un único binario (rook), que se ejecuta en un contenedor.

Para una breve presentación del proyecto Rook, también puede ser útil este pequeño (12 diapositivas) presentación de Bassam Tabbara (CTO en Quantum Corp).

Explotación de Rook

El operador Rook soporta completamente Kubernetes versión 1.6 y superior (y, parcialmente, el lanzamiento más antiguo de K8s — 1.5.2). Su instalación en el escenario más sencillo se ve así:

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

Además, para el operador Rook hay preparado Helm chart, lo que permite que la instalación también se realice de esta manera:

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

Hay una pequeña cantidad de opciones de configuración (por ejemplo, se puede desactivar el soporte RBAC, si esta posibilidad no se utiliza en su clúster), que se pasan en helm install a través del parámetro --set key=value[,key=value] (o almacenarlo en un archivo YAML separado y pasarlo a través de -f values.yaml).

Después de instalar el operador Rook y ejecutar pods con sus agentes, queda por crear el propio clúster Rook, cuya configuración más sencilla se ve como sigue (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: se debe prestar especial atención al atributo dataDirHostPath, cuyo valor correcto es necesario para mantener el clúster después de reinicios. Para los casos de uso como un lugar de almacenamiento permanente de datos, los autores de Rook en los hosts de Kubernetes recomiendan tener al menos 5 GB de espacio libre en disco en este directorio.

Queda por crear el clúster a partir de la configuración y asegurarse de que los pods se hayan creado en el clúster (en el espacio de nombres 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 actualización del clúster Rook (hasta la nueva versión) es un procedimiento que en esta etapa requiere la actualización secuencial de todos sus componentes en un orden específico, y solo se puede comenzar una vez que usted se asegure de que la instalación actual de Rook esté en un estado completamente 'saludable'. Se puede encontrar una guía detallada paso a paso sobre la actualización de Rook de la versión 0.5.0 a la 0.5.1 en la documentación del proyecto.

En noviembre del año pasado, en el blog de Rook se publicó comparación rendimiento con EBS. Sus resultados son dignos de atención, y resumiendo, son los siguientes:

Rook — un almacenamiento de datos “autogestionado” para Kubernetes.
Rook — un almacenamiento de datos “autogestionado” para Kubernetes.

Perspectivas

El estado actual de Rook es alpha, y la última gran versión hasta la fecha es la versión 0.6, lanzada en noviembre de 2017 (corrección actual — v0.6.2 — se lanzó el 14 de diciembre). Ya en la primera mitad de 2018 se esperan lanzamientos de versiones más maduras: betas y una estable (oficialmente lista para producción).

Según roadmap del proyecto, los desarrolladores tienen una visión detallada para el desarrollo de Rook al menos en los dos próximos lanzamientos: 0.7 (su preparación en el rastreador de GitHub se evalúa como 60 %) y 0.8. Entre los cambios esperados se incluyen la transición del soporte de Ceph Block y Ceph Object a estado beta, la provisión dinámica de volúmenes para CephFS, un sistema de registro mejorado, actualizaciones automatizadas del clúster, soporte para instantáneas de volúmenes.

La inclusión de Rook en la lista de proyectos de CNCF (por ahora en la etapa más temprana — 'inception-level', — al mismo nivel que linkerd y CoreDNS) actúa como una especie de garantía del creciente interés por el producto. Cuánto se consolidará en el mundo de las aplicaciones en la nube se podrá entender mejor tras la aparición de versiones estables, que sin duda traerán a Rook nuevos «evaluadores» y usuarios.

P.D.

También puedes leer en nuestro blog:

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster