
El pasado 29 de enero, el comité técnico de la CNCF (Cloud Native Computing Foundation), la organización detrás de Kubernetes, Prometheus y otros productos Open Source del mundo de los contenedores y el cloud nativo, sobre la aceptación del proyecto Rook en sus filas. Una excelente oportunidad para conocer a este “orquestador de almacenamiento distribuido en Kubernetes”.
¿Qué clase de torre?
es un software escrito en Go ( bajo la licencia gratuita Apache 2.0), diseñado para proporcionar almacenes de datos con funciones automatizadas que los hagan autogestionable, autoescalable y autocurativa. Para hacer esto, Rook automatiza (para los almacenes de datos utilizados en un entorno Kubernetes): implementación, arranque, configuración, aprovisionamiento, escalado, actualizaciones, migraciones, recuperación ante desastres, monitoreo y gestión de recursos.
El proyecto se encuentra en etapa alfa y se especializa en orquestar el sistema de almacenamiento distribuido Ceph en clústeres de Kubernetes. Los autores también anuncian planes para admitir otros sistemas de almacenamiento, pero esto no sucederá en las próximas versiones.
Componentes y dispositivo técnico.
El trabajo de Rook dentro de Kubernetes se basa en un operador especial (escribimos más sobre los operadores de Kubernetes en ), que automatiza la configuración del almacenamiento e implementa su seguimiento.
Por lo tanto, operador de torre Parece ser un contenedor que contiene todo lo necesario para el despliegue y posterior mantenimiento del repositorio. Las responsabilidades del operador incluyen:
- creando un DaemonSet para demonios de almacenamiento Ceph () con un clúster RADOS simple;
- creando pods para el monitoreo de Ceph (с , verificando el estado del clúster; para quórum, en la mayoría de los casos se despliegan tres copias, y si alguna de ellas cae, sube una nueva);
- gestión de CRD () por sí mismo , , (conjuntos de recursos y servicios para atender solicitudes HTTP que realizan PUT/GET en objetos; son compatibles con S3 y Swift API)y ;
- inicializar pods para lanzar todos los servicios necesarios;
- creación de agentes Rook.
Agentes de torre están representados por pods separados que se implementan en cada nodo de Kubernetes. El propósito del agente es la configuración del complemento. , que brinda soporte para volúmenes de almacenamiento en Kubernetes. El agente implementa la operación del almacenamiento: conecta dispositivos de almacenamiento de red, monta volúmenes, formatea el sistema de archivos, etc.

Lugar y función de los componentes de Rook en el esquema general del clúster de Kubernetes
Rook ofrece tres tipos de almacenamiento:
- (Bloquear,
StorageClass) — monta el almacenamiento en un solo hogar; - (Objeto,
ObjectStore): disponible dentro y fuera del clúster de Kubernetes (a través de la API de S3); - (Sistema de archivos compartido,
Filesystem) es un sistema de archivos que se puede montar para lectura y escritura desde múltiples pods.
Las partes internas de la Torre incluyen:
- Mons — pods para monitoreo Ceph (con el ya mencionado ceph-mon);
- OSD - pods con demonios ceph-osd (Daemons de almacenamiento de objetos);
- MGR - vainas con un demonio (Ceph Manager), que proporciona capacidades e interfaces de monitoreo adicionales para sistemas externos (monitoreo/control);
- RGW (Opcional) - módulos con almacenamiento de objetos;
- MDS (Opcional) - pods con sistema de archivos compartido.

Todos los demonios de Rook (Mons, OSD, MGR, RGW, MDS) se compilan en un único binario (rook) ejecutándose en un contenedor.
Para una breve introducción al proyecto Rook, este breve (12 diapositivas) también puede resultar útil. de Bassam Tabbara (CTO de Quantum Corp).
Operando la torre
El operador Rook es totalmente compatible con Kubernetes versión 1.6 y superior (y, parcialmente, la versión anterior de K8: 1.5.2). Su instalación в Se ve así:
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlAdemás, el operador de la Torre está preparado. , gracias a lo cual la instalación se puede realizar así:
helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook Pequeña cantidad disponible (por ejemplo, puedes desactivar el soporte , si esta característica no se utiliza en su clúster), que se pasan a helm install vía parámetro --set key=value[,key=value] (o almacenar en un archivo YAML separado y transmitir a través de -f values.yaml).
Después de instalar el operador Rook y lanzar pods con sus agentes, todo lo que queda es crear el clúster Rook, cuya configuración más simple se ve así (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: 1024Nota: se debe prestar especial atención al atributo dataDirHostPath, cuyo valor correcto es necesario para guardar el clúster después de reiniciar. Para los casos en los que se utiliza como ubicación de almacenamiento permanente para datos de Rook en hosts de Kubernetes, los autores recomiendan tener al menos 5 GB de espacio libre en disco en este directorio.
Todo lo que queda es crear el clúster a partir de la configuración y asegurarse de que los pods se crearon 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 5mActualizar El clúster de Rook (hasta una nueva versión) es un procedimiento que en esta etapa requiere una actualización secuencial de todos sus componentes en una secuencia determinada, y puede iniciarlo solo después de asegurarse de que la instalación actual de Rook esté completamente "saludable". estado. Puede encontrar instrucciones detalladas paso a paso utilizando el ejemplo de actualización de Rook versión 0.5.0 a 0.5.1 en .
El pasado mes de noviembre en el blog de Rook comparación productividad con EBS. Sus resultados son dignos de atención y, resumidamente, son los siguientes:


Perspectivas
El estado actual de Rook es alfa y el último lanzamiento importante hasta la fecha es , publicado en noviembre de 2017 (corrección actual - - salió el 14 de diciembre). Ya en el primer semestre de 2018 se esperan lanzamientos de versiones más maduras: beta y estable (oficialmente listas para su uso en producción).
según proyecto, los desarrolladores tienen una visión detallada para el desarrollo de Rook en al menos las dos próximas versiones: 0.7 (su preparación está en el rastreador de GitHub como 60%) y 0.8. Entre los cambios esperados se encuentran la transferencia del soporte para Ceph Block y Ceph Object al estado de versión beta, el aprovisionamiento dinámico de volúmenes para CephFS, un sistema de registro avanzado, actualizaciones automatizadas de clústeres y soporte para instantáneas de volúmenes.
Llevando a Rook al número (hasta ahora en una etapa muy temprana - "nivel inicial" - a la par con и ) es una especie de garantía del creciente interés por el producto. Cómo se afianzará en el mundo de las aplicaciones en la nube quedará más claro una vez que se lancen las versiones estables, lo que sin duda traerá nuevos probadores y usuarios a Rook.
PS
Lea también en nuestro blog:
- «";
- «";
- «";
- «";
- «".
Fuente: habr.com
