Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save spinolacastro/4f43093725d5e4e1caf95d539652f4c0 to your computer and use it in GitHub Desktop.
Save spinolacastro/4f43093725d5e4e1caf95d539652f4c0 to your computer and use it in GitHub Desktop.
Kubernetes Ceph Volume Recycler
#!/bin/bash
AVAILABLE_VOLUMES=30
VOLUME_SIZE="1Gi 2Gi 5Gi 10Gi"
OSM="osmbr1:6789"
KEYRING="/etc/ceph/ceph.client.openshift.keyring"
POOL=rbd
USER=openshift
multi ()
{
for gi in $1;
do
mb=$(grep -o '[0-9]\+' <<<$gi);
let kb=$mb*1024;
echo "$kb";
done
}
add_pv() {
name=$RANDOM
rbd create $name --size=$(multi $size) --pool $POOL --id $USER -m $OSM -k $KEYRING
#cat <<EOF
oc create -f - <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: "ceph-$name"
labels:
size: $size
spec:
capacity:
storage: "$size"
accessModes:
- "ReadWriteOnce"
rbd:
monitors:
- "monitor1:6789"
- "monitor2:6789"
- "monitor3:6789"
- "monitor4:6789"
pool: $POOL
image: "${name}"
user: $USER
keyring: $KEYRING
fsType: ext4
readOnly: false
persistentVolumeReclaimPolicy: "Retain"
EOF
}
#Delete Released pv's
pv=$(oc get pv -o jsonpath --template='{.items[?(@.status.phase=="Released")].metadata.name}')
if [ ! -z "$pv" ]; then
for i in $pv; do
echo "Removendo volume $i"
oc delete pv/$i
echo "Removendo imagem ceph ${i##*-}"
rbd rm ${i##*-} --pool $POOL --id $USER -m $OSM -k $KEYRING
done
fi
#Keep AVAILABLE_VOLUMES
for size in $VOLUME_SIZE; do
volume=($(oc get pv -l size=$size -o jsonpath --template='{.items[?(@.status.phase=="Available")].metadata.name}'))
if [ ${#volume[*]} -lt ${AVAILABLE_VOLUMES} ]; then
vols=$((${AVAILABLE_VOLUMES}-${#volume[*]}))
echo "precisamos de ${vols} volumes de $size"
i=1
while [ $i -le $vols ]; do
echo "criando volume $i de $vols de tamanho $size"
add_pv $size
(( i++ ))
done
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment