- Home »

Как настроить кластер 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.
-
Подготовь железо
Минимум 3 ноды (можно и на одной, но смысла мало), на каждой — отдельный диск (или хотя бы отдельный PVC). Желательно, чтобы Kubernetes был установлен (kubeadm, k3s, microk8s — не важно). -
Установи 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/ -
Создай 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 — опасно на проде, может забрать все диски. Лучше явно указывать, какие диски использовать.
- Для теста — норм, для продакшена — читай доку!
-
Проверь статус
kubectl -n rook-ceph get pods
kubectl -n rook-ceph get cephcluster
Ждём, пока все поды станутRunning
и статус кластера —HEALTH_OK
. -
Создай 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
-
Проверь, что всё работает
Создай 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 |
|
|
Нужен отказоустойчивый storage в k8s, много данных, автоматизация |
NFS + provisioner |
|
|
Тестовые стенды, небольшие проекты |
Longhorn |
|
|
Если нужен только блочный 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!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.