NooBaa: объектный шлюз для Kubernetes и мультиоблака

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)

Пример системного согласователя — процесс разделён на следующие фазы:

  1. Verifying — проверка корректности CR (образ NooBaa, адрес и т.д.)

  2. Creating — создание необходимых ресурсов (секреты, сервисы и т.д.)

  3. Connecting — заполнение статусов сервисов управления и S3, инициализация клиента для вызовов к серверу и т.д.

  4. 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):

  • Прочее:

    • HA controller — контроллер высокой доступности ускоряет восстановление подов NooBaa при отказе узла

    • Admission Controller — использует механизм admission webhook в Kubernetes для валидации различных пользовательских ресурсов NooBaa

Дополнительная информация доступна по следующим ссылкам:

Участие в разработке

  • Сделайте форк и склонируйте репозиторий: 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

  • Прочее:

© 2026 meganuke