Skip to content

Instantly share code, notes, and snippets.

@huynp1999
Last active September 12, 2022 10:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save huynp1999/45b6d7f425e02395cc77aae4be356415 to your computer and use it in GitHub Desktop.
Save huynp1999/45b6d7f425e02395cc77aae4be356415 to your computer and use it in GitHub Desktop.
Onetap - Ceph lab simple script
#!/bin/bash
# this script only works on Centos 8 (maybe 7)
# first, we need to provide hostnames in /etc/hosts
# assume all osd nodes has the same number of disks (eg: vdb, vdc)
# usage:
# bash ceph-deploy.sh
admin="ceph1 ceph2 ceph3"
mon="ceph1 ceph2 ceph3"
#mds="ceph1 ceph2 ceph3"
osd="ceph1 ceph2 ceph3"
vd="b c"
codename=$2
version=$2
os="el8"
if [ -z "$1" ]
then
echo "No argument supplied"
echo "-r: install ceph from repo, need to provide codename (install lastest version)"
echo " e.g: bash ceph-deploy -r octopus"
echo "-p: install ceph from downloaded packages, need to provide version (install specific versions)"
echo " e.g: bash ceph-deploy -p 14.2.18"
else
for i in $admin; do ssh root@$i 'sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*; sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*; sed -i -e "s|baseurl=http://mirror.vccloud.vn|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*'; done
echo "########################################"
echo "DONE fix repo"
echo "########################################"
for i in $admin; do ssh root@$i 'yum install python2 wget -y'; done
yum install python2-pip -y
pip2 install ceph-deploy
echo "########################################"
echo "DONE install python2 pip cephdeploy"
echo "########################################"
if [ "$1" = "-r" ]; then
cat <<EOF> /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-octopus/el8/x86_64/
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-octopus/el8/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-octopus/el8/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
EOF
sed -i "s|octopus|"$codename"|" /etc/yum.repos.d/ceph.repo
for i in $admin; do scp /etc/yum.repos.d/ceph.repo root@$i:/etc/yum.repos.d; done
for i in $admin; do ssh root@$i 'yum install ceph -y'; done
elif [ "$1" = "-p" ]; then
mkdir /root/ceph-pkgs
cd /root/ceph-pkgs
wget https://download.ceph.com/rpm-$version/$os/x86_64/ -O index.html
for i in `cat index.html | grep $version-0.$os.x86_64 | awk -F ">" '{print $2}' | awk -F "<" '{print $1}' | grep -v "debug\|test\|resource\|rbd-fuse\|rbd-nbd\|rbd-mirror\|python34\|rados-objclass\|devel\|cephfs-java\|fuse\|ceph-radosgw\|index.html\|compat\|jni1"`;do wget https://download.ceph.com/rpm-$version/$os/x86_64/${i};done
for i in ceph-mgr-modules-core ceph-volume; do wget https://download.ceph.com/rpm-$version/$os/noarch/$i-$version-0.$os.noarch.rpm; done
fi
echo "########################################"
echo "DONE download ceph packages"
echo "########################################"
for i in $admin; do scp -r /root/ceph-pkgs root@$i:/root; done
for i in $admin; do ssh root@$i 'yum --nogpgcheck localinstall /root/ceph-pkgs/*.rpm -y'; done
echo "########################################"
echo "DONE install ceph packages on all hosts"
echo "########################################"
for i in $admin; do ssh root@$i 'systemctl restart chronyd; chronyc -a makestep; chronyc -a makestep; chronyc -a makestep; chronyc -a makestep; chronyc -a makestep; chronyc -a makestep'; done
sed -i 's/if not codename or not _get_distro/#if not codename or not _get_distro/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py
sed -i 's/raise exc.UnsupportedPlatform/#raise exc.UnsupportedPlatform/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py
sed -i 's/distro=distro_name,/#distro=distro_name,/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py
sed -i 's/codename=codename,/#codename=codename,/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py
sed -i 's/release=release)/#release=release)/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py
mkdir /root/ceph-cluster
rm /root/ceph-cluster/*:
cd /root/ceph-cluster
ceph-deploy new $mon
echo "########################################"
echo "DONE new"
echo "########################################"
cat <<EOF >> ceph.conf
public_network = 10.5.88.0/22
cluster_network = 10.5.88.0/22
mon_allow_pool_delete = true
EOF
echo "########################################"
echo "DONE config"
echo "########################################"
ceph-deploy mon create-initial
sleep 10
echo "########################################"
echo "DONE mon init"
echo "########################################"
ceph-deploy admin $admin
ceph-deploy mgr create $mon
ceph-deploy mds create $mds
echo "########################################"
echo "DONE admin, mgr and mds"
echo "########################################"
for i in $osd; do for j in $vd; do ssh root@$i "ceph-volume lvm zap /dev/vd$j --destroy"; done; done
for i in $osd
do
ssh root@$i "lsblk | awk '{print \$1}' | grep ceph | cut -c 3-" > /tmp/abc
for lvs in `cat /tmp/abc`
do
dmsetup remove $lvs
done
done
for i in $osd; do for j in $vd; do ssh root@$i "wipefs -af /dev/vd$j"; done; done
echo "########################################"
echo "DONE zap all devices"
echo "########################################"
for i in $osd; do for j in $vd; do ceph-deploy osd create --data /dev/vd$j $i; done; done
echo "########################################"
echo "DONE add osds"
echo "########################################"
echo "########################################"
echo "DONE deploy ceph cluster !!!"
echo "########################################"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment