조직용 Discourse를 k8s에 설치하려고 하고 있습니다. 그런데 몇 가지 문제가 있습니다.
부트스트랩된 이미지를 Kubernetes에 배포하면 git pull pups와 git pull discourse와 같은 작업을 수행하려고 하는데, 인터넷 접근이 없는 사내 네트워크 환경이므로 해당 명령이 실행되지 않아 컨테이너가 시작되지 않습니다. 이 부분들을 건너뛰고 배포할 수 있는 방법이 있을까요?
이미 부트스트랩된 이미지를 배포하고 있는 것이 확실합니까? 레지스트리에 잘못된 이미지를 푸시한 것처럼 보입니다.
아, 그렇군요. ./launcher bootstrap app 명령으로 생성된 이미지를 사용하고 있습니다.
그러면 최종적으로 부트스트랩된 이미지에는 그런 의존성이 포함되지 않아야 한다는 말씀이신가요?
아니요, 없습니다. 부트스트랩이 완료된 후에는 local_discourse/app 이미지가 생성됩니다. 이 이미지를 레지스트리에 푸시하고 다른 곳에서 사용해야 합니다.
마지막으로 한 가지 질문이 있는데, 제가 잘못된 이미지를 push한 것 같네요. 제 실수입니다. 그렇다면 실제 이미지를 push한 후, k8s 배포 시 DISCOURSE_DB_HOST 같은 환경 변수를 변경할 수 있는 건가요? 저는 별도의 postgres 클러스터와 redis 클러스터를 사용 중이거든요!
그런 경험 다 해봤습니다. 걱정 마세요, 아주 흔한 실수입니다. 그래서 제가 물어본 거예요 ![]()
음, 그건 좀 복잡합니다.
컨테이너 실행 시 필요한 ENV 변수를 추가하기만 하면 쉽게 덮어쓸 수 있지만, 부팅(bootstrap) 단계에서는 마이그레이션이 실행됩니다. 이미 부팅이 완료된 상태에서 이미지를 다른 데이터베이스를 가리키도록 시도하면 데이터베이스 스키마가 완전히 잘못됩니다. 이렇게 하면 unsupported-install(비공식 설치) 영역에 깊이 발을 들이게 됩니다.
저는 이미 Discourse 인스턴스를 하나 실행 중인데, 이는 베어 메탈(bare metal) 환경에서 돌아가고 있습니다. 이제 이를 k8s로 이전하고, 베어 메탈 인스턴스가 사용하던 동일한 데이터베이스에 연결하려고 합니다.
혹시 가능하면 DISCOURSE_DB_HOST와 DISCOURSE_DB_NAME을 베어 메탈 서버가 사용 중인 동일한 데이터베이스를 가리키도록 설정하여 부트스트랩을 다시 실행할 수 있을까요?
그렇게 하면 작동할 것입니다!
그 작업을 수행하는 동안 현재 DB에 연결된 Discourse 컨테이너를 중지하는 것이 좋습니다. 마이그레이션이 컨테이너의 동작에 문제를 일으킬 수 있기 때문입니다.
새로 빈 데이터베이스를 만들어서 부트스트랩을 한다면, UI를 통해 데이터를 마이그레이션할 수 있을까요? (구버전 Discourse 인스턴스와 신규 Discourse 인스턴스의 UI를 사용하여 /admin/backups처럼요.) 많은 사용자가 사용 중인 구버전 데이터베이스가 손상되는 것을 피하고 싶습니다.
UX에서 마이그레이션을 수행할 수 없습니다.
배포 후 마이그레이션 도입을 참고하세요. 이를 통해 데이터베이스를 이전하여 구버전과 신규 컨테이너 모두에서 작동하도록 한 뒤, 배포 완료 후 최종 마이그레이션을 수행할 수 있습니다.
즉, 또 잘못된 이미지를 푸시했다는 뜻입니다.
원하는 리소스를 모방하도록 내부 /etc/hosts 파일을 변경한 다음 필요한 내용을 추가하면 됩니다.
더 쉬운 방법도 있습니다 … 4G/SIM 연결이 가능한 모뎀/라우터를 설치하세요. 네트워크가 해당 장치를 내부 네트워크의 기본 라우터로 인식하도록 설정한 후 … 연결하고 … 작업을 수행하고 … 연결을 해제하세요.
꽤 간단한 방법입니다.
감사합니다
Keith John Hutchison - Ceiteach Seán Mac Úistin
Bringing Data to Life Pty. Ltd. (BD2L)
이번엔 꽤 확신합니다
./launcher bootstrap app 실행 중에 어떤 에러가 발생하는 건가요?
게다가 현재 베어 메탈에서 실행 중인 최신 discourse 이미지를 가져와서 k8s에서 사용해 봤는데, 이 경우에도 위에서 언급한 동일한 에러가 발생합니다.
오프라인 상태에서도 로컬 머신에서 다음 명령을 실행하면
docker run local_discourse/app
위와 같은 오류가 발생하는 것 같습니다.