NooBaa
-
NooBaa — это объектный сервис данных для гибридных и мультиоблачных сред
-
NooBaa можно запускать на Kubernetes (k8s);
*существуют и другие способы развёртывания NooBaa в зависимости от потребностей — подробнее см. репозиторий noobaa-core -
NooBaa — это высококастомизируемый и динамичный шлюз данных для объектов, предоставляющий такие сервисы, как кеширование, тиеринг, зеркалирование, дедупликация, шифрование и сжатие поверх любых хранилищ: Amazon (S3), Google (GCS), Azure (Blob), IBM (COS), других S3-совместимых систем, файловых систем (NSFS), пулов постоянных томов (PV-pool) и т.д.
-
NooBaa предоставляет S3-совместимый объектный сторедж (а также Lambda с триггерами на бакеты) клиентам как внутри, так и вне кластера; при этом использует хранилища как внутри, так и за пределами кластера с гибкими политиками размещения данных для автоматизации сценариев их использования
-
Цель NooBaa — упростить потоки данных для системных администраторов: подключиться к любому хранилищу в частном или публичном облаке и предоставить единый масштабируемый сервис данных через тот же API S3 и те же инструменты управления. NooBaa обеспечивает полный контроль над размещением данных с динамическими политиками на уровне бакета или аккаунта
NooBaa Operator
Оператор NooBaa (далее — Оператор) отслеживает изменения в NooBaa и выполняет согласование (reconcile) для приведения системы к желаемому состоянию.
-
Оператор NooBaa следует паттерну Operator pattern — подробную документацию можно найти в официальной документации Kubernetes
-
Операторы — это программные расширения Kubernetes, использующие пользовательские ресурсы (CR) для управления приложениями и их компонентами
-
Оператор NooBaa является контроллером. В Kubernetes контроллеры — это циклы управления, которые наблюдают за состоянием кластера и при необходимости вносят изменения или запрашивают их. Каждый контроллер стремится привести текущее состояние кластера к желаемому состоянию
-
Циклы согласования (Reconcile loops)
Пример системного согласователя — процесс разделён на следующие фазы:
-
Verifying — проверка корректности CR (образ NooBaa, адрес и т.д.)
-
Creating — создание необходимых ресурсов (секреты, сервисы и т.д.)
-
Connecting — заполнение статусов сервисов управления и S3, инициализация клиента для вызовов к серверу и т.д.
-
Configuring — создание хранилища по умолчанию (backingstore), класса бакетов по умолчанию (bucketclass) и т.д.
Начало работы
Установка
Установите последнюю версию CLI NooBaa (или выберите нужную на странице релизов):
OS="linux"
# или
OS="darwin"
ARCH=amd64
# или
ARCH=arm64
VERSION=$(curl -s https://api.github.com/repos/noobaa/noobaa-operator/releases/latest | jq -r '.name')
curl -LO https://github.com/noobaa/noobaa-operator/releases/download/$VERSION/noobaa-operator-$VERSION-$OS-$ARCH.tar.gz
tar -xvzf noobaa-operator-$VERSION-$OS-$ARCH.tar.gz
chmod +x noobaa-operator
mv noobaa-operator /usr/local/bin/noobaa
Установка через Mac Homebrew:
brew install noobaa/noobaa/noobaa
Установка NooBaa в Kubernetes:
# Создать пространство имён и сделать его текущим (опционально)
kubectl create ns noobaa
kubectl config set-context --current --namespace noobaa
# Установить оператор и систему в кластер:
noobaa install
# Получить статус и информацию о системе можно командой:
noobaa status
Использование
CLI NooBaa
CLI упрощает большинство задач администрирования и ориентирован на удобство работы как в ручном режиме, так и в скриптах.
Примечания:
-
Справка:
noobaa --help; для получения информации о конкретной команде используйтеnoobaa <command> --help -
kubeconfig— аналогичноkubectl: CLI работает с текущим контекстом из kubeconfig, который можно сменить черезexport KUBECONFIG=/path/to/custom/kubeconfigили с помощью флагов--kubeconfigи--namespace -
Локальные кластеры (minikube, Rancher Desktop): используйте
noobaa install --miniили--devдля выделения меньшего объёма ресурсов -
Удаление:
noobaa uninstall
Примеры:
Вот описание команд верхнего уровня:
1) Меню справки
$ noobaa help
# # # /~~\___~___/~~\ # # | | # # \~~|\ /|~~/ # # \| |/ # # | | # # \~~~/ # # # # N O O B A A # Install: install Install the operator and create the noobaa system upgrade Upgrade the system, its components and CRDS uninstall Uninstall the operator and delete the system status Status of the operator and the system Manage: backingstore Manage backing stores namespacestore Manage namespace stores bucketclass Manage bucket classes account Manage noobaa accounts obc Manage object bucket claims cosi Manage cosi resources diagnostics diagnostics of items in noobaa system sts Manage the NooBaa Security Token Service Advanced: operator Deployment using operator system Manage noobaa systems api Make api call bucket Manage noobaa buckets pvstore Manage noobaa pv store crd Deployment of CRDs olm OLM related commands Other Commands: completion Generates bash completion scripts options Print the list of global flags version Show version Use "noobaa <command> --help" for more information about a given command
(взято из ветки 5.16)
2) Меню параметров
Используется, когда нужно задать флаги, не привязанные к конкретной команде:
$ noobaa options
The following options can be passed to any command:
--admission=false: Install the system with admission validation webhook
--autoscaler-type='': The type of autoscaler (hpav2, keda)
--aws-sts-arn='': The AWS STS Role ARN which will assume role
--cosi-driver-path='/var/lib/cosi/cosi.sock': unix socket path for COSI
--cosi-sidecar-image='gcr.io/k8s-staging-sig-storage/objectstorage-sidecar/objectstorage-sidecar:v20221117-v0.1.0-22-g0e67387': The cosi side car container image
--db-image='quay.io/sclorg/postgresql-15-c9s': The database container image
--db-storage-class='': The database volume storage class name
--db-volume-size-gb=0: The database volume size in GB
--debug-level='default_level': The type of debug sets that the system prints (all, nsfs, warn, default_level)
--dev=false: Set sufficient resources for dev env
--disable-load-balancer=false: Set the service type to ClusterIP instead of LoadBalancer
--image-pull-secret='': Image pull secret (must be in same namespace)
--kubeconfig='': Paths to a kubeconfig. Only required if out-of-cluster
--manual-default-backingstore=false: allow to delete the default backingstore
--mini=false: Signal the operator that it is running in a low resource environment
-n, --namespace='default': Target namespace
--noobaa-image='noobaa/noobaa-core:6.0.0': NooBaa image
--operator-image='noobaa/noobaa-operator:6.0.0': Operator image
--pg-ssl-cert='': ssl cert for postgres (client-side cert - need to be signed by external pg accepted CA)
--pg-ssl-key='': ssl key for postgres (client-side cert - need to be signed by external pg accepted CA)
--pg-ssl-required=false: Force noobaa to work with ssl (external postgres - server-side) [if server cert is self-signed, needs to add --ssl-unauthorized]
--pg-ssl-unauthorized=false: Allow the client to work with self-signed ssl (external postgres - server-side)
--postgres-url='': url for postgresql
--prometheus-namespace='': namespace with installed prometheus for autoscaler
--pv-pool-default-storage-class='': The default storage class name for BackingStores of type pv-pool
--s3-load-balancer-source-subnets=[]: The source subnets for the S3 service load balancer
--show-secrets=false: Show the secrets in the status output
--sts-load-balancer-source-subnets=[]: The source subnets for the STS service load balancer
--test-env=false: Install the system with test env minimal resources
(взято из ветки 5.16)
3) Текущая версия
Для вывода текущей версии CLI и используемых образов:
$ noobaa version
INFO[0000] CLI version: 6.0.0 INFO[0000] noobaa-image: noobaa/noobaa-core:6.0.0 INFO[0000] operator-image: noobaa/noobaa-operator:6.0.0
Устранение неполадок
-
Убедитесь, что для подов NooBaa достаточно ресурсов:
-
kubectl describe pod | less -
kubectl get events --sort-by .metadata.creationTimestamp
-
-
Проверьте, что в кластере есть ровно один стандартный (default) класс хранения:
-
kubectl get sc -
либо укажите нужный класс хранения явно:
noobaa install --db-storage-class XXX --pv-pool-default-storage-class YYY
-
Документация
Документацию по оператору NooBaa и другим компонентам NooBaa для Kubernetes можно найти в директории noobaa-operator/doc, а также в noobaa-core/docs.
Документация по оператору сосредоточена в основном на пользовательских ресурсах Kubernetes (Custom Resources), которые предоставляет NooBaa: их назначение, определения, параметры и варианты использования. Документация по ядру охватывает API NooBaa, расширенные возможности, инструкции по настройке и архитектурные решения.
Ниже перечислены несколько важных документов:
-
NooBaa — базовая терминология и ссылки на видео
-
Совместимость с S3 API — обзор поддержки S3 API в NooBaa
-
Совместимость с AWS API — обзор поддержки вызовов AWS API в NooBaa
-
Определения пользовательских ресурсов (CRDs): пользовательский ресурс — это расширение API Kubernetes, которое не обязательно присутствует в стандартной установке. CRD позволяют создавать новые типы ресурсов без развёртывания дополнительного API-сервера. После установки пользовательского ресурса пользователи могут создавать, обновлять объекты и получать к ним доступ через
kubectl— так же, как и со встроенными ресурсами-
NooBaaSystem — базовый CRD для развёртывания системы NooBaa; представляет отдельную установку NooBaa, включающую набор подресурсов (backing-stores, bucket-classes и buckets)
-
BackingStore — ресурсы хранения. Используются для хранения дедуплицированных, сжатых и зашифрованных блоков данных
-
NamespaceStore — ресурсы данных. Используются для хранения и чтения данных в исходном (plain) виде
-
BucketClass — политики, применяемые к классу бакетов; определяют правила размещения данных
-
Типы бакетов — обзор бакетов данных и пространства имён, а также поддерживаемых сервисов
-
Репликация бакетов — обзор правил репликации бакетов в NooBaa, включая оптимизации на основе журналов, внутреннее устройство и примеры правил
-
Account — аккаунт используется для получения нового набора учётных данных для доступа к различным сервисам NooBaa
-
-
Запрос бакета (Bucket Claim):
-
OBC Provisioner — OBC (Object Bucket Claim, запрос объектного бакета) в настоящее время является основным CR для создания бакетов, однако постепенно выводится из использования в пользу COSI
-
COSI Provisioner — COSI (Container Object Storage Interface) — новый стандарт хранения объектов в Kubernetes (аналог CSI, Container Storage Interface) для создания бакетов объектного хранилища
-
-
База данных (DB):
-
По умолчанию используется PostgreSQL, развёрнутый внутри кластера
-
-
Прочее:
-
HA controller — контроллер высокой доступности ускоряет восстановление подов NooBaa при отказе узла
-
Admission Controller — использует механизм admission webhook в Kubernetes для валидации различных пользовательских ресурсов NooBaa
-
Дополнительная информация доступна по следующим ссылкам:
-
Репозиторий noobaa/noobaa-core
-
noobaa.io — сайт в процессе наполнения
Участие в разработке
-
Сделайте форк и склонируйте репозиторий:
git clone https://github.com/<username>/noobaa-operator(полная инструкция по процессу участия через GitHub доступна здесь) -
Используйте локальный кластер:
-
Minikube (
minikube start) -
Rancher Desktop
-
-
Установите
goиpython3через пакетный менеджер вашей системы -
Активируйте среду разработки в текущем шелле:
. devenv.sh -
Соберите проект:
make -
Для тестирования используйте алиас
nb, который запускает локальный оператор изbuild/_output/bin(алиас создаётся через devenv) -
Установите оператор и создайте систему командой:
nb install -
Прочее: