Skip to content

Instantly share code, notes, and snippets.

@svinther
Forked from yuanying/kubectl-run-with-pvc.sh
Last active February 4, 2019 14:43
Show Gist options
  • Save svinther/101d563e8adb14d096326f55e240a55d to your computer and use it in GitHub Desktop.
Save svinther/101d563e8adb14d096326f55e240a55d to your computer and use it in GitHub Desktop.
kubectl run with PVCs
#!/bin/bash
###
### https://gist.github.com/svinther/101d563e8adb14d096326f55e240a55d
###
IMAGE="svinther/docker-armyknife"
COMMAND="/bin/bash"
NAMESPACE=default
SERVICEACCOUNT=
PULLPOLICY=Always
SUFFIX=$(date +%s | shasum | base64 | fold -w 3 | head -1 | tr '[:upper:]' '[:lower:]')
usage_exit() {
echo "Usage: $0 [-c command] [-i image] [-n namespace] [-s serviceaccount] [-p imagePullPolicy] [PVC...]" 1>&2
exit 1
}
while getopts i:c:n:s:p:h OPT
do
case $OPT in
i) IMAGE=$OPTARG
;;
c) COMMAND=$OPTARG
;;
n) NAMESPACE=$OPTARG
;;
s) SERVICEACCOUNT=$OPTARG
;;
p) PULLPOLICY=$OPTARG
;;
h) usage_exit
;;
\?) usage_exit
;;
esac
done
shift $(($OPTIND - 1))
VOL_MOUNTS=""
VOLS=""
COMMA=""
for i in $@
do
VOL_MOUNTS="${VOL_MOUNTS}${COMMA}{\"name\": \"${i}\",\"mountPath\": \"/pvcs/${i}\"}"
VOLS="${VOLS}${COMMA}{\"name\": \"${i}\",\"persistentVolumeClaim\": {\"claimName\": \"${i}\"}}"
COMMA=","
done
JSON_PATCH=$(cat << EOF
{
"spec": {
$([ -n "$SERVICEACCOUNT" ] && printf '"serviceAccount": "%s",' "$SERVICEACCOUNT")
"hostNetwork": false,
"containers":[
{
"imagePullPolicy": "${PULLPOLICY}" ,
"args": ["${COMMAND}"],
"stdin": true,
"tty": true,
"name": "pvc",
"image": "${IMAGE}",
"volumeMounts": [
${VOL_MOUNTS}
]
}
],
"volumes": [
${VOLS}
]
}
}
EOF
)
kubectl run \
--namespace=${NAMESPACE} \
-it --rm --restart=Never \
--image=${IMAGE} \
--overrides "$JSON_PATCH" \
mypod-${SUFFIX} \
-- ${COMMAND}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment