개요
AWS EKS의 쿠버네티스 버전 업그레이드 작업을 앞두고, 예기치 않게 문제 상황이 발생할 경우를 대비해 클러스터 내에서 동작하고 있는 DB를 백업해두려고 한다. 방법을 적어둔다.
사용 데이터베이스 엔진은 PostgreSQL이다.
방법
1. DB 포드 컨테이너 접속
kubectl exec -it <DB_POD> -- bash
# 예시
kubectl exec -it superset-postgresql-0 -- bash
2. 데이터베이스 Dump 수행
pg_dumpall > <OUTPUT_FILE>
pg_dumpall -U <USER> > <OUTPUT_FILE>
# 예시
pg_dumpall -U postgres > backup.sql
Pod Container에서 psql, pg_dump, pg_dumpall 등 postgres에 작업할 수 있는 명령어를 옵션 없이 실행하면, 경우에 따라 쉘을 시작한 사용자 계정이 없어 실행에 실패할 수 있다. 이 경우, DB에 작업할 DB 사용자를 지정하여 실행하면 된다. 실행 중 계정 비밀번호 입력이 다회 요구될 수 있다.
🤔 PostgreSQL superuser postgres 계정 비밀번호 확인 방법
PostgreSQL 데이터베이스 전체 백업인 만큼 supersuser 권한을 가진 계정을 사용하는 것이 좋다. 만약 superuser 권한을 가진 계정이 postgres 계정만 있다면, 계정 비밀번호는 yaml 정의 파일이나 환경변수에서 확인할 수 있다.
- values.yaml 등 정의 파일 : postgresql.auth.postgresPassword
- 환경 변수 : $POSTGRES_POSTGRES_PASSWORD
3. Dump 파일을 Pod 컨테이너 밖 쿠버네티스 접속 환경에 복사
DB Pod Container 접속을 종료하고, kubectl cp 명령을 이용해 DB Pod Container 내에 저장된 dump 파일을 복사한다.
kubectl cp <POD_NAME>:<SOURCE_PATH> <DEST_PATH>
# 예시
kubectl cp superset-postgresql-0:/tmp/dumpall_superset_postgres.sql dumpall_superset_postgres.sql
이후 복사한 파일에 문제가 없는지 확인한다.
참고 문서