Содержание

Ceph: черновики

Общие сведения

# astra-version -b; ceph -v
1.8.3.8
ceph version 17.2.6 quincy (stable)

Минимальная система с одним диском:

# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda    252:0    0  20G  0 disk 
├─vda1 252:1    0   5G  0 part /
└─vda2 252:2    0  15G  0 part 

Идея заключается в установке работоспособного хранилища на один узел (сервер) с одним диском:!:
В данном случае ОС + ПО располагаются на первом отформатированном разделе диска, а второй сырой раздел будет отдан под данные

Первый узел

MON

Так как на первом узле будут три обязательные сущности (MON, OSD и MGR), то можно установить метапакет ceph и несколько вспомогательных:

apt install ceph \
            ceph-volume ceph-mgr-dashboard python3-distutils

Подготовка ключей и конфигураций FIXME:

CEPH="ceph"
UUID="$(cat /proc/sys/kernel/random/uuid)"
HOST="$(hostname -s)"
ADDR="$(hostname -i)"
CNET="$(ip r | grep $ADDR | awk '{print $1}')"
PNET="$CNET"
 
cat > /etc/ceph/$CEPH.conf << EOF
[global]
fsid = $UUID
mon initial members = $HOST
mon host = $ADDR
public network = $PNET
cluster network = $CNET
auth_allow_insecure_global_id_reclaim = false
osd_pool_default_pg_autoscale_mode = off
osd_pool_default_size = 1
osd_pool_default_min_size = 1
EOF
 
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring \
              --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
 
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring \
              --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
 
ceph-authtool --create-keyring /tmp/ceph.mon.keyring \
              --gen-key -n mon. --cap mon 'allow *'
 
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
 
monmaptool --create --add $HOST $ADDR --fsid $UUID /tmp/monmap
 
mkdir -pv /var/lib/ceph/mon/$CEPH-$HOST
ceph-mon --mkfs -i $HOST --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
chown -Rv ceph:ceph /var/lib/ceph/mon

Запуск:

systemctl       enable ceph-mon.target
systemctl --now enable ceph-mon@$HOST
 
ceph mon enable-msgr2
 
ceph --status

OSD

ceph-volume lvm create --data /dev/vda2
ceph --status

MGR

Нужен OSD для собственного пула .mgr

mkdir -pv /var/lib/ceph/mgr/$CEPH-$HOST
 
ceph auth get-or-create mgr.$HOST mon 'allow profile mgr' osd 'allow *' mds 'allow *' \
  -o /var/lib/ceph/mgr/$CEPH-$HOST/keyring
 
chown -Rv ceph:ceph /var/lib/ceph/mgr

Запуск:

systemctl       enable ceph-mgr.target
systemctl --now enable ceph-mgr@$HOST

Настройка:

ceph mgr module disable restful
 
ceph mgr module enable dashboard
ceph dashboard create-self-signed-cert
echo 'password' > /tmp/password.txt
ceph dashboard ac-user-create admin -i /tmp/password.txt administrator
 
ss -lntp | grep 443

Подключение к libvirt

Название RBD-пула:

POOL="libvirt"

Создание:

ceph osd pool create $POOL
ceph osd pool set $POOL pg_autoscale_mode on
ceph osd pool application enable $POOL rbd
rbd pool init $POOL
#ceph auth get-or-create client.$POOL mon "allow r" osd "allow rwx pool=$POOL"
#ceph auth get-or-create client.$POOL mon "profile rbd" osd "profile rbd pool=$POOL"
echo; ceph auth get-key client.$POOL; echo; echo

Последняя строка - это значение SECRET (см. далее)

Подготовка libvirt:

apt install libvirt-daemon-driver-storage-rbd qemu-block-extra
systemctl restart libvirtd

Регистрация «секрета»:

SECRET='(см.выше)'
SECRET_UUID="$(cat /proc/sys/kernel/random/uuid)"
 
virsh secret-list
 
cat > /tmp/secret.xml << EOF
<secret ephemeral='no' private='no'>
  <uuid>$SECRET_UUID</uuid>
  <usage type='ceph'>
    <name>client.libvirt secret</name>
  </usage>
</secret>
EOF
 
virsh secret-define /tmp/secret.xml
virsh secret-set-value --secret $SECRET_UUID --base64 "$SECRET"
 
virsh secret-list

Подключение FIXME:

MON="<mon-ip>"
POOL="libvirt"
 
virsh pool-define-as ceph-pool rbd \
  --source-host $MON \
  --source-name $POOL \
  --auth-type ceph \
  --auth-username libvirt \
  --secret-uuid $SECRET_UUID
 
virsh pool-start ceph-pool
virsh pool-autostart ceph-pool
virsh pool-info ceph-pool

Пример:

<pool type="rbd">
  <name>ceph-pool</name>
  <uuid>f33ffc11-5258-42d9-a3b4-29d56deae4d4</uuid>
  <capacity unit="bytes">16101933056</capacity>
  <allocation unit="bytes">4096</allocation>
  <available unit="bytes">16073302016</available>
  <source>
    <host name="192.168.0.1" port='6789'/>
    <host name="192.168.0.2"/>
    <host name="192.168.0.3"/>
    <name>libvirt</name>
    <auth type="ceph" username="libvirt">
      <secret uuid="fd293801-a4c6-486a-a741-430a947f2824"/>
    </auth>
  </source>
</pool>

Удаление пула

ceph config set global mon_allow_pool_delete true
ceph osd pool ls
 
ceph osd pool delete libvirt libvirt --yes-i-really-really-mean-it
ceph osd pool ls

. . . РАЗОБРАТЬ . . .

/var/lib/ceph/crash

# systemctl status ceph-crash
○ ceph-crash.service - Ceph crash dump collector
     Loaded: loaded (/lib/systemd/system/ceph-crash.service; disabled; preset: enabled)
     Active: inactive (dead)
    <pool type='rbd'>
      <name>my_rbd_pool</name>
      <source>
        <name>rbd_pool_name_in_ceph</name>
        <host name='monitor1.example.org' port='6789'/>
        <host name='monitor2.example.org' port='6789'/>
        <auth type='ceph' username='libvirt_user'>
          <secret usage='libvirt_user_secret'/>
        </auth>
      </source>
      <target>
        <path>/dev/rbd/rbd_pool_name_in_ceph</path>
      </target>
    </pool>