프로젝트 · 사용자 · 작업 이력 같은 CDSW 의 메타데이터가 어디에 저장되는지, 화면에서 확인할 수 없는 값을 직접 조회하려면 어디에 붙어야 하는지 알아야 한다.
CDSW 는 메타데이터를 내장 PostgreSQL 에 담는다. 외부 RDBMS 로 빼는 구성은 지원되지 않으므로, MySQL 이나 Oracle 로 돌려놓았을 것이라는 가정으로 찾으면 헛수고가 된다.
CDSW 자체가 쿠버네티스 위에서 도는 구조라, PostgreSQL 도 파드로 떠 있다. 호스트에서 psql 을 치는 것이 아니라 그 파드 안으로 들어가야 한다.
kubectl get pods -A | grep -i -E 'postgres|db'
파드 이름은 버전에 따라 다르다. db- 로 시작하거나 postgres 가 들어간 이름을 찾는다.
파드 안에서 psql 을 연다. 데이터베이스와 계정 이름은 보통 sense 다.
kubectl exec -it -n <네임스페이스> <postgres-파드> -- psql -U sense -d sense
파드 이름을 매번 찾기 번거로우면 레이블로 잡는다.
POD=$(kubectl get pod -A -l app=db -o jsonpath='{.items[0].metadata.name}')
관리 도구로 붙고 싶으면 포트를 전달한다.
kubectl port-forward -n <네임스페이스> <postgres-파드> 15432:5432
psql -h 127.0.0.1 -p 15432 -U sense -d sense
계정 정보는 파드의 환경변수나 시크릿에 들어 있다. 값을 화면에 그대로 찍지 않도록 주의한다.
kubectl get secret -n <네임스페이스> <시크릿이름> -o jsonpath='{.data}' | head -c 0
접속한 뒤 테이블 목록부터 본다.
\dt
\d users
\d projects
실무에서 자주 찾는 것은 다음과 같다. 정확한 이름은 버전마다 다르므로 \dt 로 확인한다. (확인 필요)
| 보고 싶은 것 | 대략의 위치 |
|---|---|
| 사용자 목록과 마지막 접속 | 사용자 테이블 |
| 프로젝트와 소유자 | 프로젝트 테이블 |
| 세션·작업 실행 이력 | 대시보드/엔진 실행 테이블 |
| 엔진(런타임) 이미지 등록 | 엔진 이미지 테이블 |
SELECT username, created_at, last_sign_in_at FROM users ORDER BY created_at DESC LIMIT 20;
조회는 문제가 없지만 쓰기는 하지 않는다. CDSW 는 이 DB 의 상태와 쿠버네티스 자원을 함께 관리하므로, 테이블만 고치면 둘이 어긋나 복구하기 어려운 상태가 된다. 지원 대상에서도 벗어난다.
값을 바꿔야 하는 일은 대부분 API 로 할 수 있다.
curl -s -H "Authorization: Bearer $CDSW_API_KEY" \
https://cdsw.example.com/api/v1/users | python3 -m json.tool
메타데이터 DB 는 CDSW 백업의 핵심이다. 논리 백업을 뜬다.
kubectl exec -n <네임스페이스> <postgres-파드> -- \
pg_dump -U sense -d sense -Fc > cdsw_meta_$(date +%F).dump
프로젝트 파일은 별도 NFS 볼륨에 있으므로 함께 백업해야 복구가 성립한다. DB 만으로는 되돌릴 수 없다.
CDSW 의 후속인 CML · Cloudera AI 도 구조는 같다. 메타데이터는 내장 PostgreSQL 에 있고, 워크스페이스마다 별도로 존재한다. 다만 네임스페이스와 파드 이름 규칙이 다르므로 위 명령의 대상만 바꿔 쓴다.