Kubectl: Download Postgres db-export gzipped from an on-the-fly Postgres k8s pod
Aug 2, 2023
Useful to download RDS Postgres db from a k8s namespace where pg_dump is not installed
POD_NAME=pgdump-temp-elvis
BACKUP_FILE="backup-file.sql"
BACKUP_FILE_GZ="backup-file.sql.gz"
K8S_NAMESPACE=my-k8s-namepsace
# create postgres pod
kubectl -n $K8S_NAMESPACE get "pods/${POD_NAME}" || ( kubectl -n $K8S_NAMESPACE run $POD_NAME --image=postgres:13-alpine --env="POSTGRES_USER=x" --env="POSTGRES_PASSWORD=x" --env="POSTGRES_DB=x" --image=postgres:13-alpine --restart=Never; sleep 10; )
# run pg_dump + gzip
kubectl -n $K8S_NAMESPACE exec "pods/${POD_NAME}" -- sh -c "PGPASSWORD=<pass> pg_dump -x -O -U <user> postgresql://<host>:5432/<db> | gzip > /tmp/db.sql.gz"
# download locally then extraxt
kubectl -n $K8S_NAMESPACE cp ${POD_NAME}:/tmp/db.sql.gz $BACKUP_FILE_GZ
gunzip $BACKUP_FILE_GZ