CloudBeaver 컨테이너가 기동 중에 아래 예외로 죽는 경우다. docker run 으로는 잘 뜨는 이미지가 Kubernetes 에서만 실패하는 형태로 나타난다.
ERROR io.cloudbeaver.server.CBApplication - Error initializing database
org.jkiss.dbeaver.DBException: No database driver configured for CloudBeaver database
at org.jkiss.dbeaver.model.sql.db.InternalDB.getDatabaseDriver(InternalDB.java:177)
at io.cloudbeaver.service.security.db.CBDatabase.initialize(CBDatabase.java:140)
여기서 말하는 database 는 사용자가 붙으려는 대상 DB 가 아니라 CloudBeaver 자신이 사용자·연결 정보를 저장하는 내부 관리 DB(CE 기본값은 H2 임베디드)다.
드라이버가 없어서 나는 오류와 드라이버를 고르지 못해서 나는 오류를 먼저 가른다. 기동 로그에 다음 줄이 나오는지 본다.
DEBUG o.j.d.r.DataSourceProviderRegistry - Total database drivers: 126 (126)
INFO i.c.registry.WebDriverRegistry - Available drivers: ... H2 Embedded ...
이 줄에 H2 Embedded 가 보인다면 드라이버는 정상적으로 적재된 것이다. 그렇다면 남은 원인은 어떤 드라이버를 쓸지 정해 두는 런타임 설정이 비어 있는 경우다. 이 설정은 워크스페이스 안에 있다.
DEBUG i.c.s.CBServerConfigurationController - Runtime configuration
[/opt/cloudbeaver/workspace/.data/.cloudbeaver.runtime.conf]
CloudBeaver 는 최초 기동 때 이 파일을 만들고 이후에는 그 내용을 기준으로 동작한다. 첫 기동이 중간에 실패했거나 설정을 바꾸는 도중에 종료되면 불완전한 런타임 설정이 영구 볼륨에 남는다. docker run 은 매번 빈 워크스페이스에서 시작하므로 파일이 새로 만들어져 문제가 드러나지 않고, PVC 를 붙인 Kubernetes 배포에서만 재현된다.
반대로 위 로그에 드라이버 목록 자체가 없거나 수가 비정상적으로 적다면 볼륨 마운트가 이미지의 파일을 덮은 것이다. 다음을 확인한다.
kubectl exec -it <pod> -- ls -al /opt/cloudbeaver/server/plugins | head
org.jkiss.dbeaver.ext.h2_*.jar 가 없으면 마운트 경로가 잘못됐다. 볼륨은 /opt/cloudbeaver/workspace 에만 건다. /opt/cloudbeaver 나 /opt/cloudbeaver/server 를 통째로 마운트하면 이미지 안의 플러그인이 전부 가려진다.
런타임 설정이 깨진 경우, 워크스페이스의 .data 디렉터리를 비우고 파드를 다시 만든다. 이미 만들어 둔 연결 정의와 계정도 함께 사라지므로 운영 중이라면 먼저 백업한다.
kubectl exec -it <pod> -- sh -c 'ls -al /opt/cloudbeaver/workspace/.data'
kubectl exec -it <pod> -- sh -c 'rm -rf /opt/cloudbeaver/workspace/.data'
kubectl rollout restart deploy/cloudbeaver -n <namespace>
재발을 막으려면 관리 DB 를 임베디드 H2 대신 외부 PostgreSQL 로 빼는 편이 낫다. 워크스페이스 볼륨이 상태를 독점하지 않게 되므로 파드 교체에 강해진다.
docker logs 에는 없고 Kubernetes 에서만 CreateContainerConfigError 가 먼저 뜨는 경우는 이 오류와 무관하다. 그때는 참조하는 ConfigMap · Secret 키가 실제로 존재하는지부터 본다.
kubectl describe pod <pod> -n <namespace> | sed -n '/Events/,$p'
기동 시 드라이버를 강제로 지정하는 설정 키가 있다는 설명이 돌지만, CloudBeaver CE 25.x 공식 문서에서 그런 키(CB_DATABASE_DRIVER 등)를 확인하지 못했다. 워크스페이스 초기화로 해결되는 문제이므로 검증되지 않은 키를 설정 파일에 넣지 않는다. (확인 필요)