[ceph] phase in ceph-volume
This commit is contained in:
parent
88f824dc3b
commit
8e853e65de
2 changed files with 17 additions and 89 deletions
|
@ -7,6 +7,7 @@ set -x
|
||||||
|
|
||||||
tmpdir=$(mktemp -d)
|
tmpdir=$(mktemp -d)
|
||||||
|
|
||||||
|
# XFS based partition scheme
|
||||||
for dev in $(fdisk -l | awk '$6 ~/Ceph/ { print $1 }'); do
|
for dev in $(fdisk -l | awk '$6 ~/Ceph/ { print $1 }'); do
|
||||||
mount "$dev" "$tmpdir"
|
mount "$dev" "$tmpdir"
|
||||||
id=$(cat "${tmpdir}/whoami")
|
id=$(cat "${tmpdir}/whoami")
|
||||||
|
|
|
@ -2,103 +2,30 @@
|
||||||
# 17:19, 2018-02-09
|
# 17:19, 2018-02-09
|
||||||
# Nico Schottelius
|
# Nico Schottelius
|
||||||
|
|
||||||
# Based on ceph-disk -v prepare --bluestore /dev/sdc --osd-id ${ID} --osd-uuid $(uuidgen) --crush-device-class "ssd"
|
|
||||||
|
|
||||||
# Create:
|
|
||||||
# - block -> link to partuuid
|
|
||||||
# - block_uuid -e> uuid if the block
|
|
||||||
# - ceph_fsid -> get from ceph-conf
|
|
||||||
# crush_device_class -> ssd, hdd
|
|
||||||
# fsid -> uuidgen!
|
|
||||||
# magic -> string "ceph osd volume v026"
|
|
||||||
# type -> bluestore
|
|
||||||
|
|
||||||
fsid=$(ceph-conf --cluster=ceph --name=osd. --lookup fsid)
|
|
||||||
fs_uuid=$(uuidgen)
|
|
||||||
magic="ceph osd volume v026"
|
|
||||||
|
|
||||||
set -x
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ $# -lt 2 ]; then
|
if [ $# -lt 2 ]; then
|
||||||
echo "$0 disk class [osdweight]"
|
echo "$0 disk class [nostart]"
|
||||||
echo "class = hdd or ssd"
|
echo "class = hdd or ssd"
|
||||||
|
echo "If specifying anything after the class, monit will not be created"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export DEV=$1;shift
|
export DEV=$1;shift
|
||||||
export CLASS=$1; shift
|
export CLASS=$1; shift
|
||||||
|
|
||||||
uuid_metadata=$(uuidgen)
|
# Ensure ceph-volume has all pre-requisites
|
||||||
uuid_block=$(uuidgen)
|
if [ ! -f /var/lib/ceph/bootstrap-osd/ceph.keyring ]; then
|
||||||
|
mkdir -p /var/lib/ceph/bootstrap-osd
|
||||||
osd_id=$(ceph osd create)
|
ceph auth get client.bootstrap-osd > /var/lib/ceph/bootstrap-osd/ceph.keyring
|
||||||
|
fi
|
||||||
dev_metadata="/dev/disk/by-partuuid/$uuid_metadata"
|
if [ ! -f /etc/ceph/ceph.client.bootstrap-osd.keyring ]; then
|
||||||
dev_block="/dev/disk/by-partuuid/$uuid_block"
|
ceph auth get client.bootstrap-osd > /etc/ceph/ceph.client.bootstrap-osd.keyring
|
||||||
|
|
||||||
/sbin/sgdisk --new=0:0:+100M --change-name="0:ceph data" \
|
|
||||||
--partition-guid="0:$uuid_metadata" \
|
|
||||||
--typecode=0:4fbd7e29-9d25-41b8-afd0-062c0ceff05d \
|
|
||||||
--mbrtogpt -- $DEV
|
|
||||||
/sbin/udevadm settle --timeout=600
|
|
||||||
|
|
||||||
# Using gdisk --largest-new does not change the name or set guid;
|
|
||||||
# So use 2 steps instead
|
|
||||||
/sbin/sgdisk --largest-new=0 --mbrtogpt -- $DEV
|
|
||||||
/sbin/udevadm settle --timeout=600
|
|
||||||
|
|
||||||
|
|
||||||
lastpart=$(gdisk -l $DEV | tail -n1 | awk '{ print $1 }')
|
|
||||||
/sbin/sgdisk --change-name="${lastpart}:ceph block" \
|
|
||||||
--partition-guid="${lastpart}:$uuid_block" \
|
|
||||||
--typecode="${lastpart}:cafecafe-9b03-4f30-b4c6-b4b80ceff106" \
|
|
||||||
--mbrtogpt -- $DEV
|
|
||||||
/sbin/udevadm settle --timeout=600
|
|
||||||
|
|
||||||
/sbin/mkfs -t xfs -f -i size=2048 -- "$dev_metadata"
|
|
||||||
|
|
||||||
mountpath=/var/lib/ceph/osd/ceph-${osd_id}
|
|
||||||
|
|
||||||
mkdir -p "$mountpath"
|
|
||||||
mount "$dev_metadata" "$mountpath"
|
|
||||||
|
|
||||||
ln -s $dev_block "$mountpath/block"
|
|
||||||
echo "$uuid_block" > "$mountpath/block_uuid"
|
|
||||||
echo "$fsid" > "$mountpath/ceph_fsid"
|
|
||||||
echo "$magic" > "$mountpath/magic"
|
|
||||||
|
|
||||||
# Important, otherwise --mkfs later will try to create filestore
|
|
||||||
echo bluestore > "$mountpath/type"
|
|
||||||
|
|
||||||
ceph auth get-or-create "osd.${osd_id}" osd \
|
|
||||||
'allow *' mon 'allow profile osd' > $mountpath/keyring
|
|
||||||
|
|
||||||
echo ${osd_id} > "$mountpath/whoami"
|
|
||||||
touch "$mountpath/sysvinit"
|
|
||||||
|
|
||||||
ceph-osd --cluster ceph -i "${osd_id}" --mkfs
|
|
||||||
chown -R ceph:ceph "$mountpath"
|
|
||||||
|
|
||||||
# Also allow access to the blockdevice
|
|
||||||
chown ceph:ceph ${dev_block}
|
|
||||||
|
|
||||||
if [ $# -eq 1 ]; then
|
|
||||||
WEIGHT=$1; shift
|
|
||||||
else
|
|
||||||
devname=$(readlink -f $dev_block)
|
|
||||||
nodev=$(echo $devname | sed 's,/dev/,,')
|
|
||||||
WEIGHT=$(lsblk -l -b | awk "/^$nodev/ { print \$4/(1024^4) }")
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Move into the correct position
|
ceph-volume lvm prepare --data $DEV --crush-device-class $CLASS
|
||||||
ceph osd crush add osd.${osd_id} ${WEIGHT} host=$(hostname)
|
|
||||||
|
|
||||||
# Ensure previous assigned class is gone - if the osd id was used before
|
if [ $# -eq 1 ]; then
|
||||||
ceph osd crush rm-device-class osd.${osd_id}
|
echo "Not executing: /opt/ungleich-tools/monit-ceph-create-start osd.${osd_id}"
|
||||||
ceph osd crush set-device-class $CLASS osd.${osd_id}
|
else
|
||||||
|
# Start it
|
||||||
echo "$metadata_dev /var/lib/ceph/osd/ceph-${osd_id} xfs noatime 0 0" >> /etc/fstab
|
/opt/ungleich-tools/monit-ceph-create-start osd.${osd_id}
|
||||||
|
fi
|
||||||
# Start it
|
|
||||||
/opt/ungleich-tools/monit-ceph-create-start osd.${osd_id}
|
|
||||||
|
|
Loading…
Reference in a new issue