Прописать hostname
Прописать все хосты в /etc/hosts
....
192.168.100.11 ceph1 ceph1
192.168.100.21 ceph2 ceph2
192.168.100.31 ceph3 ceph3
Раскидать ssh ключики под root на все хосты и разрешить RootLogin:
vim /etc/openssh/sshd_config
PermitRootLogin without-password или PermitRootLogin yes
Устанавливаем ceph-deploy на все ноды:
for i in {1..3}; do ssh ceph$i apt-get update && apt-get install ceph-deploy -y; done
Создаем каталог для конфигов Ceph:
mkdir /etc/cephcd /etc/ceph
Создаем новый кластер:
ceph-deploy new ceph1 ceph2 ceph3
Устанавливаем дистрибутив Ceph на машины:
ceph-deploy install ceph1 ceph2 ceph3
На все 3 ноды будем устанавливать все сервисы, необходимые для кластера. Но при наличии большого количества серверов так делать явно не стоит
Создаем мониторы, указанные при создании кластера:
ceph-deploy mon create-initial
Очищаем и готовим диски к добавлению в кластер:
ceph-deploy disk zap ceph1 /dev/sdb && ceph-deploy disk zap ceph2 /dev/sdb && ceph-deploy disk zap ceph3 /dev/sdb
Превращаем диски в OSD и создаем соответствующие демоны:
ceph-deploy osd create ceph1 --data /dev/sdb && ceph-deploy osd create ceph2 --data /dev/sdb && ceph-deploy osd create ceph3 --data /dev/sdb
ceph-deploy mgr create ceph1 ceph2 ceph3
Во избежание ошибки отключаем:
ceph config set mon auth_allow_insecure_global_id_reclaim false
Создание полноценной файловой системы:
ceph osd pool create cephfs_data 32
ceph osd pool create cephfs_metadata 32
ceph fs new cephfs cephfs_metadata cephfs_data
ceph fs ls
Создание пользователя:
ceph auth get-or-create client.fsuser mon 'allow r' mds 'allow r, allow rw path=/data_path' osd 'allow rw pool=cephfs_data'
ceph auth get-key client.fsuser > /etc/ceph/fsuser.secret
Временно монтируем под админом, что бы создать каталог:
mkdir -p /mnt/cephfs
mount.ceph 192.168.100.10:/ /mnt/cephfs -o name=admin,secret=`ceph auth get-key client.admin`
mkdir -p /mnt/cephfs/data_path
Монтирование на клиенте
mkdir /mnt/fsuser
mount.ceph 192.168.100.10,192.168.100.20,192.168.100.30:/ /mnt/fsuser -o name=fsuser,secret='password'
Авто-монтирование фс на клиенте:
192.168.100.10,192.168.100.20:/data_path /mnt/fsuser ceph name=fsu
ser,secretfile=/etc/ceph/fsuser.secret,netdev,noatime 0 0
#netdev - монтирование после загрузки сети
Создать свой пул:
ceph osd pool create kube 64 #kube-name, 64-кол-во pg
Разрешить пользование пулом, например для kubernetes:
ceph osd pool application enable kube kubernetes
Создание пользователя и выдаем полные права на пул:
ceph auth get-or-create client.user mon 'allow r, allow command "osd blacklist"' osd 'allow rwx pool=kube'
Вставить выданное в /etc/ceph/ceph.client.user.keyring
Создать простой диск в пуле
rbd create disk1 --size 1G --pool kube
Подключение диска
rbd map disk1 --pool kube --id=user
Автоматический мап диска
vim /etc/ceph/rbdmap
kube/disk1 id=user,keyring=/etc/ceph/ceph.client.user.keyring
Включить службу авто маппинга
systemctl enable --now rbdmap.service
Авто монтирование в fstab
/dev/rbd/kube/disk1 /mnt/rbd0 ext4 noauto 0 0
TIPS:
ceph osd lspools #Просмотреть пулы
ceph osd pool set .mgr pg_num 32 #Изменение кол-ва pg
Вычисление необходимого кол-ва pg:
Total PGs = (Number OSD * 100) / max_replication_count.
То есть при наличие 3х серверов с 3 репликами и всего 1 пулом стоит указывать 64-128 pg. Хотя, конечно же, не стоит забывать что всё зависит от конкретной ситуации, мощности серверов и их конфигурации.