Research infrastructure · Private cloud
CLODIS Cloud
연구실 서버 3대에 구축한 RKE2 기반 VM·컨테이너·GPU 작업 환경
프로젝트 소개
사용자별 VM과 GPU 작업 환경
- 연구실의 VM·컨테이너 자원을 Kubernetes에서 관리하는 3노드 클러스터
- 사용자 인증을 거친 API·CLI로 VM과 디스크를 생성·관리하는 셀프서비스 구성
- Rancher 기반 인증·클러스터 관리, Kubernetes Job·vLLM 기반 GPU 작업 환경 구성
인프라 구성
3노드 클러스터와 노드 로컬 스토리지
- CP: control plane·etcd·워크로드 실행, Worker 1·2: worker 역할
- KubeVirt·CDI로 VM과 디스크 이미지 관리, local-path 기반 PV/PVC 사용
- CPU
- 논리 CPU 132개 — CP 64개 · Worker 1 12개 · Worker 2 56개
- 메모리
- Kubernetes 인식 용량 약 1,316.7GiB — CP 251.5GiB · Worker 1 62.4GiB · Worker 2 1,002.7GiB
- GPU
- Kubernetes 등록 기준 Quadro RTX 6000 1장 · GeForce RTX 5090 1장
- 사용자 공간
- 개인 namespace 10개 · VM·디스크 관리 권한 계정 9개 · 읽기 전용 계정 1개
- 네트워크
- RKE2 Canal · Tailscale을 통한 노드 간 Pod 오버레이
- 스토리지
- local-path PV/PVC · 노드 로컬 디스크
구현 및 검증
사용자 권한으로 VM과 디스크 관리
- KubeVirt·CDI와 사용자별 RBAC를 구성해 승인된 Ubuntu 이미지로 VM 생성 및 데이터 디스크 연결
- 사용자 Rancher 인증을 거친 Kubernetes API port-forward와 게스트 공개키 인증으로 SSH 접속
- 실제 학부연구생 계정으로 로그인한 뒤 사용자 API를 통한 VM·루트 디스크 생성 확인
- 10GiB 데이터 디스크 생성·연결 및 VM 내부 SSH 접속 확인
- VM 중지·시작 후 루트·데이터 디스크의 파일 유지 확인
- 사용자 API를 통한 VM·Service·디스크 삭제 확인
권한 및 자원 정책
허용 작업과 차단 요청 검증
- namespace별 RBAC·ResourceQuota·NetworkPolicy·ValidatingAdmissionPolicy 구성
- 다른 사용자 namespace의 VM API 접근 거부 확인
- PVC 요청량 합계 40GiB 상한에 대해 41GiB 요청 거부 확인
- 서버 dry-run에서 hostDisk 사용과 CPU requests·limits 불일치 요청 거부 확인
- 일반 대학원생 계정 4개로 GPU Job 실행 및 종료 코드 0 확인
- GPU 2개 요청·특권 Job·타 namespace 요청 거부 및 GPU 1개 쿼터 초과 Job 차단 확인
장애 분석 및 해결
Rancher VPN 접속 장애 해결
- 증상: VPN 주소로 직접 접속하면 시간 초과, SSH 터널을 통한 접속은 정상
- 분석: tcpdump로 인터페이스별 패킷을 비교해 VPN으로 들어온 요청의 응답이 다른 터널로 나가는 현상 확인
- 원인: Calico의 패킷 mark와 Tailscale 정책 라우팅 조건이 겹쳐 잘못된 응답 경로 선택
- 수정: Calico의 mark 비트 영역을 분리하고 RKE2 HelmChartConfig에 저장, Canal Pod 순차 교체
- 검증: CA 인증서 검증을 사용한 VPN 직접 접속에서 HTTP 200 확인
- 회귀 검사: 노드 간 Pod 통신·256KiB 전송·DNS·Service 접근·namespace 격리 등 연결성 검사 11개가 변경 전후 모두 통과
- 기존 실행 워크로드의 상태와 재시작 횟수 유지 확인