ceph
Если будешь ставить через cephadm, то качай версию pacific, почему-то более новые не работают.
Удобный установщик: https://git.lulzette.ru/lulzette/ceph-installer
сервисы
- osd: хранение данных
- mon: условно, controlplane, управляет данными, балансирует данные, управляет кворумом, метаданные тоже тут
- mgr: These include the Ceph Dashboard and the cephadm manager module, фигня на питоне которая дает дашборд, прометеус, restful api и всякую такую некритичную для работы кластера фигню
Как организовано хранение?
- Хосты с ролью OSD
- OSDшки (абстракция на уровне Ceph'а): 1 OSD на 1 Диск хоста, т.е. 10 дисков - 10 OSD на одном хосте
- PG (Placement Group): Группа размещения, т.е. на каких OSD размещать объекты Ceph'а (не путать с объектом на уровне S3/swift/rgw). Также есть Карта OSD, которая ассоциирована с PG, в ней указана одна Primary OSD и одна или несколько Replica OSD. Вся работа происходит с Primary OSD, а синк данных на реплики идет асинхронно.
Куда файлы засовывать?
Есть 3 разных хранилища (?):
- cephfs
- RBD (Rados Block Device)
- S3/Swift который предоставляется Rados Gateway
- Rados/librados - библиотека для твоего приложения которая может общаться с радосом минуя промежуточные RBD/S3/Swift
Проверить:
- Рассинхронизация времени на хоста
- See also:
https://bogachev.biz/2017/08/23/zametki-administratora-ceph-chast-1/
CephFS
Поднять MDS - сервер метаданных
Вообще достаточно просто
# mon
ceph fs volume create cephfs
root@microceph:~# ceph config generate-minimal-conf
# minimal ceph.conf for 56db00e1-912c-4ac1-9d1a-1f4194c55834
[global]
fsid = 56db00e1-912c-4ac1-9d1a-1f4194c55834
mon_host = [v2:10.99.99.74:3300/0,v1:10.99.99.74:6789/0]
root@microceph:~# ceph fs authorize cephfs client.foo / rw
[client.foo]
key = AQCGVs5lyBLmIxAApqSed51BlHOvQlyawvG2Uw==
# client
# может показаться что все что ниже, кроме команды монтирования, не имеет смысла, но не
root@test0:~# mkdir /etc/ceph
root@test0:~# vim /etc/ceph/ceph.conf
root@test0:~# vim /etc/ceph/ceph.client.foo.keyring
root@test0:~# chmod 644 /etc/ceph/ceph.conf
root@test0:~# chmod 600 /etc/ceph/ceph.client.foo.keyring
root@test0:~# mount -t ceph 10.99.99.74:/ /mnt/mycephfs -o secret=AQCGVs5lyBLmIxAApqSed51BlHOvQlyawvG2Uw== -o name=foo
# fstab:
10.99.99.74:/ /mnt/cephfs ceph name=foo,secret=AQCGVs5lyBLmIxAApqSed51BlHOvQlyawvG2Uw==,noatime,_netdev 0 2
+ k8s
Нам понадобится ключ для доступа к cephfs, закинуть в наш куб CSI (Container Storage Interface) с указанными параметрами
root@node1:~/cephfs# snap install helm --classic
helm 3.14.1 from Snapcrafters✪ installed
root@node1:~/cephfs# helm repo add ceph-csi https://ceph.github.io/csi-charts
"ceph-csi" has been added to your repositories
root@node1:~/cephfs# helm inspect values ceph-csi/ceph-csi-cephfs >cephfs.yml
root@node1:~/cephfs# vim cephfs.yml
# В файле я поменял параметры
#csiConfig:
# - clusterID: "56db00e1-912c-4ac1-9d1a-1f4194c55834"
# monitors:
# - "10.99.99.74:6789"
root@node1:~/cephfs# helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace
Release "ceph-csi-cephfs" does not exist. Installing it now.
NAME: ceph-csi-cephfs
LAST DEPLOYED: Thu Feb 15 18:58:51 2024
NAMESPACE: ceph-csi-cephfs
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Examples on how to configure a storage class and start using the driver are here:
https://github.com/ceph/ceph-csi/tree/v3.10.2/examples/cephfs
# Создаем секрет с доступами к пулу
vim cephfs-secret.yml
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# Required for dynamically provisioned volumes
adminID: foo
adminKey: AQCGVs5lyBLmIxAApqSed51BlHOvQlyawvG2Uw==
root@node1:~/cephfs# kubectl apply -f cephfs-secret.yml
secret/csi-cephfs-secret created
#### storageclass
root@node1:~/cephfs# kubectl apply -f cephfs-storageclass.yml
storageclass.storage.k8s.io/csi-cephfs-sc created
root@node1:~/cephfs# cat cephfs-storageclass.yml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
clusterID: 56db00e1-912c-4ac1-9d1a-1f4194c55834
fsName: cephfs
csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-cephfs
csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-cephfs
csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-cephfs
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- debug
#### test
root@node1:~/cephfs# kubectl apply -f cephfs-claim.yml
persistentvolumeclaim/csi-cephfs-pvc created
root@node1:~/cephfs# cat cephfs-claim.yml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: csi-cephfs-sc