Skip to content

Instantly share code, notes, and snippets.

@phenri00
Forked from caruccio/ebs-pvc-migrate.sh
Created May 14, 2020 07:24
Show Gist options
  • Select an option

  • Save phenri00/ceb45e61e3f63d9402b68da90c2bd6cb to your computer and use it in GitHub Desktop.

Select an option

Save phenri00/ceb45e61e3f63d9402b68da90c2bd6cb to your computer and use it in GitHub Desktop.

Revisions

  1. @caruccio caruccio revised this gist Feb 20, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion migrate-pv-to-zone.sh
    Original file line number Diff line number Diff line change
    @@ -36,7 +36,7 @@ if [ $REPLICAS -gt 0 ]; then
    while sleep 0.1; do
    echo
    oc -n $NAMESPACE get pod
    read -p "Press ENTER to continuar" -t 3 || continue
    read -p "Press ENTER to continue" -t 3 || continue
    break
    done

  2. @caruccio caruccio created this gist Feb 16, 2018.
    70 changes: 70 additions & 0 deletions migrate-pv-to-zone.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,70 @@
    #!/bin/bash

    set -eu

    NAMESPACE=$1
    PVCNAME=$2
    TARGETZONE=$3
    DEPLOYMENTOBJ=$4
    PVNAME=$(oc -n $NAMESPACE get pvc $PVCNAME --template={{.spec.volumeName}})
    VOLUMEID=$(oc -n $NAMESPACE get pv $PVNAME --template={{.spec.awsElasticBlockStore.volumeID}} | cut -d/ -f 4)
    REPLICAS=$(oc -n $NAMESPACE get $DEPLOYMENTOBJ --template={{.spec.replicas}})

    cat <<EOF
    Summary
    Namespace ---------- $NAMESPACE
    Deployment object -- $DEPLOYMENTOBJ
    PVC Name ----------- $PVCNAME
    PV Name ------------ $PVNAME
    Target Zone -------- $TARGETZONE
    Volume Id ---------- $VOLUMEID
    Original Replicas -- $REPLICAS
    EOF

    read -p 'Press ENTER to continue'
    echo

    if [ $REPLICAS -gt 0 ]; then
    echo -n "Scaling down $DEPLOYMENTOBJ: $REPLICAS -> 0"
    oc -n $NAMESPACE scale --replicas=0 $DEPLOYMENTOBJ
    while [ "$(oc -n $NAMESPACE get $DEPLOYMENTOBJ --template={{.status.replicas}})" != "0" ]; do
    echo
    done

    while sleep 0.1; do
    echo
    oc -n $NAMESPACE get pod
    read -p "Press ENTER to continuar" -t 3 || continue
    break
    done

    fi

    DESCRIPTION="snapshot-migration-${NAMESPACE}_${PVCNAME}_${VOLUMEID}"

    echo -n "Creating snapshot... "
    SNAPSHOTID=$(aws ec2 create-snapshot --volume-id $VOLUMEID --description $DESCRIPTION --output text --query SnapshotId)
    aws ec2 wait snapshot-completed --filter Name=snapshot-id,Values=$SNAPSHOTID
    echo $SNAPSHOTID

    echo -n "Creating volume... "
    TAGSPEC="ResourceType=volume,Tags=[{Key=Name,Value=kubernetes-dynamic-$PVNAME},{Key=kubernetes.io/created-for/pv/name,Value=$PVNAME},{Key=kubernetes.io/created-for/pvc/name,Value=$PVCNAME},{Key=kubernetes.io/created-for/pvc/namespace,Value=$NAMESPACE}]"
    VOLUMEID=$(aws ec2 create-volume \
    --availability-zone $TARGETZONE \
    --snapshot-id $SNAPSHOTID \
    --volume-type gp2 \
    --output text \
    --query VolumeId \
    --tag-specifications "$TAGSPEC")
    echo $VOLUMEID

    echo Updating $DEPLOYMENTOBJ...
    oc label pv/$PVNAME failure-domain.beta.kubernetes.io/zone=$TARGETZONE --overwrite
    oc patch -p "{\"spec\":{\"awsElasticBlockStore\":{\"volumeID\":\"aws://$TARGETZONE/$VOLUMEID\"}}}" pv/$PVNAME

    if [ $REPLICAS -gt 0 ]; then
    echo "Scaling back $DEPLOYMENTOBJ: 0 -> $REPLICAS"
    oc -n $NAMESPACE scale --replicas=$REPLICAS $DEPLOYMENTOBJ
    fi