Розгортання CephFS для розподіленої файлової системи
Уявіть: сотня серверів одночасно пише та читає файли з єдиного сховища, а консистентність даних — миттєва. RBD тут не підходить: він дає блочний пристрій тільки одному клієнту. Потрібна POSIX-файлова система поверх Ceph, і вона існує — CephFS. У цій статті — наш досвід розгортання CephFS під ключ: від налаштування MDS до інтеграції з Kubernetes та моніторингу. За 5+ років ми виконали 30+ проєктів, і 70% клієнтів обирають CephFS для shared storage.
Типові сценарії: shared storage для Kubernetes (ReadWriteMany PVC), спільне сховище для CI/CD runner-кешів, медіа-активи для кількох серверів додатків, Home-директорії користувачів на сотнях хостів. У кожного сценарію — свої вимоги до квот, продуктивності та відмовостійкості.
Як влаштована файлова система CephFS і чому це важливо для консистентності?
CephFS потребує MDS (MetaData Server) — сервіс, що керує метаданими (директорії, права, inode). Дані файлів зберігаються в RADOS, тільки метадані проходять через MDS. Активний MDS обробляє запити, standby чекає на відмову. Для продакшену мінімум 1 активний + 1 standby.
# Розгортаємо MDS через cephadm ceph orch apply mds cephfs --placement="3 ceph-node1 ceph-node2 ceph-node3" ceph fs volume create cephfs створює пули для даних і метаданих та запускає MDS однією командою. Але важлива деталь: пул метаданих має бути на найшвидших дисках. MDS кешує метадані в RAM, але при cache miss звертається до пулу. Повільний пул метаданих = повільний ls у директорії з тисячами файлів. Використовуйте device class для розміщення на NVMe: ceph osd pool set cephfs_metadata crush_rule nvme_replicated.
Практика розгортання: від ручного створення пулів до автоматизації
Якщо потрібен повний контроль над параметрами пулів, створюємо вручну:
# Пул для метаданих — невеликий, критичний за продуктивністю
ceph osd pool create cephfs_metadata 32 32
ceph osd pool set cephfs_metadata size 3
ceph osd pool set cephfs_metadata pg_autoscale_mode on
# Пул для даних — основний об'єм
ceph osd pool create cephfs_data 0 0 replicated
ceph osd pool set cephfs_data size 3
ceph osd pool set cephfs_data pg_autoscale_mode on
# Створюємо файлову систему
ceph fs new cephfs cephfs_metadata cephfs_data
Для автоматизації використовуємо Ansible або Terraform. Після створення — монтування на клієнтах. Ядерний клієнт (швидший): у /etc/fstab вкажіть MON-адреси та секрет. Для контрольованого доступу створіть мінімально привілейованого користувача:
ceph auth get-or-create client.cephfs-ro mon 'allow r' mds 'allow r' osd 'allow r pool=cephfs_data' -o /etc/ceph/ceph.client.cephfs-ro.keyring Що входить у роботу?
У рамках розгортання CephFS під ключ ми надаємо:
- Аудит поточної інфраструктури та проєктування кластера
- Розгортання MDS з multi-active за необхідності
- Налаштування пулів даних і метаданих з урахуванням device class
- Інтеграцію з Kubernetes через ceph-csi-cephfs (ReadWriteMany PVC)
- Створення subvolumes і квот для проєктів
- Tuning продуктивності MDS та пулу метаданих
- Моніторинг через Prometheus/Grafana з готовими дашбордами та алертами
- Документацію та навчання команди
- Технічну підтримку на старті
Як інтегрувати CephFS з Kubernetes? ReadWriteMany PVC через ceph-csi-cephfs
Для ReadWriteMany PVC використовуємо ceph-csi-cephfs. Helm-чарт створює StorageClass, секрет і CSI-драйвер. PVC з accessModes: ReadWriteMany — те, що неможливо з RBD:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-cache
spec:
accessModes:
- ReadWriteMany
storageClassName: ceph-cephfs
resources:
requests:
storage: 100Gi
CSI-драйвер створює subvolume — ізольований простір з квотою.
Subvolumes та квоти: ізоляція проєктів і контроль ресурсів
CephFS підтримує квоти на рівні директорій. Для ізольованих проєктів зручні subvolumes:
# Створюємо subvolumegroup
ceph fs subvolumegroup create cephfs kubernetes
# Subvolume з квотою
ceph fs subvolume create cephfs pvc-build-cache kubernetes --size 50GiBКвоти працюють через атрибути ceph.quota.max_bytes та ceph.quota.max_files. Для Kubernetes PVC квоти налаштовуються в StorageClass через параметри.
Продуктивність та tuning MDS: як уникнути вузьких місць
Налаштування кешу MDS критичне при великій кількості файлів. Типовий конфіг для workload з дрібними файлами:
[mds]
mds_cache_memory_limit = 8589934592 # 8 GB
mds_log_max_segments = 128
mds_tick_interval = 5
mds_dir_max_commit_size = 10485760 # 10 MB
mds_session_timeout = 60
Multi-active MDS (2 і більше) розділяє простір імен за директоріями — допомагає при hot-spots, але не лінійно масштабує продуктивність. Важливо стежити за latency: ceph_mds_request_latency_sum — якщо >100 мс, потрібно розширювати MDS або оптимізувати пул метаданих.
Моніторинг CephFS: ключові метрики та дашборди
Для продуктивної експлуатації використовуємо Prometheus + Grafana. Основні метрики:
| Метрика | Опис | Поріг спрацювання |
|---|---|---|
| ceph_mds_request_latency_sum | Латенція операцій з метаданими | >100 мс |
| ceph_mds_server_handle_client_request | Кількість запитів на секунду | >10000 req/s |
| ceph_pool_used_bytes | Зайняте місце в пулі даних | <80% ємності |
Налаштовуємо алерти в Alertmanager, створюємо дашборди з SLO/SLI.
Типові проблеми та їх вирішення (postmortem)
-
df -hпоказує неправильне вільне місце? CephFS віддає загальну ємність кластера. Використовуйте атрибутиceph.dir.rbytesз квотами. - NFS-клієнт не бачить змін? Вимкніть кеш директорій
dcache_timeout=0при монтуванні, але врахуйте зниження продуктивності на 15-20%. - MDS не перемикається на standby? Перевірте
ceph health detail— часто проблема в недоступності MON для standby.
Орієнтовні терміни та вартість
| Сценарій | Терміни |
|---|---|
| CephFS на існуючому кластері (MDS, пули, клієнти) | 2–3 дні |
| + Kubernetes CSI, subvolumes, квоти | 3–5 днів |
| + Multi-active MDS, tuning, моніторинг | 5–7 днів |
Вартість розраховується індивідуально після аудиту. Зв'яжіться з нами — отримайте консультацію та оцінку проєкту. Замовте розгортання CephFS під ключ для вашої інфраструктури. Наші інженери з 5+ років досвіду допоможуть реалізувати відмовостійке сховище з гарантією.







