KonanLLM 운영 포인트
1. 문서 목적
이 문서는 KonanLLM 설치 후 자주 사용하는 운영 명령과 상태 점검 포인트를 정리합니다. 전체 상태 확인, 컴포넌트별 재기동, external_files 반영, 서비스 제거와 같은 작업을 이 문서에서 다룹니다.
2. 우선 확인할 컴포넌트
문제가 생기면 아래 순서로 보는 것이 좋습니다. 데이터 plane 이 막혔으면 응용이 안 뜨고, 에이전트 plane 이 막혔으면 agent 호출이 실패하기 때문에 의존성 순으로 봅니다.
- 데이터 plane:
postgresql,redis,lakefs - 에이전트 plane:
agent-server,opensandbox-server,sandbox-workspace - 응용 (Kylin solution):
kylin-gaia,kylin-service,kylin-gateway,kylin-search - GPU 응용:
kylin-docai-ocr,kylin-docai-vllm
3. 자주 쓰는 상태 확인 명령
./instctl.sh status
./instctl.sh status kylin-search
./instctl.sh status kylin-gaia
./instctl.sh status kylin-docai-ocr
./instctl.sh status kylin-docai-vllm
4. search 관련 점검
kylin-search는 host 고정 배치와 license 설정이 중요합니다.
확인 포인트:
- 의도한
deploy_hosts노드에 실제로 배치되었는지 status kylin-search에서 상태가 정상인지- setup 이후 license 관련 파일이 준비되었는지
5. gaia 관련 점검
kylin-gaia 는 모델 리포지터리 준비가 중요합니다.
확인 포인트:
external_files로 준비된model_repo가 있는지status kylin-gaia가 정상인지- 동적 할당용 GPU 후보군 설정이 의도한 값으로 반영되었는지
install시 입력한 GPU 목록이 스택에 맞게 반영됐는지 확인- 초기 구동 후 Studio 대시보드 화면에 표시되는 GPU 정보 정상출력으로 확인 가능
6. OCR / vLLM 관련 점검
GPU 사용 컴포넌트는 host/GPU 설정과 외부 파일 준비가 중요합니다.
확인 포인트:
- OCR의
host,gpu_uuid - vLLM backend별
host,gpu_uuid - 모델 웨이트가
external_files를 통해 준비되었는지 - 해당 노드에서 실제 service가 올라왔는지
7. agent-server / sandbox plane 점검
에이전트 plane 은 agent-server (api / worker 2 service) + opensandbox-server + sandbox-workspace 3 컴포넌트로 구성됩니다. 한 곳이 막히면 graph 실행이나 사용자 코드 실행이 실패합니다.
확인 포인트:
agent-server의 api / worker 가 각각 1 replica 로 떠 있는지./instctl.sh status agent-server출력의 service 별 replicas 컬럼agent-server가postgresql과redis에 도달 가능한지- DATABASE_URL / REDIS_URL 이 가리키는 host 가 같은 swarm overlay 에서 DNS 로 풀리는지
opensandbox-server가 docker socket 마운트와 sandbox network 에 정상 접속하는지- sandbox 컨테이너가 새로 spawn 될 때
kylin-network에 join 하는지 확인 runtime.execd_image가 노드에 pull 되어 있는지 (opensandbox-execd:<태그>)sandbox-workspace의/workspaces//stagingbind mount 가 호스트 경로와 일치하는지- 멀티 노드면 NFS 같은 공유 저장소여야 함
- agent-server 첫 sandbox 호출은 image pull 때문에 30~70 초 소요 가능 —
OPENSANDBOX_TIMEOUT(기본 300) 안인지 확인
8. observability 관련 점검
필요하면 아래도 함께 확인합니다.
prometheusgrafanaotel-collectordcgm-exporter
특히 dcgm-exporter는 gpu_hosts 설정과 GPU 노드 배치를 함께 확인해야 합니다.
9. 설치 후 재반영 시나리오
설정 한두 개를 바꿀 때 전체 install 을 다시 돌릴 필요는 없습니다. 시나리오별로 필요한 단계만 호출합니다.
9.1 라이선스 타입 / 서버 정보 변경
kylin-search.license_server / kylin-search.license_type 변경 시.
스택 파일 수정 (또는 input.prop 수정 후 install 재실행)
→ setup # kql.lic 파일 재생성
→ restart kylin-search # bind mount 파일 변경은 up 으로 컨테이너 재기동 안 됨
→ status kylin-search
라이선스 값은 setup 단계에서 kql.lic 파일로 변환되어 bind mount 로 컨테이너에 노출됩니다. 파일 내용만 바뀌므로 stack spec 변경이 아니라서 up 만으로는 컨테이너가 재기동되지 않습니다. restart 로 명시 재기동해야 합니다.
9.2 GPU 노드 이동 / GPU UUID 변경
kylin-docai-ocr.host / kylin-docai-ocr.gpu_uuid / kylin-docai-vllm.backends[].host·gpu_uuid 변경 시.
스택 파일 수정 (또는 input.prop 수정 후 install 재실행)
→ setup # placement label 갱신을 위해 반드시
→ preview
→ up <component>
→ status <component>
이때 이전 노드의 service task 가 자동으로 정리되는지 확인합니다. docker service ps 출력에서 이전 노드의 task 가 남아 있다면 잠시 후 다시 확인하거나 restart 를 검토합니다.
9.3 external_files 추가 / 변경
번들 루트 external_files/<컴포넌트>/ 에 있는 파일을 추가·교체했을 때.
external_files/<컴포넌트>/<경로> 배치
→ setup --overwrite-external-files # workspace 로 다시 복사
→ restart <컴포넌트> # bind mount 내용 변경은 up 으로는 컨테이너 재기동이 안 됨
→ status <컴포넌트>
external_files 변경은 stack spec 변경이 아니라 컨테이너 bind mount 내용 변경입니다. 따라서:
setup단계에서 새 파일을 workspace 로 다시 복사해야 하고 (--overwrite-external-files명시),up만으로는 Pulumi 가 spec 변경을 감지하지 못해 컨테이너가 재기동되지 않으므로restart로 명시 재기동해야 합니다.
9.4 컴포넌트 설정 파일 덮어쓰기
workspace/components/<컴포넌트>/ 의 yaml / json / conf 등 설정 파일을 다시 채워야 할 때 (원본을 갱신했거나 임시로 수정한 값을 되돌릴 때).
스택 파일·원본 설정 갱신
→ setup --overwrite-config # yaml/json/conf 등 설정 파일 다시 덮어씀
→ restart <컴포넌트> # 컨테이너가 새 설정을 잡으려면 명시 재기동
→ status <컴포넌트>
설정 파일은 보통 bind mount 로 컨테이너에 노출되므로, 파일 내용만 바뀌어도 컨테이너가 자동으로 다시 읽지 않습니다 — restart 가 필요합니다.
컴포넌트 application 이 자체 사용자로 설정 파일의 소유주를 바꿔놓은 경우에도 setup --overwrite-config 가 권한 부족으로 막히지 않도록 자동 처리됩니다 (기존 owner / mode 유지하며 내용만 덮어씀).
9.5 이미지 태그 변경
스택 파일에서 image 태그 수정
→ preview # 변경된 컴포넌트만 잡히는지
→ up <component>
→ status <component> # docker service ps 의 IMAGE 컬럼 확인
이미지 pull 지연으로 preparing 상태가 오래 보일 수 있습니다.
9.6 컴포넌트 일시 비활성화 / 재활성화
특정 사이트나 환경에서 일부 컴포넌트를 잠시 제외하거나 다시 활성화할 때 사용합니다.
스택 파일의 disable_services 목록에 컴포넌트 이름을 추가 / 제거합니다.
- 비활성화 (목록에 추가): 해당 컴포넌트는
preview/up의 변경 대상에 더 이상 잡히지 않습니다. 이미 배포된 컴포넌트는 자동으로 내려가지 않으므로./instctl.sh destroy <component>로 명시적으로 내려야 합니다. - 재활성화 (목록에서 제거):
./instctl.sh up <component>또는 전체up으로 다시 올립니다.
disable_services 키의 자세한 의미는 세부 설정 을 보세요.
10. 재반영 시 자주 쓰는 명령
./instctl.sh up kylin-search
./instctl.sh up kylin-gaia
./instctl.sh up kylin-docai-ocr
./instctl.sh up kylin-docai-vllm
설정 변경 후에는 필요에 따라 setup을 먼저 다시 실행하세요.
11. 삭제 / 재설치 절차
KonanLLM 을 삭제하거나 다시 설치할 때는 먼저 목적 을 구분해서 판단하는 것이 좋습니다.
- 서비스/스택만 다시 올리면 되는 경우:
destroy후install또는up - 환경을 완전히 비우고 처음부터 다시 설치하는 경우:
uninstall - node join 상태, overlay network, service-to-service 통신까지 꼬인 경우: swarm cluster 정리까지 검토
11.1 전체 삭제 후 다시 설치 (destroy)
./instctl.sh destroy
./instctl.sh status
확인 포인트:
- 삭제 전에 필요한 설정 파일과 운영 데이터 백업이 끝났는지
external_files/, 공유 스토리지, bind mount 데이터는 별도로 관리해야 하는지- 동일 스택에 재설치할 것인지, 새 stack 으로 재구성할 것인지
single-node 에서는 보통 위 절차 후 ./instctl.sh install 재실행으로 충분합니다. destroy 는 이미지·workspace 데이터를 그대로 남기므로 재설치 시 image pull/setup 부담이 줄어드는 장점이 있습니다.
11.2 환경 완전 제거 후 다시 설치 (uninstall)
./instctl.sh uninstall
uninstall 은 destroy 에 더해 다음까지 한 번에 정리합니다.
- 솔루션 이미지: 로컬 + worker 노드 (SSH)
- named volume
node-add-data(각 swarm 노드) - installer 컨테이너 stop/remove + installer 이미지 rmi
HOST_WORKSPACE_PATH내부의.pulumi / components / locks / dist / outputs / build / .cache / images / .current-stack- kylin-gaia 가 로드한 LLM 등은 graceful kill 단계에서 자동으로 언로드 (skip 하려면
--no-graceful)
확인 포인트:
- 진행 직전 dry-list 가 보여 주는 삭제 대상이 의도와 맞는지
- multi-node 환경이면 SSH 자격증명 입력에 답할 준비가 됐는지 (worker 노드 작업 시점에 컨테이너가 prompt, 한 번 입력 후 같은 run 내 재사용. 또는
INSTCTL_SWARM_SSH_USER/INSTCTL_SWARM_SSH_PASSenv 로 사전 설정) external_files/와 공유 스토리지의 운영 데이터 백업이 끝났는지- bundle 디렉토리(
instctl.sh위치) 는 보존되므로, 완전히 지우려면 상위에서 해당 bundle 디렉토리를 직접 제거할 의향이 있는지
옵션으로 일부 단계만 보존할 수 있습니다.
--keep-images/--no-cluster-images: 이미지는 보존 또는 로컬만 정리--keep-workspace: workspace 내부 정리 skip--keep-installer: installer 컨테이너·이미지 보존
상세 동작은 실제 실행 전 dry-list 와 prompt 를 기준으로 확인하세요. 설치 단계별 흐름은 install 동작 세부 설명을 함께 참고하면 됩니다.
11.3 특정 컴포넌트만 삭제 후 다시 올리기
./instctl.sh destroy <component>
./instctl.sh status <component>
./instctl.sh up <component>
컴포넌트 설정이나 외부 파일만 다시 반영하면 되는 경우에는 전체 삭제보다 이 흐름이 안전합니다.
11.4 multi-node 에서 swarm cluster 정리까지 필요한 경우
아래와 같은 경우에는 application 삭제만으로 복구되지 않을 수 있습니다.
- worker 가 정상적으로 join 되지 않음
- overlay network 기반 service 간 통신이 계속 실패함
- 방화벽 / NIC / routing / VLAN 변경 후부터 swarm 통신 이상이 생김
이 경우에는:
./instctl.sh destroy로 애플리케이션 리소스를 먼저 정리하고- worker node 부터 swarm leave
- manager node 를 마지막에 정리하고
- swarm cluster 를 다시 구성한 뒤
./instctl.sh install을 재실행합니다.
실행 순서는 위 다섯 단계를 그대로 따르면 됩니다. cluster 재구성 전에는 worker 부터 leave 하고 manager 를 마지막에 정리하는 순서를 유지하세요.
11.5 먼저 확인하면 좋은 문서
- single-node 설치 흐름: single-node 시작
- multi-node 설치 흐름: multi-node 시작
- 설치 단계별 설명: install 동작 세부 설명
12. 자주 만나는 문제
증상 → 의심·확인 흐름. KonanLLM 환경에서 반복적으로 보고되는 케이스 위주입니다. multi-node 문제는 서비스 상태, 노드 접근성, shared storage 경로를 함께 확인하세요.
12.1 kylin-search 가 의도한 노드에 안 뜸
status kylin-search의docker service ps출력에서NODE컬럼 확인- 의심 1: 스택의
deploy_hosts또는 단수deploy_host가 실제 노드 호스트네임과 일치하는지 (대소문자 포함) - 의심 2: swarm 노드에
kylin-search==truelabel 이 붙었는지 —setup단계가 label 을 자동으로 적용. label 누락이면setup재실행 - 의심 3: 노드가 swarm 에 join 되지 않았거나 drain 상태 —
docker node ls
12.2 라이선스 서버에 도달 안 됨
증상: kylin-search service logs 에 license 관련 connection 실패.
kylin-search.license_server의 IP:Port 가 서비스 노드에서 도달 가능한지 (nc -zv <ip> <port>)- 사이트 방화벽이 해당 포트를 열어두었는지
- 값 자체에 오타 (포트 콜론 누락 등) 가 없는지
12.3 GPU UUID 못 찾음 / 컨테이너 GPU 미접근
host(단수 키) 에 지정한 노드에서nvidia-smi -L실행해gpu_uuid가 일치하는지 확인- nvidia-container-toolkit 설치 누락 시 컨테이너 시작 자체가 실패 —
docker info의Default Runtime확인 - vLLM 다중 backend 의 경우 backend 별 host/gpu_uuid 가 동일 노드의 다른 GPU 를 가리키는지 확인
12.4 external_files 의 새 파일이 컨테이너에 안 보임
setup단계를 건너뛰었거나--overwrite-external-files를 안 줘서 옛 파일이 그대로일 가능성. 변경 후엔./instctl.sh setup --overwrite-external-files재실행setup출력에서 변경한 파일의 "external file 복사 완료" 라인이 보이는지setup후에도 컨테이너가 옛 파일을 잡고 있을 수 있음 —./instctl.sh restart <컴포넌트>로 명시 재기동 (bind mount 내용 변경은up만으로는 재기동 안 됨)- 멀티 노드 swarm 에서 workspace 가 NFS 공유가 아니면 한 노드에만 복사된 상태 —
HOST_WORKSPACE_PATH가 공유 저장소인지 확인
12.5 agent-server 첫 호출이 timeout
증상: agent-server worker 가 sandbox 호출에서 timeout 발생, OPENSANDBOX_TIMEOUT exceeded 류 로그.
opensandbox-server가 사용하는execd_image가 노드에 pull 되어 있는지 확인 (docker pull <image>미리)- 첫 spawn 시 image pull 만 30~70 초 소요.
OPENSANDBOX_TIMEOUT(기본 300) 안인지 확인 - 사이트가 registry 접근이 막혀 있다면 미리 image 를 load 해두기
12.6 sandbox 가 spawn 됐지만 kylin-network 에 join 안 됨
opensandbox-server의 config.toml 의[docker] network_mode가kylin-network인지 (또는swarm_global_config.common_network_name과 일치하는지)- swarm 의 overlay network 가 모든 노드에 propagate 되었는지 —
docker network ls의 SCOPE=swarm 확인
12.7 image pull 지연으로 preparing 상태가 너무 김
- 처음 배포 시 노드별 image pull 시간 때문에 정상. 5~10 분 대기 후 다시
status확인 - 지속되면
docker service ps <service>의ERROR컬럼 확인 — pull 권한 부재면 사이트 registry 인증 점검 - 해소되지 않으면 노드에서 수동으로
docker pull <image>시도해 권한·네트워크 분리