Home » Как настроить кластер Ceph в Kubernetes с помощью Rook
Как настроить кластер Ceph в Kubernetes с помощью Rook

Как настроить кластер Ceph в Kubernetes с помощью Rook

Сегодня разберёмся, как быстро и без боли поднять распределённое хранилище Ceph в Kubernetes с помощью Rook. Если ты когда-нибудь сталкивался с задачей организовать отказоустойчивое, масштабируемое и при этом не слишком геморройное хранилище для своих контейнеров — этот пост для тебя. Будет много практики, примеры команд, схемы, подводные камни и лайфхаки. Всё, чтобы ты мог не только настроить Ceph-кластер в Kubernetes, но и понять, как это работает, где грабли, а где — профит. Поехали!

Зачем вообще Ceph и почему через Rook?

Ceph — это не просто сетевое хранилище, а целая экосистема для хранения данных: блочные устройства, объектное хранилище (S3-совместимое), файловая система. Он умеет самовосстанавливаться, масштабируется горизонтально, переживает падения нод и дисков. В Kubernetes Ceph чаще всего нужен для:

  • Блочного хранения (PersistentVolume для баз данных, очередей, приложений с состоянием)
  • Объектного хранилища (аналог S3, MinIO, etc.)
  • Файлового хранилища (CephFS — для шаринга данных между подами)

Но вот беда: Ceph — штука сложная, с кучей демонов, конфигов и нюансов. И тут на сцену выходит Rook — оператор для Kubernetes, который автоматизирует развёртывание и управление Ceph-кластером. Rook превращает Ceph в “Kubernetes-native” сервис: всё через CRD, всё через kubectl, всё в YAML.

Как это работает?

В двух словах: Rook — это оператор (Kubernetes Operator), который запускает Ceph внутри кластера Kubernetes. Ты описываешь в YAML, что тебе нужно (сколько дисков, какие сервисы), а Rook сам разворачивает нужные поды, следит за состоянием, обновляет, чинит, скейлит.

Вся магия строится на нескольких компонентах:

  • Rook Operator — мозг, который следит за Ceph-кластером и реагирует на изменения
  • Ceph Monitors (MON) — следят за состоянием кластера
  • Ceph OSD (Object Storage Daemon) — хранят данные на дисках
  • Ceph Manager (MGR) — метрики, управление, плагины
  • Ceph MDS (Metadata Server) — для CephFS
  • Ceph RGW (Rados Gateway) — для S3-совместимого API

Всё это запускается как поды в Kubernetes, а сами данные хранятся на дисках (или PVC), которые ты выделяешь для Ceph.

Как быстро и просто всё настроить?

Переходим к самому вкусному — пошаговая инструкция, как поднять Ceph-кластер в Kubernetes с помощью Rook.

  1. Подготовь железо
    Минимум 3 ноды (можно и на одной, но смысла мало), на каждой — отдельный диск (или хотя бы отдельный PVC). Желательно, чтобы Kubernetes был установлен (kubeadm, k3s, microk8s — не важно).
  2. Установи Rook Operator
    Самый простой способ — через манифесты с GitHub:

    kubectl create -f https://raw.githubusercontent.com/rook/rook/v1.13.2/deploy/examples/crds.yaml
    kubectl create -f https://raw.githubusercontent.com/rook/rook/v1.13.2/deploy/examples/common.yaml
    kubectl create -f https://raw.githubusercontent.com/rook/rook/v1.13.2/deploy/examples/operator.yaml

    Актуальные версии и примеры — https://rook.io/docs/rook/latest/
  3. Создай Ceph-кластер
    Пример простого кластера (файл cluster.yaml):

    apiVersion: ceph.rook.io/v1
    kind: CephCluster
    metadata:
    name: rook-ceph
    namespace: rook-ceph
    spec:
    cephVersion:
    image: quay.io/ceph/ceph:v18.2.0
    dataDirHostPath: /var/lib/rook
    mon:
    count: 3
    allowMultiplePerNode: false
    storage:
    useAllNodes: true
    useAllDevices: true
    config:
    osdsPerDevice: "1"

    Запусти:

    kubectl create namespace rook-ceph
    kubectl apply -f cluster.yaml

    Внимание!

    • useAllNodes/useAllDevices — опасно на проде, может забрать все диски. Лучше явно указывать, какие диски использовать.
    • Для теста — норм, для продакшена — читай доку!
  4. Проверь статус

    kubectl -n rook-ceph get pods
    kubectl -n rook-ceph get cephcluster

    Ждём, пока все поды станут Running и статус кластера — HEALTH_OK.
  5. Создай StorageClass
    Пример для блочного хранилища (RBD):

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
    name: rook-ceph-block
    provisioner: rook-ceph.rbd.csi.ceph.com
    parameters:
    clusterID: rook-ceph
    pool: replicapool
    imageFormat: "2"
    imageFeatures: layering
    csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
    csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
    csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
    csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
    reclaimPolicy: Delete
    allowVolumeExpansion: true


    kubectl apply -f storageclass.yaml
  6. Проверь, что всё работает
    Создай PVC и под, использующий этот StorageClass:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: ceph-pvc
    spec:
    storageClassName: rook-ceph-block
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: 5Gi
    ---
    apiVersion: v1
    kind: Pod
    metadata:
    name: ceph-test
    spec:
    containers:
    - name: ceph-test
    image: busybox
    command: [ "sleep", "3600" ]
    volumeMounts:
    - mountPath: "/mnt/ceph"
    name: ceph-vol
    volumes:
    - name: ceph-vol
    persistentVolumeClaim:
    claimName: ceph-pvc


    kubectl apply -f test-pod.yaml

    Если под стартует и видит диск — поздравляю, у тебя работает Ceph в Kubernetes!

Примеры, схемы, практические советы

  • Положительный кейс:
    На одном из проектов Ceph через Rook позволил быстро поднять отказоустойчивое хранилище для PostgreSQL и MinIO. После падения одной ноды — данные остались целы, сервисы не упали. Масштабирование — просто добавляешь новые ноды, Ceph сам раскидывает данные.
  • Отрицательный кейс:
    На тестовом кластере забыли ограничить, какие диски использовать — Ceph забрал все диски, включая системные. Итог — падение кластера, потеря данных. Рекомендация: всегда явно указывай, какие диски отдаёшь Ceph!
Решение Плюсы Минусы Когда использовать
Ceph + Rook
  • Масштабируемость
  • Отказоустойчивость
  • Гибкость (блок, объект, FS)
  • Автоматизация через Kubernetes
  • Сложность настройки
  • Требует ресурсов
  • Нужно следить за состоянием
Нужен отказоустойчивый storage в k8s, много данных, автоматизация
NFS + provisioner
  • Просто
  • Дёшево
  • Подходит для небольших нагрузок
  • Нет HA
  • Один SPOF
  • Проблемы с производительностью
Тестовые стенды, небольшие проекты
Longhorn
  • Просто ставится
  • UI
  • HA
  • Только блочное хранилище
  • Меньше гибкости, чем Ceph
Если нужен только блочный storage и простота

Похожие решения, программы и утилиты

  • Longhorn — блочное хранилище для Kubernetes, проще Ceph, но только блочное
  • OpenEBS — контейнеризированное блочное хранилище, много движков
  • MinIO — объектное хранилище, S3-совместимое, можно использовать как отдельный сервис
  • NFS Provisioner — для простых задач, без HA

Статистика и сравнение

  • Ceph — один из самых популярных open-source storage-решений для Kubernetes (по данным CNCF, используется в 30% production-кластеров с stateful workload)
  • Rook — официальный проект CNCF, поддерживается сообществом и крупными компаниями
  • Производительность Ceph на SSD — до 100 000 IOPS на ноду (зависит от железа и сети)
  • Longhorn — проще, но не умеет объектное/файловое хранилище

Интересные факты и нестандартные способы использования

  • Ceph через Rook можно использовать не только для Kubernetes, но и как отдельный storage для bare-metal серверов (например, монтировать RBD-диски на виртуалки или физические машины)
  • Можно сделать гибрид: Ceph для баз данных, а MinIO для S3-совместимого API — оба через Rook
  • CephFS позволяет шарить данные между подами — удобно для ML/AI пайплайнов, где нужно быстро делиться файлами
  • Rook поддерживает автоматическое обновление Ceph — можно обновлять кластер без даунтайма (но лучше сначала на тесте!)
  • Можно интегрировать Ceph с Prometheus/Grafana для мониторинга — метрики по IOPS, latency, состоянию кластера

Новые возможности: автоматизация и скрипты

С Rook и Ceph ты получаешь не только отказоустойчивое хранилище, но и мощный инструмент для автоматизации:

  • Можно создавать/удалять storage через kubectl и CI/CD пайплайны (YAML as code)
  • Автоматическое масштабирование — добавляешь ноды, Ceph сам раскидывает данные
  • Снапшоты и клоны PVC — удобно для тестов, откатов, миграций
  • Интеграция с ArgoCD, Helm, Terraform — полный GitOps
  • Можно писать свои контроллеры, которые будут создавать storage под разные задачи (например, для каждого нового проекта — отдельный пул Ceph)

Выводы и рекомендации

Ceph через Rook — это мощный, гибкий и современный способ организовать отказоустойчивое хранилище в Kubernetes. Да, порог входа выше, чем у NFS или Longhorn, но и возможностей на порядок больше: блочное, объектное, файловое хранилище, автоматизация, масштабируемость, HA. Если у тебя серьёзные задачи, много данных, нужны снапшоты, клоны, S3 — смело пробуй Ceph+Rook.

Рекомендации:

  • Для теста — можно использовать useAllNodes: true, для продакшена — всегда явно указывай диски
  • Следи за состоянием кластера (ceph status, метрики)
  • Не забывай про бэкапы — Ceph не панацея от всех бед
  • Используй автоматизацию: Helm, ArgoCD, Terraform
  • Для небольших проектов — смотри в сторону Longhorn или OpenEBS

Если хочешь попробовать всё это на практике — заказывай VPS или выделенный сервер и экспериментируй. А если остались вопросы — пиши в комментарии, разберём любые кейсы!

Официальная документация и полезные ссылки:

Удачи в автоматизации и пусть твой storage всегда будет HEALTH_OK!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked