
29 января технический комитет организации CNCF (Cloud Native Computing Foundation), стоящей за Kubernetes, Prometheus и другими Open Source-продуктами из мира контейнеров и cloud native, о принятии проекта Rook в свои ряды. Отличный повод познакомиться поближе с этим «оркестровщиком систем распределённого хранения данных в Kubernetes».
Что за Rook?
— это написанное на Go программное обеспечение ( по свободной лицензии Apache License 2.0), предназначенное для наделения хранилищ данных автоматизированными функциями, которые делают их самоуправляемыми, самомасштабируемыми и самовосстановливающимися. Для этого Rook автоматизирует (для хранилищ данных, применяемых в окружении Kubernetes): развёртывание, bootstrapping, конфигурацию, provisioning, масштабирование, обновления, миграции, восстановление после сбоев, мониторинг и управление ресурсами.
Проект находится в альфа-стадии и специализируется на оркестровке распределённой системы хранения данных Ceph в кластерах Kubernetes. Авторы заявляют также о планах по поддержке других систем хранения, но это случится не в ближайших релизах.
Компоненты и техническое устройство
В основе работы Rook внутри Kubernetes — специальный оператор (подробнее о Kubernetes Operators мы писали в ), автоматизирующий конфигурацию хранилища и реализующий его мониторинг.
Итак, оператор Rook представляется контейнером, который содержит всё необходимое для развёртывания и последующего обслуживания хранилища. Среди обязанностей оператора:
- создание DaemonSet для демонов хранения Ceph () с простым кластером RADOS;
- создание подов для мониторинга Ceph (с , проверяющими состояние кластера; для кворума в большинстве случаев разворачиваются три экземпляра, и при падении любого из них поднимается новый);
- управление CRDs () для самого , , (наборов ресурсов и сервисов для обслуживания HTTP-запросов, выполняющих PUT/GET для объектов, — они совместимы с S3 и Swift API), а также ;
- инициализация подов для запуска всех нужных сервисов;
- создание агентов Rook.
Агенты Rook представлены отдельными подами, которые разворачиваются на каждом узле Kubernetes. Предназначение агента — конфигурация плагина , обеспечивающего поддержку томов хранения в Kubernetes. Агент реализует эксплуатацию хранилища: подключает сетевые устройства хранения, монтирует тома, форматирует файловую систему и т.п.

Место и роль компонентов Rook в общей схеме кластера Kubernetes
Rook предлагает три вида хранилищ:
- (Block,
StorageClass) — монтирует хранилище к единственному поду; - (Object,
ObjectStore) — доступно внутри и вне кластера Kubernetes (по S3 API); - (Shared File System,
Filesystem) — файловая система, которую можно монтировать на чтение и запись из множества подов.
Внутреннее устройство Rook включает в себя:
- Mons — поды для мониторинга Ceph (с уже упомянутыми ceph-mon);
- OSDs — поды с демонами ceph-osd (Object Storage Daemons);
- MGR — поды с демоном (Ceph Manager), предоставляющим дополнительные возможности мониторинга и интерфейсы для внешних систем (мониторинга/управления);
- RGW (опционально) — поды с объектным хранилищем;
- MDS (опционально) — поды с разделяемой ФС.

Все демоны Rook (Mons, OSDs, MGR, RGW, MDS) скомпилированы в единый бинарник (rook), запускаемый в контейнере.
Для краткого представления проекта Rook может пригодиться также эта небольшая (12 слайдов) от Bassam Tabbara (CTO в Quantum Corp).
Эксплуатация Rook
Оператор Rook полноценно поддерживает Kubernetes версии 1.6 и выше (и, частично, более старый релиз K8s — 1.5.2). Его инсталляция в выглядит так:
cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yamlКроме того, для оператора Rook подготовлен , благодаря чему инсталляция может проводиться и так:
helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook Имеется небольшое количество (например, можно отключить поддержку , если эта возможность не используется в вашем кластере), которые передаются в helm install через параметр --set key=value[,key=value] (или хранить в отдельном YAML-файле, а передавать — через -f values.yaml).
После установки оператора Rook и запуска подов с его агентами остаётся создать сам кластер Rook, простейшая конфигурация которого выглядит следующим образом (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Примечание: особое внимание стоит обратить на атрибут dataDirHostPath, корректное значение которого необходимо для сохранения кластера после перезагрузок. Для случаев его использования как постоянного места хранения данных Rook на хостах Kubernetes авторы рекомендуют иметь в этом каталоге хотя бы 5 Гб свободного дискового пространства.
Остаётся собственно создать кластер из конфигурации и убедиться, что поды создались в кластере (в пространстве имён 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Апгрейд кластера Rook (до новой версии) — это процедура, которая на данном этапе требует поочерёдного обновления всех его компонентов в определённой последовательности, а начинать её можно только после того, как вы удостоверились в полностью «здоровом» состоянии текущей инсталляции Rook. Подробную пошаговую инструкцию на примере обновления Rook версии 0.5.0 до 0.5.1 можно найти в .
В ноябре прошлого года в блоге Rook сравнение производительности с EBS. Его результаты достойны внимания, а если совсем вкратце, то они таковы:


Перспективы
Текущий статус Rook — alpha, а последним крупным релизом на сегодняшний день является , выпущенная в ноябре 2017 года (актуальное исправление — — вышло 14 декабря). Уже в первой половине 2018 года ожидаются релизы более зрелых версий: беты и стабильной (официально готовой для использования в production).
Согласно проекта, у разработчиков есть подробное видение по развитию Rook как минимум в двух ближайших релизах: 0.7 (его готовность в трекере GitHub как 60 %) и 0.8. Среди ожидаемых изменений — перевод поддержки Ceph Block и Ceph Object в статус бета-версии, динамический provisioning томов для CephFS, развитая система логирования, автоматизированные обновления кластера, поддержка снапшотов для томов.
Принятие Rook в число (пока что на самом раннем этапе — «inception-level», — наравне с и ) является своеобразной гарантией растущего интереса к продукту. Насколько он закрепится в мире облачных приложений, станет лучше ясно после появления стабильных версий, которые, безусловно, принесут Rook новых «испытателей» и пользователей.
P.S.
Читайте также в нашем блоге:
- «»;
- «»;
- «»;
- «»;
- «».
Источник: habr.com
