티스토리 뷰

카테고리 없음

PostgreSQL Pod 접속

미니대왕님 2024. 10. 23. 10:42

1. PostgreSQL Pod 접속

먼저 PostgreSQL이 실행되고 있는 Pod에 접속해야 합니다. 이를 위해 쿠버네티스에서 해당 Pod의 이름을 찾고, kubectl exec 명령을 사용해 PostgreSQL Pod 내부에서 명령어를 실행할 수 있습니다.

  1. PostgreSQL Pod 확인
     
     
    kubectl get pods -n <namespace>
    • <namespace>: PostgreSQL이 속한 네임스페이스. 만약 네임스페이스를 사용하지 않는다면 생략 가능.
    예시 출력:
  2. NAME READY STATUS RESTARTS AGE postgresql-xxxxx-xxxxx 1/1 Running 0 10h
  3. PostgreSQL이 실행 중인 Pod의 이름을 확인하기 위해 다음 명령어를 사용합니다.
  4. PostgreSQL Pod 접속
    kubectl exec -it postgresql-xxxxx-xxxxx -n <namespace> -- /bin/bash
    • postgresql-xxxxx-xxxxx: 위 명령에서 확인한 PostgreSQL Pod의 이름.
  5. PostgreSQL Pod 내부에 접속하려면 kubectl exec 명령을 사용합니다. 쉘 세션을 열기 위해 -it 옵션을 사용하여 접속합니다.

2. pg_restore 실행 준비

Pod에 접속한 후 PostgreSQL 명령어를 실행할 수 있습니다. 그러나 먼저 백업 덤프 파일을 PostgreSQL Pod 내부에 업로드하거나 외부 스토리지로 접근할 수 있어야 합니다.

  1. 백업 파일 업로드 (선택 사항)
    kubectl cp /path/to/local/backup.dump <namespace>/<pod_name>:/path/to/pod/
    예시:
  2. kubectl cp ./backup.dump default/postgresql-xxxxx-xxxxx:/tmp/
  3. 만약 덤프 파일이 로컬 시스템에 있다면, kubectl cp 명령을 사용하여 파일을 Pod로 복사할 수 있습니다.
  4. 데이터베이스 확인
    psql --version
    설치가 되어 있다면 다음 단계로 진행합니다.
  5. PostgreSQL Pod 내에서 기본적으로 데이터베이스 클라이언트 psql과 관련 도구가 설치되어 있어야 합니다. 설치되어 있는지 확인하려면 다음 명령을 실행합니다.

3. pg_restore 명령 실행

이제 Pod 내부에서 pg_restore 명령을 실행하여 데이터를 복원할 수 있습니다.

  1. 데이터베이스 생성 (필요한 경우)
    psql -U <username> -d postgres -c "CREATE DATABASE <dbname>;"
    예시:
  2. psql -U postgres -d postgres -c "CREATE DATABASE mydb;"
  3. 덤프 파일이 새로운 데이터베이스로 복원될 경우, 먼저 데이터베이스를 생성해야 합니다.
  4. pg_restore 실행
    pg_restore -h localhost -p 5432 -U <username> -d <dbname> -v /path/to/backup_file.dump
    예시:
    • -h localhost: PostgreSQL 서버는 Pod 내부에서 로컬호스트로 접근합니다.
    • -p 5432: PostgreSQL의 기본 포트.
    • -U <username>: PostgreSQL 사용자 이름.
    • -d <dbname>: 복원할 데이터베이스 이름.
    • /tmp/backup.dump: 복원할 덤프 파일 경로.
  5. pg_restore -h localhost -p 5432 -U postgres -d mydb -v /tmp/backup.dump
  6. pg_restore를 사용하여 덤프 파일을 복원합니다. Pod 내부에 접속해 있다면 파일 경로를 Pod 내의 경로로 지정해야 합니다.

4. 네트워크 설정 및 접근

PostgreSQL Pod가 클러스터 내부에만 접근 가능하다면, 외부에서 데이터베이스에 접근하려면 Kubernetes의 ServiceIngress로 노출해야 합니다. 이를 통해 외부 시스템에서 PostgreSQL로 연결할 수 있습니다.

  1. NodePort 또는 LoadBalancer 서비스로 노출:
  2. yaml
    apiVersion: v1 kind: Service metadata: name: postgresql spec: type: NodePort # 또는 LoadBalancer ports: - port: 5432 targetPort: 5432 protocol: TCP selector: app: postgresql

5. 복원 후 검증

  • 데이터 확인: 복원이 성공했는지 데이터를 확인하려면 psql로 데이터베이스에 접속한 후 테이블을 조회합니다.예시:
  • psql -U postgres -d mydb -c "\dt"
  • psql -U <username> -d <dbname> -c "\dt"
  • 로그 확인: 복원 중에 발생한 에러나 경고 메시지가 없는지 pg_restore의 로그를 확인하고, 필요한 경우 오류를 처리합니다.

요약

  • Pod에 접속하여 pg_restore 명령을 실행.
  • 백업 덤프 파일을 Pod에 복사하거나 외부 스토리지에서 접근.
  • pg_restore를 사용하여 PostgreSQL 데이터베이스에 데이터를 복원.
  • 복원 후 데이터 무결성 확인.

이 과정은 Kubernetes 환경에서 PostgreSQL 데이터베이스를 복원하는 일반적인 방법입니다. 필요에 따라 네트워크 설정을 통해 외부에서 접근하거나 내부 클러스터 내에서만 사용할 수 있습니다.

댓글